動畫觸發 前面的教學探討燈光控制的功能,接著介紹使用 PlayMaker 製作開門與關門的互動效果,步驟上會比燈光控制稍微多一點。燈光控制只用了 GUI 按鈕來控制,而藉由觸發器達到動畫觸發的功能是遊戲中經常使用的互動設計。此範例是遊戲互動的重要觀念,製作的過程也請您思考實際的原理! 功能說明:使用 PlayMaker 來製作 Unity 場景中的開門觸發功能,當玩家走到門前的觸發區,門就會自動開啟,而當玩家離開觸發區時,門就會自動關閉。 首先使用 3D 軟體製作門與牆面的模型,並且製作閒置、開門、關門共 3 段動畫,完成後將製作的模型匯出 FBX 檔案。 00-10 影格 > 閒置 Idle 11-30 影格 > 開門 Open 31-50 影格 > 關門 Close 注意!使用 3ds Max 內建的 Door 工具來製作的門,透過 Open 參數來製作開門關門的動畫匯入 Unity 時將會無法存取,必須改用一般的關鍵影格來製作補間動畫。此外開門關門的動畫比較單純,匯出時只需要儲存為單一的 FBX 檔即可,不需要使用製作角色動作的方式進行個別儲存。 ▲ 使用 Open 參數製作的關鍵影格顯示黑色,匯入 Unity 遊戲引擎無法使用。 ▲ 使用移動工具製作的關鍵影格顯示紅色,匯入 Unity 遊戲引擎可以正常使用。 將 FBX 檔案匯入 Unity 編輯器,設定縮放比例,並且在整個模型加上網格碰撞器,讓遊戲角色可以站在地面並且避免發生穿牆的問題。請將第一人稱控制器移到場景的適當位置,按下播放按鈕測試遊戲角色是否可以正確的走動。 動畫需要設定,將 Animation Type(動畫類型)設為「Legacy」。 按下 Clamp Range 按鈕。
重新命名為「Idle」,將 End 結束影格設為「10」,然後按 Apply 按鈕套用。 接著製作開門動畫,按下 "+" 按鈕,同樣按下 Clamp Range 按鈕。
接著加入開門關門的觸發器,點選功能表 [ GameObject > Create Other > Cube ] 新增一個方塊,將物件名稱改為「DoorController」。此物件在遊戲畫面並不顯示,可刪除 Mesh Renderer 元件,並且將 Collider 碰撞器的 Is Trigger 選項勾選,將碰撞器的功能改為觸發器。將這個方塊觸發器移到門的位置,並且調整到適當的大小,當玩家走進觸發器的範圍時,門將會播放開啟的動畫。 開啟 Playmaker 編輯器,製作互動功能,選取 DoorController 物件並加上狀態機。 新增「DoorClose」與「DoorOpen」兩種狀態,分別代表門「關著」與「打開」的狀態。
從基本的觀念來看,燈光有「On」與「Off」的兩種狀態,門也是有「關著」與「打開」的兩種狀態,不過實際上開門關門是透過動畫播放的方式呈現,若是只有這兩種狀態,執行時會出現一些小問題,我們先用燈光開關的流程來做,看看會遇到什麼狀況,並且思考解決的方法。 注意 DoorClose 是初始狀態,因為遊戲開始時門是關著的,接著再切換到 Events 標籤,新增「Open」與「Close」事件。
接著製作玩家走近時自動開門的效果,選取 DoorOpen 狀態,加上 Trigger Event 觸發器事件。
預設的情況 Trigger = On Trigger Enter 代表物件進入觸發器範圍時傳送事件,設定 Send Event = Open 開門。
為 DoorClose 狀態新增「Open」過渡。
然後將 Open 過渡連結到 DoorOpen 狀態。
進入 Play 模式測試,確認玩家進入觸發器的範圍時可以過渡到 DoorOpen 狀態。
為 DoorOpen 狀態增加 Play Animation 用於播放開門動畫,但是會出現錯誤訊息,因為 DoorController 物件本身並沒有 Animation 元件。
設定 Game Object = Specify Game Object(指定遊戲物件),然後將場景的 Door 物件拖曳到 Game Object 下方的欄位。
選擇 Door 播放 Open 動畫,此時錯誤的提示應該全部解決。
為 DoorOpen 狀態增加 Trigger Event 觸發器事件,然後設定 Trigger = On Trigger Exit(常物件離開觸發器範圍)。
增加 Close 過渡並連結到 DoorClose 狀態。
在 DoorClose 狀態增加 Play Animation 動作,當然也會出現沒有 Animation 元件的錯誤,請參考前面的步驟以解決問題。
目前遊戲的執行雖然沒有出現錯誤的提示,但是您可能注意到…遊戲開始時將會播放一次關門動畫,這不是很奇怪嗎? 因為門的預設狀態是 Close 關著的,可是我們在 Close 狀態加上 Play Animation 並播放開門的動畫,所以會播放關門的動畫。
解決問題的方法是讓門在初始狀態不要自動播放動畫,稍後將會新增「Opening」與「Closing」兩個狀態,實際上這些狀態只用於播放動畫,並且在播放完畢後自動過渡到下一個狀態。 新增 Opening 狀態,將原本在 DoorOpen 狀態的 Play Animation 複製過來。
將原本在 DoorOpen 狀態的 Play Animation 刪除。
在 Opening 狀態新增 FINISHED 過渡,並連接到 DoorOpen 狀態,進入 Play 模式測試以確認正常運作。完成後再新增 Closing 狀態。
玩家進入觸發器範圍時,會先從 DoorClose 狀態過渡到 Opening 狀態,動畫播放完成後再過渡到 DoorOpen 狀態。
因為 Playmaker 沒有剪下動作的功能,請將「Open」與「Close」狀態的 Play Animation 動作分別複製並貼上「Opening」與「Close」狀態,再將原本狀態上的動作刪除。 最後按下 Unity 的播放按鈕再次進行遊戲的測試,若是沒有問題的話,開門與關門已經可以正常動作了!
~ CG 數位學習網版權所有 ~ |