< Return to Video

Animator Sub-state machine hierarchies - Unity Official Tutorials

  • 0:00 - 0:02
    アニメーターコントローラー内で複雑な
  • 0:02 - 0:05
    ステートを含むロジックシステムを作成するとき
  • 0:05 - 0:07
    ステートマシンを階層化すると
  • 0:07 - 0:09
    とてもきれいに整理できます
  • 0:09 - 0:11
    ステートマシンを作成するには Animator ウィンドウで
  • 0:11 - 0:13
    何もない箇所を右クリックして
  • 0:13 - 0:16
    Create Sub-State Machine(サブステートマシンを作成)をクリックします
  • 0:21 - 0:23
    これで現在のレイヤーまたはステートマシンレベルに
  • 0:23 - 0:25
    新しいステートマシンが作成されます
  • 0:26 - 0:28
    標準の四角っぽい形とは異なり
  • 0:28 - 0:31
    サブステートマシンは六角形っぽい形を
  • 0:31 - 0:33
    していますね
  • 0:33 - 0:35
    それでは 便利な使い方を見ていきましょう
  • 0:36 - 0:38
    ここにちょっと ごちゃごちゃしてきた
  • 0:38 - 0:40
    アニメーターコントローラーがあります
  • 0:40 - 0:42
    ここにさらにステートを追加していく前に
  • 0:42 - 0:44
    整理しておきたいところです
  • 0:44 - 0:46
    それには一部のステートを
  • 0:46 - 0:48
    ステートマシンに入れてしまう方法があります
  • 0:48 - 0:50
    この例だとAirborne(空中)にいる時の
  • 0:50 - 0:52
    ステートのグループはすべて
  • 0:52 - 0:54
    サブステートマシンにまとめられそうです
  • 0:54 - 0:56
    さっそくステートマシンを作るため
  • 0:56 - 0:58
    Animator ウィンドウを右クリックして
  • 0:58 - 1:02
    Create Sub-State Machine を選択します
  • 1:05 - 1:07
    ステートマシンの名前はインスペクターで
  • 1:07 - 1:09
    クリックすればいつでも変更できます
  • 1:09 - 1:10
    ステートと同じですね
  • 1:11 - 1:14
    次に作ったステートマシンにステートを追加していきますが
  • 1:15 - 1:16
    これは追加するステートを選択して
  • 1:16 - 1:18
    ステートマシンにドラッグするだけで
  • 1:18 - 1:20
    OK です
  • 1:20 - 1:23
    この例でステートマシンに含めたいのは Leap Takeoff
  • 1:23 - 1:26
    Leap Airborne・Falling・Landing ステートです
  • 1:27 - 1:29
    ドラッグ中には追加できる場合に + アイコンが
  • 1:29 - 1:31
    表示されるので注意してください
  • 1:35 - 1:38
    こうしてステートをステートマシンに追加すると
  • 1:38 - 1:41
    現在のステートマシン / レイヤーからは消えてしまいます
  • 1:41 - 1:43
    もう一度これらステートを表示したり
  • 1:43 - 1:45
    プロパティを編集したりするには
  • 1:45 - 1:48
    サブステートマシンをダブルクリックします
  • 1:51 - 1:53
    格納レイヤーやステートマシンに
  • 1:53 - 1:56
    戻る場合は「Up」ノードをダブルクリックします
  • 1:56 - 1:58
    現在どの階層にいるのかはウィンドウの上部に
  • 1:58 - 2:00
    パンくず式で表示されるので
  • 2:00 - 2:02
    そこで確認してください
  • 2:09 - 2:12
    さてステートマシンは階層構造で使うことができます
  • 2:12 - 2:14
    これはつまりアニメーターコントローラーの各レイヤーには
  • 2:14 - 2:17
    複数のステートマシンが存在しうるということです
  • 2:18 - 2:20
    そしてそのステートマシーンにもさらに
  • 2:20 - 2:22
    サブステートマシンを持たせることなどができます
  • 2:26 - 2:28
    そして遷移(Transition)はステートマシンの
  • 2:28 - 2:30
    外部から内部へと移動できます
  • 2:30 - 2:32
    この例でもサブステートマシンに格納した
  • 2:32 - 2:35
    ステートへの遷移がそのまま維持されている
  • 2:35 - 2:39
    のが見えますね
  • 2:44 - 2:46
    ステートマシンに新しい遷移を追加するには
  • 2:46 - 2:48
    遷移元とするステートまたはステートマシンを
  • 2:48 - 2:50
    右クリックし 続けて
  • 2:50 - 2:52
    Make Transition(遷移を作成)を選択します
  • 2:52 - 2:54
    続けて遷移先のステートマシンを
  • 2:54 - 2:56
    左クリックします
  • 2:57 - 2:59
    するとポップアップメニューが表示され
  • 2:59 - 3:02
    ステートマシン内のどのステートに遷移させるか
  • 3:02 - 3:05
    あるいはステートマシン自体に遷移させるかを
  • 3:05 - 3:07
    指定するよう求められます
  • 3:10 - 3:12
    ステートマシンから出る遷移を作る方法としては
  • 3:12 - 3:14
    「Up」ノードを使う方法があります
  • 3:14 - 3:16
    これは現在のステートマシンに含まれない
  • 3:16 - 3:18
    全ステート/ステートマシンへの
  • 3:18 - 3:20
    リンクのように機能します
  • 3:20 - 3:22
    Up ノードにはまず「Up」ラベルが
  • 3:22 - 3:24
    続いて親ステートマシンの名前が表示されています
  • 3:25 - 3:27
    親ステートマシンが存在しない場合は
  • 3:27 - 3:29
    帰属するレイヤーの名前が表示されます
  • 3:30 - 3:32
    この例では親ステートマシンがないので
  • 3:32 - 3:34
    Up ノードのラベルは次のようになっています
  • 3:34 - 3:36
    (Up) Base Layer
  • 3:36 - 3:38
    ステートマシンから出る遷移を作るには
  • 3:38 - 3:40
    遷移元とするステート / ステートマシンを
  • 3:40 - 3:42
    右クリックしてから
  • 3:42 - 3:45
    Make Transition(遷移を作成)を選択し
  • 3:45 - 3:47
    続けて Up ノードを左クリックします
  • 3:48 - 3:50
    するとステートマシンに遷移する時と似た
  • 3:50 - 3:53
    オプションが表示されます
  • 3:53 - 3:55
    ただしこの場合選択肢としては
  • 3:55 - 3:56
    現在よりも上の階層のステートマシンや
  • 3:56 - 3:58
    ステートが表示されます
  • 4:00 - 4:02
    レイヤー / ステートマシンには必ず
  • 4:02 - 4:05
    緑色の Entry と赤色の Exit ノードが存在します
  • 4:05 - 4:08
    これらは他のステートやステートマシンへの
  • 4:08 - 4:10
    依存性を抑える目的でカプセル化する
  • 4:10 - 4:12
    ために用いられ
  • 4:12 - 4:14
    Up ノードの代替物のように扱うことができます
  • 4:15 - 4:17
    ステートマシンを遷移先とする場合も遷移元とする場合も
  • 4:17 - 4:19
    ユーザーは Up ノード /
  • 4:19 - 4:20
    Entry ノード / Exit ノードを使えます
  • 4:21 - 4:22
    Up ノードを使った場合
  • 4:22 - 4:24
    遷移はステート間または
  • 4:24 - 4:27
    ステートとステートマシンの間で起こります
  • 4:28 - 4:30
    Entry および Exit ノードを使った場合
  • 4:30 - 4:32
    遷移元も遷移先も
  • 4:32 - 4:34
    ステートマシン自体となります
  • 4:34 - 4:36
    ステートマシンへの遷移は
  • 4:36 - 4:38
    Entry ノードから来て
  • 4:39 - 4:41
    Exit ノードから出て行くわけです
  • 4:48 - 4:50
    そうなると遷移の設計も色々と
  • 4:50 - 4:52
    考慮しなくてはいけない点が出てきます
  • 4:52 - 4:55
    Up ノードのように単一の遷移が入っているだけでなく
  • 4:55 - 4:56
    多数の遷移が存在しうるからです
  • 4:56 - 4:58
    例を見てみましょう
  • 4:58 - 5:01
    これは先ほど見ていたコントローラーと同じものです
  • 5:03 - 5:06
    ただし Locomotion と Airborne はそれぞれ
  • 5:06 - 5:08
    個別のステートマシン化されています
  • 5:09 - 5:11
    そして先ほどのように各ステートを
  • 5:11 - 5:13
    遷移でつなぐのではなく
  • 5:13 - 5:16
    Entry ノードと Exit ノードが使われています
  • 5:16 - 5:18
    先ほどの例では Standing Locomotion から
  • 5:18 - 5:21
    Leap Take Off と Falling への遷移があり
  • 5:24 - 5:26
    また Landing から
  • 5:26 - 5:28
    Standing Locomotion への遷移もありました
  • 5:29 - 5:31
    Standing Locomotion から Leap Take Off への
  • 5:31 - 5:34
    遷移条件は Jump トリガーでした
  • 5:36 - 5:38
    しかし Locomotion ステートを
  • 5:38 - 5:40
    ステートマシンにカプセル化したので
  • 5:40 - 5:42
    遷移先のステートは無関係になって
  • 5:42 - 5:44
    しまっています
  • 5:44 - 5:46
    この場合ただこのステートマシンから
  • 5:46 - 5:48
    出たいという状態になります
  • 5:48 - 5:50
    なので Exit ノードへの遷移で
  • 5:50 - 5:52
    条件に Jump トリガーを指定します
  • 5:57 - 5:59
    さて先ほどの複雑なアニメーターコントローラーでは
  • 5:59 - 6:01
    Standing Locomotion から Falling へ
  • 6:01 - 6:03
    遷移する条件はパラメーター
  • 6:03 - 6:05
    "Grounded" が false の時でした
  • 6:07 - 6:09
    そして Entry / Exit ノードの例でも
  • 6:09 - 6:11
    2 個目の遷移で Locomotion ステートマシンを
  • 6:11 - 6:14
    出るときに同じ条件が必要になります
  • 6:21 - 6:23
    ステートマシンは 2 個しかないので
  • 6:23 - 6:26
    一方のステートマシンを出るときは
  • 6:26 - 6:28
    他方に入るようにしたいですよね
  • 6:28 - 6:32
    このため両者間の遷移には条件をつけません
  • 6:34 - 6:36
    さて Airborne ステートマシンには Entry ノードから
  • 6:36 - 6:38
    2 個の遷移が出ています
  • 6:38 - 6:40
    1 個目は Entry ノードからの
  • 6:40 - 6:42
    デフォルトの遷移です
  • 6:42 - 6:45
    デフォルトであるのは矢印が通常の白ではなく
  • 6:45 - 6:47
    オレンジ色であるところから分かります
  • 6:47 - 6:50
    この遷移は他に Entry ノードから
  • 6:50 - 6:52
    移行できる遷移がない時または
  • 6:52 - 6:54
    この遷移のみが利用可能なときに使われます
  • 6:55 - 6:56
    もう一方の遷移はグレーになっていますね
  • 6:57 - 6:59
    このようにグレーで表示される遷移は
  • 6:59 - 7:01
    遷移元のステートがわからないことを
  • 7:01 - 7:02
    示します
  • 7:02 - 7:04
    この例で言えば
  • 7:04 - 7:06
    Entry ノードからステートマシンへの
  • 7:06 - 7:08
    遷移であるため 遷移元のステートは
  • 7:08 - 7:12
    何でもあり得ます
  • 7:12 - 7:15
    この他にも Locomotion と Airborne の
  • 7:15 - 7:18
    両ステートマシン間の遷移もグレーで表示されています
  • 7:20 - 7:22
    これらも同様に 遷移元のステートが
  • 7:22 - 7:24
    不明であるためグレーなのです
  • 7:25 - 7:27
    グレーになっている遷移では
  • 7:27 - 7:29
    条件のみが編集可能です
  • 7:29 - 7:31
    遷移元のステートが分からない状態では
  • 7:31 - 7:33
    その他の詳細設定は
  • 7:33 - 7:35
    意味がありませんから
  • 7:35 - 7:38
    持続時間やその他の情報を制御する際は
  • 7:38 - 7:41
    遷移元のステートからの遷移を使います
  • 7:43 - 7:45
    Falling への遷移の条件には
  • 7:45 - 7:47
    "Grounded" が false と設定されています
  • 7:48 - 7:50
    この 2 つの遷移は組み合わせて考えると
  • 7:50 - 7:52
    このステートマシンに入った時 "grounded" が false であれば
  • 7:52 - 7:54
    Falling が再生されるという結果が得られます
  • 7:55 - 7:58
    そしてそれ以外の場合はデフォルトの遷移が使用され
  • 7:58 - 8:00
    "Leap Take Off" が再生されます
  • 8:02 - 8:04
    Entry / Exit ノードを使用してステートマシンを
  • 8:04 - 8:06
    カプセル化することの最大の利点は
  • 8:06 - 8:07
    その再利用性にあります
  • 8:07 - 8:09
    特定のアニメーターコントローラーに
  • 8:09 - 8:11
    他の場所でも使えるステートマシンがあった時
  • 8:12 - 8:14
    ステートマシンをそのまま別の
  • 8:14 - 8:16
    アニメーターコントローラーにコピーできるからです
  • 8:16 - 8:19
    ステートマシンは自己完結型であり
  • 8:19 - 8:22
    外部への依存性を持たないので
  • 8:22 - 8:24
    コピー先の別のアニメーター
  • 8:24 - 8:26
    で他のステートやステートマシンが
  • 8:26 - 8:27
    どうなっていても関係ないわけです
  • 8:27 - 8:29
    アニメーターとアニメーターコントローラーの
  • 8:29 - 8:32
    詳細については下記リンク先の情報をご覧ください
Title:
Animator Sub-state machine hierarchies - Unity Official Tutorials
Description:

more » « less
Duration:
08:33

Japanese subtitles

Revisions