Unity新UI图像更改颜色不起作用

时间:2015-03-05 04:02:45

标签: c# unity3d unity3d-2dtools

我尝试使用统一的新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

4 个答案:

答案 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);