6 using System.Collections.Generic;
15 [Tooltip(
"GameObject with the materials to be color blended - must support material.color")]
18 [Tooltip(
"Length of time to transition colors in seconds")]
19 public float TransitionTime = 0.75f;
21 [Tooltip(
"Use easing")]
27 private struct ColorTransitionData
29 public Color EndColor;
30 public Color StartColor;
31 public float Percentage;
34 public Material Material;
39 public Material[] Materials {
get;
set; }
42 private List<ColorTransitionData> mData;
47 if (TargetObject == null)
49 TargetObject = this.gameObject;
53 if (Materials == null)
55 Materials = TargetObject.GetComponent<Renderer>().materials;
59 mData =
new List<ColorTransitionData>();
61 for (
int i = 0; i < Materials.Length; ++i)
63 ColorTransitionData data =
new ColorTransitionData();
64 data.StartColor = Materials[i].color;
66 data.Time = TransitionTime;
67 data.Count = TransitionTime;
68 data.Material = Materials[i];
69 data.Name = Materials[i].name;
71 int SpaceIndex = data.Name.IndexOf(
" ");
74 data.Name = data.Name.Substring(0, SpaceIndex);
89 for (
int i = 0; i < mData.Count; ++i)
91 if (mData[i].Name == name || name ==
"")
93 ColorTransitionData data = mData[i];
95 data.Time = TransitionTime;
96 data.EndColor = color;
97 data.StartColor = data.Material.color;
111 private Color GetColorTransition(Color startColor, Color endColor,
float percentage)
113 Color newColor = endColor;
117 float smoothPercentage = percentage;
118 if (SmoothTransition)
120 smoothPercentage = -1 * 0.5f * (Mathf.Cos(Mathf.PI * percentage) - 1);
123 newColor = Color.LerpUnclamped(startColor, endColor, smoothPercentage);
132 private void Update()
134 for (
int i = 0; i < mData.Count; ++i)
136 ColorTransitionData data = mData[i];
138 if (data.Count < data.Time)
140 data.Count = Mathf.Clamp(data.Count + Time.deltaTime, 0, data.Time);
141 data.Material.color = GetColorTransition(data.StartColor, data.EndColor, data.Count / data.Time);