多种材质之间的统一融合

本文关键字:融合 之间 | 更新日期: 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,这将确保每台机器的效果一致。