WEBVTT 00:00:00.163 --> 00:00:02.164 アニメーターコントローラー内で複雑な 00:00:02.164 --> 00:00:04.623 ステートを含むロジックシステムを作成するとき 00:00:04.623 --> 00:00:06.623 ステートマシンを階層化すると 00:00:06.623 --> 00:00:08.623 とてもきれいに整理できます 00:00:08.883 --> 00:00:10.883 ステートマシンを作成するには Animator ウィンドウで 00:00:10.883 --> 00:00:13.125 何もない箇所を右クリックして 00:00:13.125 --> 00:00:15.656 Create Sub-State Machine(サブステートマシンを作成)をクリックします 00:00:21.146 --> 00:00:23.213 これで現在のレイヤーまたはステートマシンレベルに 00:00:23.213 --> 00:00:25.213 新しいステートマシンが作成されます 00:00:25.665 --> 00:00:28.326 標準の四角っぽい形とは異なり 00:00:28.326 --> 00:00:31.019 サブステートマシンは六角形っぽい形を 00:00:31.019 --> 00:00:32.607 していますね 00:00:32.607 --> 00:00:35.271 それでは 便利な使い方を見ていきましょう 00:00:36.021 --> 00:00:38.021 ここにちょっと ごちゃごちゃしてきた 00:00:38.021 --> 00:00:39.741 アニメーターコントローラーがあります 00:00:39.741 --> 00:00:42.268 ここにさらにステートを追加していく前に 00:00:42.268 --> 00:00:43.931 整理しておきたいところです 00:00:43.931 --> 00:00:45.931 それには一部のステートを 00:00:45.931 --> 00:00:47.931 ステートマシンに入れてしまう方法があります 00:00:47.931 --> 00:00:49.931 この例だとAirborne(空中)にいる時の 00:00:49.931 --> 00:00:52.250 ステートのグループはすべて 00:00:52.250 --> 00:00:54.144 サブステートマシンにまとめられそうです 00:00:54.144 --> 00:00:56.442 さっそくステートマシンを作るため 00:00:56.442 --> 00:00:58.442 Animator ウィンドウを右クリックして 00:00:58.442 --> 00:01:01.990 Create Sub-State Machine を選択します 00:01:04.605 --> 00:01:06.605 ステートマシンの名前はインスペクターで 00:01:06.605 --> 00:01:08.605 クリックすればいつでも変更できます 00:01:08.605 --> 00:01:10.317 ステートと同じですね 00:01:11.403 --> 00:01:14.191 次に作ったステートマシンにステートを追加していきますが 00:01:14.778 --> 00:01:16.278 これは追加するステートを選択して 00:01:16.278 --> 00:01:18.278 ステートマシンにドラッグするだけで 00:01:18.278 --> 00:01:20.075 OK です 00:01:20.075 --> 00:01:22.858 この例でステートマシンに含めたいのは Leap Takeoff 00:01:22.858 --> 00:01:26.469 Leap Airborne・Falling・Landing ステートです 00:01:27.267 --> 00:01:29.267 ドラッグ中には追加できる場合に + アイコンが 00:01:29.267 --> 00:01:31.267 表示されるので注意してください 00:01:35.430 --> 00:01:37.866 こうしてステートをステートマシンに追加すると 00:01:37.866 --> 00:01:40.745 現在のステートマシン / レイヤーからは消えてしまいます 00:01:41.226 --> 00:01:43.226 もう一度これらステートを表示したり 00:01:43.226 --> 00:01:45.226 プロパティを編集したりするには 00:01:45.495 --> 00:01:48.041 サブステートマシンをダブルクリックします 00:01:51.079 --> 00:01:52.945 格納レイヤーやステートマシンに 00:01:52.945 --> 00:01:55.989 戻る場合は「Up」ノードをダブルクリックします 00:01:56.345 --> 00:01:58.345 現在どの階層にいるのかはウィンドウの上部に 00:01:58.345 --> 00:02:00.345 パンくず式で表示されるので 00:02:00.345 --> 00:02:01.855 そこで確認してください 00:02:09.028 --> 00:02:12.232 さてステートマシンは階層構造で使うことができます 00:02:12.232 --> 00:02:14.415 これはつまりアニメーターコントローラーの各レイヤーには 00:02:14.415 --> 00:02:17.310 複数のステートマシンが存在しうるということです 00:02:17.916 --> 00:02:19.916 そしてそのステートマシーンにもさらに 00:02:19.916 --> 00:02:22.314 サブステートマシンを持たせることなどができます 00:02:25.570 --> 00:02:28.150 そして遷移(Transition)はステートマシンの 00:02:28.150 --> 00:02:30.150 外部から内部へと移動できます 00:02:30.477 --> 00:02:32.477 この例でもサブステートマシンに格納した 00:02:32.477 --> 00:02:35.048 ステートへの遷移がそのまま維持されている 00:02:35.048 --> 00:02:38.568 のが見えますね 00:02:43.740 --> 00:02:46.192 ステートマシンに新しい遷移を追加するには 00:02:46.192 --> 00:02:48.192 遷移元とするステートまたはステートマシンを 00:02:48.192 --> 00:02:49.903 右クリックし 続けて 00:02:49.903 --> 00:02:51.903 Make Transition(遷移を作成)を選択します 00:02:52.470 --> 00:02:54.470 続けて遷移先のステートマシンを 00:02:54.470 --> 00:02:56.097 左クリックします 00:02:57.008 --> 00:02:59.219 するとポップアップメニューが表示され 00:02:59.219 --> 00:03:01.872 ステートマシン内のどのステートに遷移させるか 00:03:01.872 --> 00:03:05.016 あるいはステートマシン自体に遷移させるかを 00:03:05.449 --> 00:03:07.449 指定するよう求められます 00:03:10.054 --> 00:03:12.054 ステートマシンから出る遷移を作る方法としては 00:03:12.054 --> 00:03:14.188 「Up」ノードを使う方法があります 00:03:14.188 --> 00:03:16.188 これは現在のステートマシンに含まれない 00:03:16.188 --> 00:03:18.188 全ステート/ステートマシンへの 00:03:18.188 --> 00:03:19.986 リンクのように機能します 00:03:20.371 --> 00:03:22.246 Up ノードにはまず「Up」ラベルが 00:03:22.246 --> 00:03:24.476 続いて親ステートマシンの名前が表示されています 00:03:25.091 --> 00:03:27.091 親ステートマシンが存在しない場合は 00:03:27.091 --> 00:03:29.091 帰属するレイヤーの名前が表示されます 00:03:29.697 --> 00:03:31.697 この例では親ステートマシンがないので 00:03:31.697 --> 00:03:34.063 Up ノードのラベルは次のようになっています 00:03:34.063 --> 00:03:35.717 (Up) Base Layer 00:03:35.717 --> 00:03:38.176 ステートマシンから出る遷移を作るには 00:03:38.176 --> 00:03:40.176 遷移元とするステート / ステートマシンを 00:03:40.176 --> 00:03:41.928 右クリックしてから 00:03:42.312 --> 00:03:44.513 Make Transition(遷移を作成)を選択し 00:03:44.513 --> 00:03:46.513 続けて Up ノードを左クリックします 00:03:47.789 --> 00:03:49.789 するとステートマシンに遷移する時と似た 00:03:49.789 --> 00:03:52.515 オプションが表示されます 00:03:52.515 --> 00:03:54.515 ただしこの場合選択肢としては 00:03:54.515 --> 00:03:56.361 現在よりも上の階層のステートマシンや 00:03:56.361 --> 00:03:57.829 ステートが表示されます 00:04:00.059 --> 00:04:02.059 レイヤー / ステートマシンには必ず 00:04:02.059 --> 00:04:05.122 緑色の Entry と赤色の Exit ノードが存在します 00:04:05.371 --> 00:04:07.650 これらは他のステートやステートマシンへの 00:04:07.650 --> 00:04:09.650 依存性を抑える目的でカプセル化する 00:04:09.650 --> 00:04:11.650 ために用いられ 00:04:11.650 --> 00:04:14.436 Up ノードの代替物のように扱うことができます 00:04:14.791 --> 00:04:16.791 ステートマシンを遷移先とする場合も遷移元とする場合も 00:04:16.791 --> 00:04:18.791 ユーザーは Up ノード / 00:04:18.791 --> 00:04:20.427 Entry ノード / Exit ノードを使えます 00:04:20.945 --> 00:04:22.347 Up ノードを使った場合 00:04:22.347 --> 00:04:24.347 遷移はステート間または 00:04:24.347 --> 00:04:27.375 ステートとステートマシンの間で起こります 00:04:27.740 --> 00:04:30.039 Entry および Exit ノードを使った場合 00:04:30.039 --> 00:04:32.039 遷移元も遷移先も 00:04:32.039 --> 00:04:34.039 ステートマシン自体となります 00:04:34.039 --> 00:04:36.039 ステートマシンへの遷移は 00:04:36.039 --> 00:04:38.039 Entry ノードから来て 00:04:38.960 --> 00:04:40.960 Exit ノードから出て行くわけです 00:04:48.436 --> 00:04:50.050 そうなると遷移の設計も色々と 00:04:50.050 --> 00:04:51.847 考慮しなくてはいけない点が出てきます 00:04:51.847 --> 00:04:54.652 Up ノードのように単一の遷移が入っているだけでなく 00:04:54.652 --> 00:04:56.048 多数の遷移が存在しうるからです 00:04:56.048 --> 00:04:58.048 例を見てみましょう 00:04:58.048 --> 00:05:01.279 これは先ほど見ていたコントローラーと同じものです 00:05:03.244 --> 00:05:05.693 ただし Locomotion と Airborne はそれぞれ 00:05:05.693 --> 00:05:08.049 個別のステートマシン化されています 00:05:09.190 --> 00:05:11.190 そして先ほどのように各ステートを 00:05:11.190 --> 00:05:13.190 遷移でつなぐのではなく 00:05:13.190 --> 00:05:15.506 Entry ノードと Exit ノードが使われています 00:05:15.506 --> 00:05:17.506 先ほどの例では Standing Locomotion から 00:05:17.506 --> 00:05:21.242 Leap Take Off と Falling への遷移があり 00:05:23.641 --> 00:05:25.641 また Landing から 00:05:25.641 --> 00:05:27.641 Standing Locomotion への遷移もありました 00:05:29.455 --> 00:05:31.455 Standing Locomotion から Leap Take Off への 00:05:31.455 --> 00:05:34.397 遷移条件は Jump トリガーでした 00:05:35.952 --> 00:05:37.952 しかし Locomotion ステートを 00:05:37.952 --> 00:05:40.355 ステートマシンにカプセル化したので 00:05:40.355 --> 00:05:42.355 遷移先のステートは無関係になって 00:05:42.355 --> 00:05:43.758 しまっています 00:05:43.758 --> 00:05:45.758 この場合ただこのステートマシンから 00:05:45.758 --> 00:05:47.758 出たいという状態になります 00:05:47.998 --> 00:05:49.998 なので Exit ノードへの遷移で 00:05:49.998 --> 00:05:51.998 条件に Jump トリガーを指定します 00:05:57.112 --> 00:05:59.361 さて先ほどの複雑なアニメーターコントローラーでは 00:05:59.361 --> 00:06:01.361 Standing Locomotion から Falling へ 00:06:01.361 --> 00:06:03.361 遷移する条件はパラメーター 00:06:03.361 --> 00:06:05.361 "Grounded" が false の時でした 00:06:06.781 --> 00:06:08.781 そして Entry / Exit ノードの例でも 00:06:08.781 --> 00:06:10.781 2 個目の遷移で Locomotion ステートマシンを 00:06:10.781 --> 00:06:13.820 出るときに同じ条件が必要になります 00:06:21.074 --> 00:06:23.431 ステートマシンは 2 個しかないので 00:06:23.431 --> 00:06:26.222 一方のステートマシンを出るときは 00:06:26.222 --> 00:06:27.769 他方に入るようにしたいですよね 00:06:28.491 --> 00:06:32.204 このため両者間の遷移には条件をつけません 00:06:33.528 --> 00:06:35.789 さて Airborne ステートマシンには Entry ノードから 00:06:35.789 --> 00:06:37.789 2 個の遷移が出ています 00:06:38.480 --> 00:06:40.480 1 個目は Entry ノードからの 00:06:40.480 --> 00:06:42.067 デフォルトの遷移です 00:06:42.067 --> 00:06:44.616 デフォルトであるのは矢印が通常の白ではなく 00:06:44.616 --> 00:06:46.616 オレンジ色であるところから分かります 00:06:47.374 --> 00:06:49.759 この遷移は他に Entry ノードから 00:06:49.759 --> 00:06:51.759 移行できる遷移がない時または 00:06:51.759 --> 00:06:54.113 この遷移のみが利用可能なときに使われます 00:06:54.594 --> 00:06:56.392 もう一方の遷移はグレーになっていますね 00:06:56.757 --> 00:06:58.757 このようにグレーで表示される遷移は 00:06:58.757 --> 00:07:00.757 遷移元のステートがわからないことを 00:07:00.757 --> 00:07:02.332 示します 00:07:02.332 --> 00:07:03.910 この例で言えば 00:07:03.910 --> 00:07:05.910 Entry ノードからステートマシンへの 00:07:05.910 --> 00:07:08.245 遷移であるため 遷移元のステートは 00:07:08.245 --> 00:07:11.640 何でもあり得ます 00:07:11.915 --> 00:07:14.541 この他にも Locomotion と Airborne の 00:07:14.541 --> 00:07:17.518 両ステートマシン間の遷移もグレーで表示されています 00:07:19.504 --> 00:07:21.504 これらも同様に 遷移元のステートが 00:07:21.504 --> 00:07:23.504 不明であるためグレーなのです 00:07:24.617 --> 00:07:26.617 グレーになっている遷移では 00:07:26.617 --> 00:07:28.617 条件のみが編集可能です 00:07:29.164 --> 00:07:31.164 遷移元のステートが分からない状態では 00:07:31.164 --> 00:07:33.164 その他の詳細設定は 00:07:33.164 --> 00:07:35.164 意味がありませんから 00:07:35.164 --> 00:07:38.047 持続時間やその他の情報を制御する際は 00:07:38.047 --> 00:07:40.956 遷移元のステートからの遷移を使います 00:07:43.374 --> 00:07:45.374 Falling への遷移の条件には 00:07:45.374 --> 00:07:47.374 "Grounded" が false と設定されています 00:07:47.691 --> 00:07:49.546 この 2 つの遷移は組み合わせて考えると 00:07:49.546 --> 00:07:51.546 このステートマシンに入った時 "grounded" が false であれば 00:07:51.546 --> 00:07:54.259 Falling が再生されるという結果が得られます 00:07:55.343 --> 00:07:58.353 そしてそれ以外の場合はデフォルトの遷移が使用され 00:07:58.360 --> 00:08:00.360 "Leap Take Off" が再生されます 00:08:01.610 --> 00:08:03.610 Entry / Exit ノードを使用してステートマシンを 00:08:03.610 --> 00:08:05.610 カプセル化することの最大の利点は 00:08:05.610 --> 00:08:07.466 その再利用性にあります 00:08:07.466 --> 00:08:09.466 特定のアニメーターコントローラーに 00:08:09.466 --> 00:08:11.466 他の場所でも使えるステートマシンがあった時 00:08:11.831 --> 00:08:14.158 ステートマシンをそのまま別の 00:08:14.158 --> 00:08:16.158 アニメーターコントローラーにコピーできるからです 00:08:16.158 --> 00:08:18.544 ステートマシンは自己完結型であり 00:08:18.544 --> 00:08:21.803 外部への依存性を持たないので 00:08:21.803 --> 00:08:23.803 コピー先の別のアニメーター 00:08:23.803 --> 00:08:25.803 で他のステートやステートマシンが 00:08:25.803 --> 00:08:27.189 どうなっていても関係ないわけです 00:08:27.189 --> 00:08:29.189 アニメーターとアニメーターコントローラーの 00:08:29.189 --> 00:08:32.168 詳細については下記リンク先の情報をご覧ください