c# - 为什么 Unity 精灵颜色不会随着我的更新功能而改变?
问题描述
在我正在创建的当前游戏中,我试图让生命值条颜色与敌人的当前生命值相对应地动态变化。当生命值达到最大值时,条形图将变为绿色 (0, 255, 0),当生命值处于低值时,条形图将接近红色 (255, 0, 0)。我将函数编码为根据敌人当前的健康状况从绿色变为红色。当敌人处于半血状态时,颜色应该是 (125, 125, 0),但是每当我开始游戏时,敌人就会以全血(绿色)开始,一旦血量不再处于最大值,条形图也是相同的黄色直到敌人死去。我的代码的哪一部分使 Unity 不能同时出现颜色?
public void Start()
{
health = maxHealth;
healthBar.fillAmount = 1;
}
public void Update()
{
canvas.transform.LookAt(tranformTarget);
healthBar.fillAmount = health / maxHealth;
greenColor = (int)(255 * healthBar.fillAmount);
redColor = (int)(-255 * healthBar.fillAmount + 255);
Color healthBarColor = new Color(redColor, greenColor, 0, 255);
healthBar.color = healthBarColor;
Debug.Log(greenColor);
Debug.Log(redColor);
}
解决方案
您的代码不会像您希望的那样工作,因为 Unity 的颜色适用于法线。 https://docs.unity3d.com/ScriptReference/Color-ctor.html
因此,您将需要一个介于 0-1 之间的浮点数。
尝试这个。
canvas.transform.LookAt(tranformTarget);
healthBar.fillAmount = health / maxHealth;
var green = healthBar.fillAmount;
var red = -1 * healthBar.fillAmount + 1;
Color healthBarColor = new Color(red, green, 0f, 1f);
healthBar.color = healthBarColor;
请注意,如果您只是希望 alpha 为 1,也可以省略 alpha 参数。
推荐阅读
- python - VScode 扩展:CODE RUNNER 和 PYTHON PREVIEWER 不使用我选择的解释器
- swift - 到 Mono 的 Swift 应用程序可选链接
- swift - 这个 SwiftUI 绑定 + 状态示例如何在不重新调用 body 的情况下工作?
- sql - 在 Microsoft SQL Server 中更新表时运行脚本
- r - 如何确定二维空间数据中点的方向并以顺时针方式排列[对于极端情况]?
- ios - SwiftUI TabView 没有响应
- azure - 计算机视觉 2.0 PDF 到文本不起作用
- python - Python Keylogger:.txt 文件不会保存我的击键
- rust - Bevy 如何根据参数的类型“范围”其系统?
- python - 运行 DAG 时气流调度程序崩溃