2016-03-21 73 views
0

我有一個腳本,其改變對象的紋理(如電視的平面上)改變畫布圖像倍:每秒如何通過固定腳本

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]; 
} 

有了這個腳本我可以改變平面的紋理,四邊形等,但我需要改變它的畫布圖像。我無法更改「圖像」腳本。我應該訪問此腳本的「源圖像」值嗎?它是正確的嗎?

就是這樣,我怎樣才能訪問Image組件?我不能這樣寫:

Image image = GetComponent<Image>();

enter image description here

+1

我不能測試以下這就是爲什麼我不把它作爲答案。你需要添加'使用Unityengine.UI',你可以使用'GetComponent ().setImage = someImage;' – Rana

+0

@Rana的行的東西我不知道你從哪裏得到setImage ... – Programmer

+0

它是我的頭XD。我說這是「沿着線」......我檢查了你有一個名爲'sprite'的屬性。所以你可以做'GetComponent ().sprite = someSprite;'我可能是錯的...... – Rana

回答

3

如果使用Image,則需要轉換TextureSprite然後變化image.sprite財產

方法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 
} 

方法2RawImageimage.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去。這意味着你必須刪除你場景中的當前圖像。然後去遊戲對象 - >UI - >原始圖像創建一個RawImage。原始圖像是高效在這種情況下,因爲你總是更改的形象。使用方法1較慢並將釋放垃圾回收器在您的遊戲/應用程序