使用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.sprite
或Button.image.overrideSprite
变量。
public Button pb; public Sprite newSprite; void Start() { pb.image.sprite = newSprite; }
要么
pb.image.overrideSprite = newSprite;
使用哪一个并不重要。 这两个中的任何一个都应该有效