好吧,我有一个小型格斗游戏,我想让饱和度逐渐降低,因为我更多地打了假人以显示其健康状况。
我可以想到的唯一描述方式就像在颜色上使用-=。
这里是我所拥有的,除了更改一次之外,它不起作用。
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.collider.tag == "hurtbox")
{
Debug.Log("hit");
collision.gameObject.GetComponent<SpriteRenderer>().color = new Color(100f, 5f, 5f);
}
}
最简单的方法是使用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;
}
您是否尝试过使用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是指绑定到与您碰撞的对象的精灵渲染