我有一个脚本,它可以每秒固定时间更改对象的纹理(就像电视上的平面一样):
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>();
答案 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 更慢并在游戏/应用中释放垃圾收集器。