首页 > 解决方案 > 在统一c#中逐渐改变颜色

问题描述

好吧,我有一个小型格斗游戏,我想让饱和度慢慢降低,因为我更多地击打假人以显示他们的健康。

我能想到的描述它的唯一方法就像在颜色上使用 -=。

这就是我所拥有的一切,除了更改一次之外它不起作用。

 private void OnCollisionEnter2D(Collision2D collision)
{
    if (collision.collider.tag == "hurtbox")
      {
        Debug.Log("hit");
        collision.gameObject.GetComponent<SpriteRenderer>().color = new Color(100f, 5f, 5f);
      }
}

标签: unity3dcolors

解决方案


最简单的方法是使用Gradient。然后在受到伤害时,使用你的 maxhealth 和 currenthealth 计算梯度中的时间点(假设你有这些)。

然后,您可以在检查器中设置渐变值。

例子;

public Gradient Gradient;

public float MaxHealth = 100f;
public SpriteRenderer SpriteRenderer;
private float currentHealth { get; set; }


private void Start()
{
    currentHealth = MaxHealth;
}

public void TakeDamage(float amount)
{
    currentHealth -= amount; 
    float timePoint = currentHealth / MaxHealth;
    Color color = Gradient.Evaluate(timePoint);
    SpriteRenderer.color = color;
}

推荐阅读