unity3d - 在统一c#中逐渐改变颜色
问题描述
好吧,我有一个小型格斗游戏,我想让饱和度慢慢降低,因为我更多地击打假人以显示他们的健康。
我能想到的描述它的唯一方法就像在颜色上使用 -=。
这就是我所拥有的一切,除了更改一次之外它不起作用。
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;
}
推荐阅读
- javascript - 第二个 Ajax 调用返回 500 内部服务器错误
- matplotlib - 没有 x 轴的散点图
- python - 如何从大量文章(维基百科)中训练短语模型?
- laravel - Laravel not add foreign key in PostgreSQL
- python - How to shoot bullets at the same time as another player and easier method on creating boundaries between rectangles and players?
- c - 我无法用 c 语言读取另一个结构
- python - convert list of element to int and not the string in python
- javascript - 在调用 JSON.stringify() 之前,Vue 数据不可用
- python-3.x - python selenium "Timed out receiving message from renderer" when getting screenshot
- laravel - Laravel get a empty variable from axios.post from vuie.js module