Unity在多种材料之间徘徊

时间:2014-07-30 17:11:43

标签: c# unity3d material

我需要通过附加到我的一个游戏对象的10种不同材料进行搜索,但出于某种原因,我编写的代码并不起作用。过去一小时我一直在努力锻炼为什么,而且我已经筋疲力尽了。

有没有更新眼睛的人可以看看我是否做了一些愚蠢的事情?

public class LerpMaterials : MonoBehaviour
{

public List<Material> materials = new List<Material>();

public float lerpSpeed;

int currentMaterialNo;
Material currentMaterial;
Material targetMaterial;
bool lerpingMaterial;

float lerp;


void Start ()
{
    if (materials.Count < 2)    return;

    currentMaterialNo = 0;
    currentMaterial = materials[currentMaterialNo];
    targetMaterial = materials[currentMaterialNo+1]; 
}



void Update ()
{
    if (materials.Count < 2)    return;

    lerp += lerpSpeed;

    renderer.material.Lerp(currentMaterial, targetMaterial, lerp);

    if (lerp >= 1)
        SwitchMaterial();

}


void SwitchMaterial()
{
    if ( currentMaterialNo >= (materials.Count - 1) )
        currentMaterialNo = 0;
    else
        currentMaterialNo++;

    currentMaterial = materials[currentMaterialNo];
    targetMaterial = materials[currentMaterialNo++];

    lerp = 0;
}

}

我的列表包含每一种材质,我的网格渲染器也包含所需的材质。但除了材质渲染器中出现的第一种材质的实例外,没有任何其他事情发生。没有其他运动。

1 个答案:

答案 0 :(得分:0)

您可能需要设置lerpSpeed。

如果lerpSpeed = 0,则不会发生任何变化。

如果lerpSpeed&gt; 1,然后每帧一次,它将改变材料。

由于第一种材料是唯一显示并且不能快速遍历每种材料的材料,因此lerpSpeed可能为0.但是,您最终会遇到此功能的问题,因为它会在每一帧或非常快速地改变。问题在于lerp如何增加。

而不是:

lerp += lerpSpeed;

请改用:

lerp += lerpSpeed * Time.deltaTime;

这样做的目的不是每帧一次lerpSpeed增加lerp(这取决于计算机的性能),而是每秒通过lerpSpeed增加lerpSpeed,这将确保每台机器的效果一致。