多种材质之间的统一融合
本文关键字:融合 之间 | 更新日期: 2023-09-27 18:15:35
我需要通过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;
}
}
我的列表包含每一个材料,我的网格渲染器也包含所需的材料。但是除了在材质渲染器中出现第一个材质的实例之外,什么都没有发生。没有其他动作。
您可能需要设置您的lerpSpeed。
如果lerpSpeed = 0,则不会发生任何更改。
如果lerpSpeed> 1,那么每帧一次,它将改变材质。
由于第一个材料是唯一显示的并且没有快速循环遍历每个材料,所以lerpSpeed可能为0。然而,你最终会遇到这个函数的问题,因为它每帧都会改变,或者非常快。问题在于如何增加lerp。
代替:
lerp += lerpSpeed;
用这个代替:
lerp += lerpSpeed * Time.deltaTime;
这样做的目的不是每帧增加一次lerpSpeed(这取决于计算机的性能),而是每秒增加一次lerpSpeed,这将确保每台机器的效果一致。