为什么Unity精灵颜色不随我的更新功能而改变?

时间:2018-05-01 03:53:47

标签: c# unity3d unityscript

在我正在创建的当前游戏中,我试图拥有一个动态变化的健康栏颜色,对应于当前敌人的健康状况。当生命值处于最大值时,条形图将为绿色(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);
}

1 个答案:

答案 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参数。