我尝试使用统一的新UI图像系统来实现我的播放器的健康状况。但是它无法正常工作。任何人都可以帮助我。谢谢。
using UnityEngine.UI;
if (health_value == 3) {
GameObject.Find("health").GetComponent<Image>().color.a = 1;
GameObject.Find("health1").GetComponent<Image>().color.a = 1;
GameObject.Find("health2").GetComponent<Image>().color.a = 1;
}
我收到此错误。
error CS1612: Cannot modify a value type return value of `UnityEngine.UI.Graphic.color'. Consider storing the value in a temporary variable
答案 0 :(得分:7)
因为Color是图像的结构(我认为这是正确的术语?如果我错了,请纠正我),你不能直接编辑它的颜色,你必须创建新的Color var,更改其变量,然后将其分配给Image。
Image healthImage = GameObject.Find("health").GetComponent<Image>();
Color newColor = healthImage.color;
newColor.a = 1;
healthImage.color = newColor;
答案 1 :(得分:2)
我遇到了同样的问题,但是原因不同。因此,如果所接受的答案不是他们的问题,那么这可能对其他人有帮助。
请注意, Unity期望脚本中的颜色值在0-1范围内。
因此,如果您要应用红色,请确保使用方式像
gameObject.GetComponent<Image>().color = new Color(1f, 0f, 0f);
代替
gameObject.GetComponent<Image>().color = new Color(255, 0, 0); // this won't change the image color
答案 2 :(得分:1)
if (health_value == 3)
{
GameObject playerHealthImage = GameObject.Find("health").GetComponent<Image>();
Color healthColor = playerHealthImage.color;
healthColor.a=1;
//Or red,Green,Blue,Alpha
healthColor = new Color(1,1,1,1);
playerHealthImage.color = healthColor;
}
您不能独立修改颜色的 RGBA 值,因为它是一个结构。但是您可以根据上述内容直接分配 Color
。
答案 3 :(得分:0)
GameObject imageGameObject;
// 1.0 - 0.0
float r;
float g;
float b;
float a;
imageGameObject.GetComponent<Image>().color = new Color(r, g, b, a);
// 255-0
int r32;
int g32;
int b32;
int a32;
imageGameObject.GetComponent<Image>().color = new Color32(r32, g32, b32, a32);