在遊戲中,有些動畫是由操作者控制,例如爬樓梯 — 當角色在某個位置,按向上鍵就會啟動爬樓梯動畫。若我們要設計類似的遊戲,如何在 RealityKit 控制動畫呢?
還記得在啟動動畫時,會呼叫個體的 playAnimation(),這個函式其實會傳回一個「動畫控制器」(AnimationPlaybackController)物件,可用來控制動畫:
// 6-10c
衛星模型.playAnimation(動畫.repeat())
// 改成:
let 動畫控制器 = 衛星模型.playAnimation(動畫.repeat(), startsPaused: true)
末行 playAnimation() 加一個額外參數 startsPaused: true 可讓動畫一開始先進入暫停狀態,等候操作。
動畫控制器只有三個操作,分別控制動畫的暫停、繼續、停止:
使用時,要注意動畫控制器的生命週期,只有在動畫結束前有效 — 若未設定重複(repeat),當動畫完成(complete)或停止(stop)之後,這個控制器就會跟著失效。
另外,在語法上,還要注意變數的有效範圍。
在第6課6-6c提過,完整的 RealityView 包含三個 { } 匿名函式,名稱分別是 make:, update: 與 placeholder:,其中第一個匿名函式(make:)會在背景以非同步模式執行,只會執行一次;第二個匿名函式(update:)則是每當狀態變數(@State var)有所變化時執行。
以6-10c衛星繞地球為例,我們希望在衛星繞地球公轉時,用輕觸螢幕(onTapGesture)來暫停公轉,怎麼做呢?