gpt4 book ai didi

c# - 统一创建脉冲颜色

转载 作者:太空宇宙 更新时间:2023-11-03 20:00:07 25 4
gpt4 key购买 nike

我正在制作一个游戏对象以在 UNITY 3d 中“脉冲”其颜色。

我希望颜色在两种颜色之间不断变换,

以下是我的代码,它不起作用(我在更新功能中这样做):

      renderer.material.color = Color.Lerp(renderer.material.color, TargetColor,fadeSpeed*Time.deltaTime);

if(renderer.material.color == TargetColor)
{

if(renderer.material.color == Color.gray)
{
TargetColor = Color.white;
}
else if (renderer.material.color == Color.white)
{
TargetColor = Color.gray;
}

}

我是新手。我做错了什么?

最佳答案

如果您为 fadeSpeed 选择一个合适的值,例如 10,您的代码就可以正常工作。(并且不要忘记像 void Start() {TargetColor = Color.gray;} 一样初始化 TargetColor)

您以错误的方式使用了 Lerp。这导致颜色在远景中达到其目标值。将此调试日志添加到 Update 中的某个位置,您可以看到问题:

Debug.Log("Current color: " + renderer.material.color);

如果我需要自己编写代码,我会这样做:

public class ColorBlinker : MonoBehaviour
{
public float FadeDuration = 1f;
public Color Color1 = Color.gray;
public Color Color2 = Color.white;

private Color startColor;
private Color endColor;
private float lastColorChangeTime;

private Material material;

void Start()
{
material = GetComponent<Renderer>().material;
startColor = Color1;
endColor = Color2;
}

void Update()
{
var ratio = (Time.time - lastColorChangeTime) / FadeDuration;
ratio = Mathf.Clamp01(ratio);
material.color = Color.Lerp(startColor, endColor, ratio);
//material.color = Color.Lerp(startColor, endColor, Mathf.Sqrt(ratio)); // A cool effect
//material.color = Color.Lerp(startColor, endColor, ratio * ratio); // Another cool effect

if (ratio == 1f)
{
lastColorChangeTime = Time.time;

// Switch colors
var temp = startColor;
startColor = endColor;
endColor = temp;
}
}
}

此外,请查看补间库。他们非常乐于助人。

http://dotween.demigiant.com/

http://itween.pixelplacement.com/

http://u3d.as/content/dented-pixel/lean-tween/31i

关于c# - 统一创建脉冲颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29406845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com