【问题标题】:Unity Lerping between multiple matierals多种材质之间的Unity Lerping
【发布时间】:2014-07-30 17:11:43
【问题描述】:

我需要通过附加到我的一个游戏对象的 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 设置为多少?
  • @b1nary.atr0phy 感谢您在 OP 接受以下来自 dewB 的答案后一年多的参与,该答案使用了我所得到的确切答案。您错误地认为 OP 在询问如何处理纹理。也许你发现这个线程正在寻找如何处理纹理,但这不是他所要求的。我没有理由相信他没有按预期使用材料 lerp。再一次,由于接受了 lerp 速度答案,因此可以假设 OP 能够在更改后使一切按预期工作。

标签: c# unity3d


【解决方案1】:

您可能需要设置 lerpSpeed。

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

如果lerpSpeed > 1,那么每帧一次,它会改变材质。

由于第一个材质是唯一出现的东西,并且不会快速循环遍历所有材质,因此 lerpSpeed 可能为 0。但是,您最终会遇到此函数的问题,因为它会在每一帧或非常快速地更改。问题在于如何增加 lerp。

代替:

lerp += lerpSpeed;

改用这个:

lerp += lerpSpeed * Time.deltaTime;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 2023-03-24
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    相关资源
    最近更新 更多