在制作游戲時,導入的箱子模型本身自帶動畫。然而,它的動畫是一個從打開到關閉的完整過程,并且沒有給出控制打開關閉的方法。
最直接的想法是對該動畫進行拆分,再封裝成不同的動畫狀態,但是不巧的是,這個動畫被設置了不可修改。因此我們只能退而求其次,采取添加動畫幀事件的方式對動畫進行控制。
動畫幀事件,顧名思義,是動畫運行到某一幀就會執行的事件。即在動畫的某一幀上添加一個函數,利用多個這類函數,就能間接地達到控制動畫的目的。
1.實現前的功能分析
再來回顧一下我們的需求。首先我們擁有的是一個箱子從打開到關閉的完整動畫,而在我們游戲中想要做到的是:
按下開始按鈕之前,箱子保持關閉狀態。
按下開始按鈕之后,箱子開始打開,在完全打開之后箱子動畫暫停,執行流水線的流程。
流水線流程結束之后,箱子關閉,在完全關閉之后,給出流水線執行的結果。
因此,我們要加的動畫幀事件其實只有兩個。第一個是在箱子完全打開的關鍵幀處,第二個在箱子完全關閉的關鍵幀處。
2.關鍵幀事件的添加
如下圖所示,這是箱子動畫內容,用紅圈圈出的就是我們添加的關鍵幀事件。
如何添加這些關鍵幀事件呢?
如下圖所示,點開箱子模型,在它的inspector中選擇Animation。
下拉inspector界面,就能看到下圖內容,其中用紅圈圈出的Events就是我們添加事件的地方。
點擊Events下方的按鈕,即可創建一個新的事件,通過左右拖動這個事件讓其到達指定的幀數,下方的Function欄是指定該事件對應函數的函數名。
3.關鍵幀事件具體實現函數的添加
完成上述操作之后,僅僅只是加入關鍵幀事件,但事件對應的具體實現函數還沒有添加,因此它還不能實現我們需要的功能。
這些具體實現函數所在的腳本一定得加在播放函數的物體上,并且腳本中需要有與我們剛剛添加的關鍵幀事件Function欄中名字相同的函數。
在我們的實現中,我創建了一個名為AnimationControl的腳本來實現對應函數。
4.具體實現函數的編寫
最后一步是編寫對應函數。
兩個函數都非常簡單,每一個函數主要是實現兩個功能:
-1.暫停動畫。
-2.調用流水線控制腳本中的函數實現流水線的運轉。
下圖為函數內容
至此,我們就完成了對動畫的控制。