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

ero*_*ero 5 c# unity-game-engine

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

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<Image> ().sprite = sprite1;
        //gameObject.GetComponent<UnityEngine.UI.Image> ().sprite = sprite1;
         }
       else if(rand==1)
        {
         gameObject.GetComponent<Image> ().sprite = sprite2;
       // gameObject.GetComponent<UnityEngine.UI.Image> ().sprite = sprite2;
         }
       else if(rand==2)
        {
         gameObject.GetComponent<Image> ().sprite = sprite3;
       //gameObject.GetComponent<UnityEngine.UI.Image> ().sprite = sprite3;
         }
   }
}
Run Code Online (Sandbox Code Playgroud)

我已在检查器中分配了公共字段(sprite1,sprite2,sprite3)。我尝试了这两个选项,正如我在代码中评论的那样。我没有收到错误,但图像也没有按照我想要的方式更改。在程序运行期间,游戏对象(脚本所附加的)与最初一样具有空图像源。

Dun*_*nno 5

使用overrideSprite字段代替sprite-文档

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

  • 他的代码按原样工作。我认为他的问题出在另一个地方。 (2认同)

小智 5

如果您使用的是 Unity 2017.3,您也可以只使用 Image(不确定这是否适用于旧版本)。例如:

using UnityEngine.UI;
-----
public Image ObjectwithImage;
public Sprite spriteToChangeItTo;

void Start () {
        ObjectwithImage.sprite = spriteToChangeItTo;
    }
Run Code Online (Sandbox Code Playgroud)

对我来说效果很好。