逐渐在统一c#中更改颜色

问题描述 投票:0回答:2

好吧,我有一个小型格斗游戏,我想让饱和度逐渐降低,因为我更多地打了假人以显示其健康状况。

我可以想到的唯一描述方式就像在颜色上使用-=。

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

 private void OnCollisionEnter2D(Collision2D collision)
{
    if (collision.collider.tag == "hurtbox")
      {
        Debug.Log("hit");
        collision.gameObject.GetComponent<SpriteRenderer>().color = new Color(100f, 5f, 5f);
      }
}
unity3d colors
2个回答
1
投票

最简单的方法是使用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;
}

0
投票

您是否尝试过使用Color.Lerp?

尝试使用类似于以下的代码替换您的代码:

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

otherSpriteRenderer是指绑定到与您碰撞的对象的精灵渲染

这里是统一文档:https://docs.unity3d.com/ScriptReference/Color.Lerp.html?_ga=2.138410096.1930692520.1591664984-2127613969.1584173609

© www.soinside.com 2019 - 2024. All rights reserved.