MRが楽しい

MRやVRについて学習したことを書き残す

HoloLens2でホロモンアプリを作る その12(Sub-StateMachineを使ってアニメーションのステートを一纏めにする)

本日はアプリ作成枠です。
HoloLens2でホロモンアプリを作る進捗を書き留めていきます。
f:id:bluebirdofoz:20210228223431j:plain

今回はSub-StateMachineを使ってアニメーションのステートを一纏めにするメモです。

Sub-StateMachine

Sub-StateMachine はアニメーションの複数の State を1つの State として管理する機能です。
この機能を活用することで AnimationController の構造をシンプルに保つことができます。
docs.unity3d.com

Sub-StateMachineを作成する

[Animator]画面で右クリックから[Create Sub-State Machine]を実行して、新規 Sub-State を作成します。
f:id:bluebirdofoz:20210228223453j:plain

Sub-State を作成すると[Animator]画面に追加されます。
ステートを選択すると[Inspector]ビューから命名などの基本設定を行うことができます。
f:id:bluebirdofoz:20210228223505j:plain

Sub-State の内容を編集する場合は、ステートをダブルクリックして Sub-State の編集画面を開きます。
デフォルトで以下の4つのステートが設定されています。
・Entry:Sub-State自体の入口ポイント
・Exit:Sub-State自体の出口ポイント
・AniyState:全ての状態からの入口ポイント
・(Up)BaseLayer:上位レイヤーとの直接の接続ポイント
f:id:bluebirdofoz:20210228223518j:plain

ステートを作成する

Sub-State の中では通常の編集画面と同様にステートの作成・編集が行えます。
試しに Sub-State の Entry と Exit に接続したステートを作成してみます。

右クリックから[Create State -> Enpty]を実行して、新規ステートを作成します。
f:id:bluebirdofoz:20210228223530j:plain

新規ステートが作成されるので[Inspector]ビューからアニメーションの設定など普通のステートと同様の設定を行います。
Sub-State 内で新規作成したステートは自動的に Entry にトランジションが張られます。
f:id:bluebirdofoz:20210228223543j:plain

Exit ポイントにもトランジションを張ってみます。
ステートを右クリックして[Make Transition]を選択します。
f:id:bluebirdofoz:20210228223555j:plain

そのまま Exit ポイントをクリックしてにトランジションを張ります。
これで Sub-State 内で Entry と Exit ポイントにトランジションを張ったステートが準備できました。
f:id:bluebirdofoz:20210228223605j:plain

次に上位レイヤーに戻り、Sub-State 自体のトランジションを設定します。
接続したいステートを右クリックして[Make Transition]を選択します。
f:id:bluebirdofoz:20210228223617j:plain

そのまま Sub-State をクリックします。
このとき、Sub-State 内の各ステートに個別にトランジションを張るか、Sub-State 自体にトランジションを張るか選択できます。
今回は Sub-State 自体にトランジションを張りたいので[StateMachine -> (Sub-State名)]を選択します。
f:id:bluebirdofoz:20210228223626j:plain

Sub-State 側からもトランジションを張ります。
上位レイヤーで Sub-State 自体からトランジションを張る場合は通常レイヤーと同様に右クリックして[Make Transition]を選択するだけです。
f:id:bluebirdofoz:20210228223636j:plain

接続先のステートを選択してトランジションを張ります。
これで Sub-State 自体への入口と出口を設定することができました。
f:id:bluebirdofoz:20210228223648j:plain

最後にトランジションの遷移条件を設定します。
入口の条件は上位レイヤーで設定します。特定の bool 値が true の場合、Sub-State に遷移するよう設定しました。
f:id:bluebirdofoz:20210228223700j:plain

出口の条件は Sub-State 内で設定します。
これで遷移条件の設定は完了です。特定の bool 値が false の場合、Sub-State から抜けるよう設定しました。
f:id:bluebirdofoz:20210228223710j:plain

最後にシーンを再生して AnimationController の遷移を確認します。
bool 値の変更に合わせて Sub-State 内のステートが再生されれば成功です。
f:id:bluebirdofoz:20210228223722j:plain