C# Unity 无法将类型 float 隐式转换为 int
C# Unity cannot implicity convert type float to int
我正在尝试对数组中引用的游戏对象的颜色进行动画处理。像这样
public GameObject[] laneMat;
void Update()
{
StartCoroutine(CountDownMat(laneMat, .3f));
}
IEnumerator CountDownMat(GameObject[] laneMat, float delay)
{
time += Time.deltaTime;
for(float i = 0; i < laneMat.Length; i++)
{
if (duration > time)
{
laneMat[i].GetComponent<Renderer>().material.color = Color.Lerp(startColor, endColor, time / duration);
yield return new WaitForSeconds(delay);
}
}
}
我正在寻找的是,让游戏对象按顺序改变颜色,每个对象之间有 0.3 秒的延迟。
但是我不断收到错误:由于这一行无法将类型 float 隐式转换为 int laneMat[i].GetComponent<Renderer>().material.color = Color.Lerp(startColor, endColor, time / duration);
我很难理解该错误,因为数组是 gameObject 类型,所以不太确定转换是什么float to int here..
我尝试了另一种方法,即用 foreach 更改 for 循环,但没有按预期工作。
如有任何帮助,我们将不胜感激
您将循环中的索引 (i) 声明为浮点数。
然后将它作为 float 传递给数组的索引器。这是导致错误的原因。
只需使用 int 代替,不再需要类型转换。
for(int i = 0; i < laneMat.Length; i++)
{
if (duration > time)
{
laneMat[i].GetComponent<Renderer>().material.color = Color.Lerp(startColor, endColor, time / duration);
yield return new WaitForSeconds(delay);
}
}
我正在尝试对数组中引用的游戏对象的颜色进行动画处理。像这样
public GameObject[] laneMat;
void Update()
{
StartCoroutine(CountDownMat(laneMat, .3f));
}
IEnumerator CountDownMat(GameObject[] laneMat, float delay)
{
time += Time.deltaTime;
for(float i = 0; i < laneMat.Length; i++)
{
if (duration > time)
{
laneMat[i].GetComponent<Renderer>().material.color = Color.Lerp(startColor, endColor, time / duration);
yield return new WaitForSeconds(delay);
}
}
}
我正在寻找的是,让游戏对象按顺序改变颜色,每个对象之间有 0.3 秒的延迟。
但是我不断收到错误:由于这一行无法将类型 float 隐式转换为 int laneMat[i].GetComponent<Renderer>().material.color = Color.Lerp(startColor, endColor, time / duration);
我很难理解该错误,因为数组是 gameObject 类型,所以不太确定转换是什么float to int here..
我尝试了另一种方法,即用 foreach 更改 for 循环,但没有按预期工作。
如有任何帮助,我们将不胜感激
您将循环中的索引 (i) 声明为浮点数。 然后将它作为 float 传递给数组的索引器。这是导致错误的原因。
只需使用 int 代替,不再需要类型转换。
for(int i = 0; i < laneMat.Length; i++)
{
if (duration > time)
{
laneMat[i].GetComponent<Renderer>().material.color = Color.Lerp(startColor, endColor, time / duration);
yield return new WaitForSeconds(delay);
}
}