在我正在创建的当前游戏中,我试图拥有一个动态变化的健康栏颜色,对应于当前敌人的健康状况。当生命值处于最大值时,条形图将为绿色(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);
}
答案 0 :(得分:1)
您的代码无法按照您的意愿运行,因为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参数。