使用Unity中的脚本更改UI图像c#

我想以随机顺序更改UI图像 。 我在UI(canvas)中有一个包含Image组件的游戏对象 ,它最初有空图像 。 我附加了一个脚本(gameobject)来改变运行时的图像。

using UnityEngine; using System.Collections; using UnityEngine.UI; public class changeImg : MonoBehaviour { public Sprite sprite1; public Sprite sprite2; public Sprite sprite3; void Start() { ChangeImg(); } void ChangeImg() { int rand=Random.Range(0,3); if(rand==0) { gameObject.GetComponent ().sprite = sprite1; //gameObject.GetComponent ().sprite = sprite1; } else if(rand==1) { gameObject.GetComponent ().sprite = sprite2; // gameObject.GetComponent ().sprite = sprite2; } else if(rand==2) { gameObject.GetComponent ().sprite = sprite3; //gameObject.GetComponent ().sprite = sprite3; } } } 

我在检查器中分配了公共字段(sprite1,sprite2,sprite3)。 我尝试了这两个选项,就像我在代码中评论一样。 我没有得到错误,但图像没有得到我想要的改变。 在程序运行期间,GameObject(附加脚本)具有最初的空图像源。

使用overrideSprite字段而不是sprite – documentation

不幸的是,团结ui充满了这样的陷阱,它的api完全违反直觉,所以你必须小心并定期查看文档

如果你在Unity 2017.3中也可以使用Image(不确定这是否适用于旧版本)。 例如:

 using UnityEngine.UI; ----- public Image ObjectwithImage; public Sprite spriteToChangeItTo; void Start () { ObjectwithImage.sprite = spriteToChangeItTo; } 

对我很有用。

你检查了Gameobject的位置吗? 还有图像的颜色?

若要从Button更改Image ,请不要使用GetComponent ()因为您可能会获得不属于该按钮的另一个Image组件。 如果禁用该对象,它也可以返回null

请改用Button.image.spriteButton.image.overrideSprite变量。

 public Button pb; public Sprite newSprite; void Start() { pb.image.sprite = newSprite; } 

要么

 pb.image.overrideSprite = newSprite; 

使用哪一个并不重要。 这两个中的任何一个都应该有效