我需要通过附加到我的一个游戏对象的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;
}
}
我的列表包含每一种材质,我的网格渲染器也包含所需的材质。但除了材质渲染器中出现的第一种材质的实例外,没有任何其他事情发生。没有其他运动。
答案 0 :(得分:0)
您可能需要设置lerpSpeed。
如果lerpSpeed = 0,则不会发生任何变化。
如果lerpSpeed&gt; 1,然后每帧一次,它将改变材料。
由于第一种材料是唯一显示并且不能快速遍历每种材料的材料,因此lerpSpeed可能为0.但是,您最终会遇到此功能的问题,因为它会在每一帧或非常快速地改变。问题在于lerp如何增加。
而不是:
lerp += lerpSpeed;
请改用:
lerp += lerpSpeed * Time.deltaTime;
这样做的目的不是每帧一次lerpSpeed增加lerp(这取决于计算机的性能),而是每秒通过lerpSpeed增加lerpSpeed,这将确保每台机器的效果一致。