如何通过脚本更改画布图像

时间:2016-03-21 20:24:00

标签: c# user-interface canvas unity3d

我有一个脚本,它可以每秒固定时间更改对象的纹理(就像电视上的平面一样):

public Texture[] frames;                // array of textures
public float framesPerSecond = 2.0f;    // delay between frames

void Update()
{
    int index = (int)(Time.time * framesPerSecond) % frames.Length;
    GetComponent<Renderer>().material.mainTexture = frames[index];
}

使用这个脚本我可以改变平面,四边形等的纹理。但是我需要为画布图像更改它。我无法改变&#34; Image&#34;脚本。我应该访问价值&#34;源图像&#34;这个脚本?它会是正确的吗?

是这样,我如何访问Image组件?我不能这样写:

Image image = GetComponent<Image>();

enter image description here

1 个答案:

答案 0 :(得分:3)

如果您使用Image,则需要 Texture转换为Sprite,然后更改 image.sprite属性< / p>

方法1 图片

public Texture[] frames;                // array of textures
public float framesPerSecond = 2.0f;    // delay between frames
Image image = null;

void Start()
{
    //Get Image Reference
    image = gameObject.GetComponent<Image>();
}

void Update()
{
        int index = (int)(Time.time * framesPerSecond) % frames.Length;

        //Convert Texture to Sprite
        Sprite s = Sprite.Create((Texture2D)frames[index], new Rect(0, 0, frames[index].width, frames[index].height),
                                Vector2.zero, 0);
        image.sprite = s; //Change The Image
}

方法2 RawImage image.texture 如果您使用RawImage只需就需要更改image.texture属性。

public Texture[] frames;                // array of textures
public float framesPerSecond = 2.0f;    // delay between frames
RawImage image = null; 

void Start()
{
 //Get Raw Image Reference
 image = gameObject.GetComponent<RawImage>();
}

void Update()
{
  int index = (int)(Time.time * framesPerSecond) % frames.Length;
  image.texture = frames[index]; //Change The Image
}

我建议你选择方法2 。这意味着您必须删除场景中的当前图像。然后转到 GameObject - &gt; 用户界面 - &gt; 原始图片创建 a RawImage。在这种情况下,原始图像高效,因为您总是更改图像。使用方法1 更慢并在游戏/应用中释放垃圾收集器