天天看點

《Unity開發實戰》——3.10節通過循環加載一組材質實作動畫紋理(例如模拟視訊)

本節書摘來自華章社群《unity開發實戰》一書中的第3章,第3.10節通過循環加載一組材質實作動畫紋理(例如模拟視訊),作者 (愛爾蘭)matt smith (巴西)chico queiroz,更多章節内容可以通路雲栖社群“華章社群”公衆号檢視

3.10 通過循環加載一組材質實作動畫紋理(例如模拟視訊)

還可以讓對象的材質有動畫效果,比如一個模拟的飛船控制間的計算機螢幕,或者繪制一個可點選的物體作為按鈕引起玩家的注意。unity專業版提供一個把視訊作為紋理的解決方案(免費版沒有這個功能),也可以用代碼實時修改對象的紋理。

3.10.1 準備工作

需要一組圖檔作為播放序列,最好命名也是有序的,比如computerscreen1.png、computerscreen2.png等。

3.10.2 操作步驟

請按照以下步驟實作動畫紋理:

1)建立一個新的場景。

2)建立一個 plane,在坐标點 (0,0,0),把旋轉設定成 (-90,0,0),這樣剛好直接面對錄影機。

3)建立一個腳本檔案夾,命名為scriptclasses,建立一個c#腳本類命名為animated-texture (把下面的代碼粘貼到類中):

《Unity開發實戰》——3.10節通過循環加載一組材質實作動畫紋理(例如模拟視訊)
《Unity開發實戰》——3.10節通過循環加載一組材質實作動畫紋理(例如模拟視訊)

3.10.3 實作原理

imagearray 數組存儲了圖檔序列, awake()方法檢查數組中是否有内容,并調用playanimation()方法。

playanimation()方法中有一個無限循環,循環中調用顯示下一張圖檔的方法,然後讓playanimation()方法等幾秒(frameinterval變量)作為時間間隔。

changeimage()方法尋找序列中的下一張圖檔,讓其父遊戲對象的材質用這張圖檔。imageindex 變量執行個體一直存儲着數組中目前播放圖檔的索引。如果上一張圖檔已經顯示過了,給索引值加1,然後做一個取模的運算,結果是數組的下一個最大索引,或是0。函數内的nextimage變量存儲數組中下一張要顯示的圖檔,方法的最後一行代碼把父對象的材質的主紋理設定成圖檔。

3.10.4 更多内容

也可以用一個類似的技術實時修改材質。

使用材質取代2d紋理圖檔

如果想用材質取代紋理圖檔,可以像下面的代碼用一個名為materialarray的材質數組,修改父對象的renderer的sharedmaterial,見代碼中的最後一行:

《Unity開發實戰》——3.10節通過循環加載一組材質實作動畫紋理(例如模拟視訊)

繼續閱讀