C# Unity 不能隐式地将类型 float 转换为 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 秒的延迟。

但是我不断收到错误:由于这一行laneMat[i].GetComponent<Renderer>().material.color = Color.Lerp(startColor,time / duration); ,我无法将类型浮点数隐式转换为 int 我很难理解错误,因为数组是游戏对象的类型,所以不确定浮点数是什么在这里..

我尝试了另一种方法,通过使用 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);
    }            
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...