[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.16,0:00:02.16,Default,,0000,0000,0000,,アニメーターコントローラー内で複雑な Dialogue: 0,0:00:02.16,0:00:04.62,Default,,0000,0000,0000,,ステートを含むロジックシステムを作成するとき Dialogue: 0,0:00:04.62,0:00:06.62,Default,,0000,0000,0000,,ステートマシンを階層化すると Dialogue: 0,0:00:06.62,0:00:08.62,Default,,0000,0000,0000,,とてもきれいに整理できます Dialogue: 0,0:00:08.88,0:00:10.88,Default,,0000,0000,0000,,ステートマシンを作成するには Animator ウィンドウで Dialogue: 0,0:00:10.88,0:00:13.12,Default,,0000,0000,0000,,何もない箇所を右クリックして Dialogue: 0,0:00:13.12,0:00:15.66,Default,,0000,0000,0000,,Create Sub-State Machine(サブステートマシンを作成)をクリックします Dialogue: 0,0:00:21.15,0:00:23.21,Default,,0000,0000,0000,,これで現在のレイヤーまたはステートマシンレベルに Dialogue: 0,0:00:23.21,0:00:25.21,Default,,0000,0000,0000,,新しいステートマシンが作成されます Dialogue: 0,0:00:25.66,0:00:28.33,Default,,0000,0000,0000,,標準の四角っぽい形とは異なり Dialogue: 0,0:00:28.33,0:00:31.02,Default,,0000,0000,0000,,サブステートマシンは六角形っぽい形を Dialogue: 0,0:00:31.02,0:00:32.61,Default,,0000,0000,0000,,していますね Dialogue: 0,0:00:32.61,0:00:35.27,Default,,0000,0000,0000,,それでは 便利な使い方を見ていきましょう Dialogue: 0,0:00:36.02,0:00:38.02,Default,,0000,0000,0000,,ここにちょっと ごちゃごちゃしてきた Dialogue: 0,0:00:38.02,0:00:39.74,Default,,0000,0000,0000,,アニメーターコントローラーがあります Dialogue: 0,0:00:39.74,0:00:42.27,Default,,0000,0000,0000,,ここにさらにステートを追加していく前に Dialogue: 0,0:00:42.27,0:00:43.93,Default,,0000,0000,0000,,整理しておきたいところです Dialogue: 0,0:00:43.93,0:00:45.93,Default,,0000,0000,0000,,それには一部のステートを Dialogue: 0,0:00:45.93,0:00:47.93,Default,,0000,0000,0000,,ステートマシンに入れてしまう方法があります Dialogue: 0,0:00:47.93,0:00:49.93,Default,,0000,0000,0000,,この例だとAirborne(空中)にいる時の Dialogue: 0,0:00:49.93,0:00:52.25,Default,,0000,0000,0000,,ステートのグループはすべて Dialogue: 0,0:00:52.25,0:00:54.14,Default,,0000,0000,0000,,サブステートマシンにまとめられそうです Dialogue: 0,0:00:54.14,0:00:56.44,Default,,0000,0000,0000,,さっそくステートマシンを作るため Dialogue: 0,0:00:56.44,0:00:58.44,Default,,0000,0000,0000,,Animator ウィンドウを右クリックして Dialogue: 0,0:00:58.44,0:01:01.99,Default,,0000,0000,0000,,Create Sub-State Machine を選択します Dialogue: 0,0:01:04.60,0:01:06.60,Default,,0000,0000,0000,,ステートマシンの名前はインスペクターで Dialogue: 0,0:01:06.60,0:01:08.60,Default,,0000,0000,0000,,クリックすればいつでも変更できます Dialogue: 0,0:01:08.60,0:01:10.32,Default,,0000,0000,0000,,ステートと同じですね Dialogue: 0,0:01:11.40,0:01:14.19,Default,,0000,0000,0000,,次に作ったステートマシンにステートを追加していきますが Dialogue: 0,0:01:14.78,0:01:16.28,Default,,0000,0000,0000,,これは追加するステートを選択して Dialogue: 0,0:01:16.28,0:01:18.28,Default,,0000,0000,0000,,ステートマシンにドラッグするだけで Dialogue: 0,0:01:18.28,0:01:20.08,Default,,0000,0000,0000,,OK です Dialogue: 0,0:01:20.08,0:01:22.86,Default,,0000,0000,0000,,この例でステートマシンに含めたいのは Leap Takeoff Dialogue: 0,0:01:22.86,0:01:26.47,Default,,0000,0000,0000,,Leap Airborne・Falling・Landing ステートです Dialogue: 0,0:01:27.27,0:01:29.27,Default,,0000,0000,0000,,ドラッグ中には追加できる場合に + アイコンが Dialogue: 0,0:01:29.27,0:01:31.27,Default,,0000,0000,0000,,表示されるので注意してください Dialogue: 0,0:01:35.43,0:01:37.87,Default,,0000,0000,0000,,こうしてステートをステートマシンに追加すると Dialogue: 0,0:01:37.87,0:01:40.74,Default,,0000,0000,0000,,現在のステートマシン / レイヤーからは消えてしまいます Dialogue: 0,0:01:41.23,0:01:43.23,Default,,0000,0000,0000,,もう一度これらステートを表示したり Dialogue: 0,0:01:43.23,0:01:45.23,Default,,0000,0000,0000,,プロパティを編集したりするには Dialogue: 0,0:01:45.50,0:01:48.04,Default,,0000,0000,0000,,サブステートマシンをダブルクリックします Dialogue: 0,0:01:51.08,0:01:52.94,Default,,0000,0000,0000,,格納レイヤーやステートマシンに Dialogue: 0,0:01:52.94,0:01:55.99,Default,,0000,0000,0000,,戻る場合は「Up」ノードをダブルクリックします Dialogue: 0,0:01:56.34,0:01:58.34,Default,,0000,0000,0000,,現在どの階層にいるのかはウィンドウの上部に Dialogue: 0,0:01:58.34,0:02:00.34,Default,,0000,0000,0000,,パンくず式で表示されるので Dialogue: 0,0:02:00.34,0:02:01.86,Default,,0000,0000,0000,,そこで確認してください Dialogue: 0,0:02:09.03,0:02:12.23,Default,,0000,0000,0000,,さてステートマシンは階層構造で使うことができます Dialogue: 0,0:02:12.23,0:02:14.42,Default,,0000,0000,0000,,これはつまりアニメーターコントローラーの各レイヤーには Dialogue: 0,0:02:14.42,0:02:17.31,Default,,0000,0000,0000,,複数のステートマシンが存在しうるということです Dialogue: 0,0:02:17.92,0:02:19.92,Default,,0000,0000,0000,,そしてそのステートマシーンにもさらに Dialogue: 0,0:02:19.92,0:02:22.31,Default,,0000,0000,0000,,サブステートマシンを持たせることなどができます Dialogue: 0,0:02:25.57,0:02:28.15,Default,,0000,0000,0000,,そして遷移(Transition)はステートマシンの Dialogue: 0,0:02:28.15,0:02:30.15,Default,,0000,0000,0000,,外部から内部へと移動できます Dialogue: 0,0:02:30.48,0:02:32.48,Default,,0000,0000,0000,,この例でもサブステートマシンに格納した Dialogue: 0,0:02:32.48,0:02:35.05,Default,,0000,0000,0000,,ステートへの遷移がそのまま維持されている Dialogue: 0,0:02:35.05,0:02:38.57,Default,,0000,0000,0000,,のが見えますね Dialogue: 0,0:02:43.74,0:02:46.19,Default,,0000,0000,0000,,ステートマシンに新しい遷移を追加するには Dialogue: 0,0:02:46.19,0:02:48.19,Default,,0000,0000,0000,,遷移元とするステートまたはステートマシンを Dialogue: 0,0:02:48.19,0:02:49.90,Default,,0000,0000,0000,,右クリックし 続けて Dialogue: 0,0:02:49.90,0:02:51.90,Default,,0000,0000,0000,,Make Transition(遷移を作成)を選択します Dialogue: 0,0:02:52.47,0:02:54.47,Default,,0000,0000,0000,,続けて遷移先のステートマシンを Dialogue: 0,0:02:54.47,0:02:56.10,Default,,0000,0000,0000,,左クリックします Dialogue: 0,0:02:57.01,0:02:59.22,Default,,0000,0000,0000,,するとポップアップメニューが表示され Dialogue: 0,0:02:59.22,0:03:01.87,Default,,0000,0000,0000,,ステートマシン内のどのステートに遷移させるか Dialogue: 0,0:03:01.87,0:03:05.02,Default,,0000,0000,0000,,あるいはステートマシン自体に遷移させるかを Dialogue: 0,0:03:05.45,0:03:07.45,Default,,0000,0000,0000,,指定するよう求められます Dialogue: 0,0:03:10.05,0:03:12.05,Default,,0000,0000,0000,,ステートマシンから出る遷移を作る方法としては Dialogue: 0,0:03:12.05,0:03:14.19,Default,,0000,0000,0000,,「Up」ノードを使う方法があります Dialogue: 0,0:03:14.19,0:03:16.19,Default,,0000,0000,0000,,これは現在のステートマシンに含まれない Dialogue: 0,0:03:16.19,0:03:18.19,Default,,0000,0000,0000,,全ステート/ステートマシンへの Dialogue: 0,0:03:18.19,0:03:19.99,Default,,0000,0000,0000,,リンクのように機能します Dialogue: 0,0:03:20.37,0:03:22.25,Default,,0000,0000,0000,,Up ノードにはまず「Up」ラベルが Dialogue: 0,0:03:22.25,0:03:24.48,Default,,0000,0000,0000,,続いて親ステートマシンの名前が表示されています Dialogue: 0,0:03:25.09,0:03:27.09,Default,,0000,0000,0000,,親ステートマシンが存在しない場合は Dialogue: 0,0:03:27.09,0:03:29.09,Default,,0000,0000,0000,,帰属するレイヤーの名前が表示されます Dialogue: 0,0:03:29.70,0:03:31.70,Default,,0000,0000,0000,,この例では親ステートマシンがないので Dialogue: 0,0:03:31.70,0:03:34.06,Default,,0000,0000,0000,,Up ノードのラベルは次のようになっています Dialogue: 0,0:03:34.06,0:03:35.72,Default,,0000,0000,0000,,(Up) Base Layer Dialogue: 0,0:03:35.72,0:03:38.18,Default,,0000,0000,0000,,ステートマシンから出る遷移を作るには Dialogue: 0,0:03:38.18,0:03:40.18,Default,,0000,0000,0000,,遷移元とするステート / ステートマシンを Dialogue: 0,0:03:40.18,0:03:41.93,Default,,0000,0000,0000,,右クリックしてから Dialogue: 0,0:03:42.31,0:03:44.51,Default,,0000,0000,0000,,Make Transition(遷移を作成)を選択し Dialogue: 0,0:03:44.51,0:03:46.51,Default,,0000,0000,0000,,続けて Up ノードを左クリックします Dialogue: 0,0:03:47.79,0:03:49.79,Default,,0000,0000,0000,,するとステートマシンに遷移する時と似た Dialogue: 0,0:03:49.79,0:03:52.52,Default,,0000,0000,0000,,オプションが表示されます Dialogue: 0,0:03:52.52,0:03:54.52,Default,,0000,0000,0000,,ただしこの場合選択肢としては Dialogue: 0,0:03:54.52,0:03:56.36,Default,,0000,0000,0000,,現在よりも上の階層のステートマシンや Dialogue: 0,0:03:56.36,0:03:57.83,Default,,0000,0000,0000,,ステートが表示されます Dialogue: 0,0:04:00.06,0:04:02.06,Default,,0000,0000,0000,,レイヤー / ステートマシンには必ず Dialogue: 0,0:04:02.06,0:04:05.12,Default,,0000,0000,0000,,緑色の Entry と赤色の Exit ノードが存在します Dialogue: 0,0:04:05.37,0:04:07.65,Default,,0000,0000,0000,,これらは他のステートやステートマシンへの Dialogue: 0,0:04:07.65,0:04:09.65,Default,,0000,0000,0000,,依存性を抑える目的でカプセル化する Dialogue: 0,0:04:09.65,0:04:11.65,Default,,0000,0000,0000,,ために用いられ Dialogue: 0,0:04:11.65,0:04:14.44,Default,,0000,0000,0000,,Up ノードの代替物のように扱うことができます Dialogue: 0,0:04:14.79,0:04:16.79,Default,,0000,0000,0000,,ステートマシンを遷移先とする場合も遷移元とする場合も Dialogue: 0,0:04:16.79,0:04:18.79,Default,,0000,0000,0000,,ユーザーは Up ノード / Dialogue: 0,0:04:18.79,0:04:20.43,Default,,0000,0000,0000,,Entry ノード / Exit ノードを使えます Dialogue: 0,0:04:20.94,0:04:22.35,Default,,0000,0000,0000,,Up ノードを使った場合 Dialogue: 0,0:04:22.35,0:04:24.35,Default,,0000,0000,0000,,遷移はステート間または Dialogue: 0,0:04:24.35,0:04:27.38,Default,,0000,0000,0000,,ステートとステートマシンの間で起こります Dialogue: 0,0:04:27.74,0:04:30.04,Default,,0000,0000,0000,,Entry および Exit ノードを使った場合 Dialogue: 0,0:04:30.04,0:04:32.04,Default,,0000,0000,0000,,遷移元も遷移先も Dialogue: 0,0:04:32.04,0:04:34.04,Default,,0000,0000,0000,,ステートマシン自体となります Dialogue: 0,0:04:34.04,0:04:36.04,Default,,0000,0000,0000,,ステートマシンへの遷移は Dialogue: 0,0:04:36.04,0:04:38.04,Default,,0000,0000,0000,,Entry ノードから来て Dialogue: 0,0:04:38.96,0:04:40.96,Default,,0000,0000,0000,,Exit ノードから出て行くわけです Dialogue: 0,0:04:48.44,0:04:50.05,Default,,0000,0000,0000,,そうなると遷移の設計も色々と Dialogue: 0,0:04:50.05,0:04:51.85,Default,,0000,0000,0000,,考慮しなくてはいけない点が出てきます Dialogue: 0,0:04:51.85,0:04:54.65,Default,,0000,0000,0000,,Up ノードのように単一の遷移が入っているだけでなく Dialogue: 0,0:04:54.65,0:04:56.05,Default,,0000,0000,0000,,多数の遷移が存在しうるからです Dialogue: 0,0:04:56.05,0:04:58.05,Default,,0000,0000,0000,,例を見てみましょう Dialogue: 0,0:04:58.05,0:05:01.28,Default,,0000,0000,0000,,これは先ほど見ていたコントローラーと同じものです Dialogue: 0,0:05:03.24,0:05:05.69,Default,,0000,0000,0000,,ただし Locomotion と Airborne はそれぞれ Dialogue: 0,0:05:05.69,0:05:08.05,Default,,0000,0000,0000,,個別のステートマシン化されています Dialogue: 0,0:05:09.19,0:05:11.19,Default,,0000,0000,0000,,そして先ほどのように各ステートを Dialogue: 0,0:05:11.19,0:05:13.19,Default,,0000,0000,0000,,遷移でつなぐのではなく Dialogue: 0,0:05:13.19,0:05:15.51,Default,,0000,0000,0000,,Entry ノードと Exit ノードが使われています Dialogue: 0,0:05:15.51,0:05:17.51,Default,,0000,0000,0000,,先ほどの例では Standing Locomotion から Dialogue: 0,0:05:17.51,0:05:21.24,Default,,0000,0000,0000,,Leap Take Off と Falling への遷移があり Dialogue: 0,0:05:23.64,0:05:25.64,Default,,0000,0000,0000,,また Landing から Dialogue: 0,0:05:25.64,0:05:27.64,Default,,0000,0000,0000,,Standing Locomotion への遷移もありました Dialogue: 0,0:05:29.46,0:05:31.46,Default,,0000,0000,0000,,Standing Locomotion から Leap Take Off への Dialogue: 0,0:05:31.46,0:05:34.40,Default,,0000,0000,0000,,遷移条件は Jump トリガーでした Dialogue: 0,0:05:35.95,0:05:37.95,Default,,0000,0000,0000,,しかし Locomotion ステートを Dialogue: 0,0:05:37.95,0:05:40.36,Default,,0000,0000,0000,,ステートマシンにカプセル化したので Dialogue: 0,0:05:40.36,0:05:42.36,Default,,0000,0000,0000,,遷移先のステートは無関係になって Dialogue: 0,0:05:42.36,0:05:43.76,Default,,0000,0000,0000,,しまっています Dialogue: 0,0:05:43.76,0:05:45.76,Default,,0000,0000,0000,,この場合ただこのステートマシンから Dialogue: 0,0:05:45.76,0:05:47.76,Default,,0000,0000,0000,,出たいという状態になります Dialogue: 0,0:05:47.100,0:05:49.100,Default,,0000,0000,0000,,なので Exit ノードへの遷移で Dialogue: 0,0:05:49.100,0:05:51.100,Default,,0000,0000,0000,,条件に Jump トリガーを指定します Dialogue: 0,0:05:57.11,0:05:59.36,Default,,0000,0000,0000,,さて先ほどの複雑なアニメーターコントローラーでは Dialogue: 0,0:05:59.36,0:06:01.36,Default,,0000,0000,0000,,Standing Locomotion から Falling へ Dialogue: 0,0:06:01.36,0:06:03.36,Default,,0000,0000,0000,,遷移する条件はパラメーター Dialogue: 0,0:06:03.36,0:06:05.36,Default,,0000,0000,0000,,"Grounded" が false の時でした Dialogue: 0,0:06:06.78,0:06:08.78,Default,,0000,0000,0000,,そして Entry / Exit ノードの例でも Dialogue: 0,0:06:08.78,0:06:10.78,Default,,0000,0000,0000,,2 個目の遷移で Locomotion ステートマシンを Dialogue: 0,0:06:10.78,0:06:13.82,Default,,0000,0000,0000,,出るときに同じ条件が必要になります Dialogue: 0,0:06:21.07,0:06:23.43,Default,,0000,0000,0000,,ステートマシンは 2 個しかないので Dialogue: 0,0:06:23.43,0:06:26.22,Default,,0000,0000,0000,,一方のステートマシンを出るときは Dialogue: 0,0:06:26.22,0:06:27.77,Default,,0000,0000,0000,,他方に入るようにしたいですよね Dialogue: 0,0:06:28.49,0:06:32.20,Default,,0000,0000,0000,,このため両者間の遷移には条件をつけません Dialogue: 0,0:06:33.53,0:06:35.79,Default,,0000,0000,0000,,さて Airborne ステートマシンには Entry ノードから Dialogue: 0,0:06:35.79,0:06:37.79,Default,,0000,0000,0000,,2 個の遷移が出ています Dialogue: 0,0:06:38.48,0:06:40.48,Default,,0000,0000,0000,,1 個目は Entry ノードからの Dialogue: 0,0:06:40.48,0:06:42.07,Default,,0000,0000,0000,,デフォルトの遷移です Dialogue: 0,0:06:42.07,0:06:44.62,Default,,0000,0000,0000,,デフォルトであるのは矢印が通常の白ではなく Dialogue: 0,0:06:44.62,0:06:46.62,Default,,0000,0000,0000,,オレンジ色であるところから分かります Dialogue: 0,0:06:47.37,0:06:49.76,Default,,0000,0000,0000,,この遷移は他に Entry ノードから Dialogue: 0,0:06:49.76,0:06:51.76,Default,,0000,0000,0000,,移行できる遷移がない時または Dialogue: 0,0:06:51.76,0:06:54.11,Default,,0000,0000,0000,,この遷移のみが利用可能なときに使われます Dialogue: 0,0:06:54.59,0:06:56.39,Default,,0000,0000,0000,,もう一方の遷移はグレーになっていますね Dialogue: 0,0:06:56.76,0:06:58.76,Default,,0000,0000,0000,,このようにグレーで表示される遷移は Dialogue: 0,0:06:58.76,0:07:00.76,Default,,0000,0000,0000,,遷移元のステートがわからないことを Dialogue: 0,0:07:00.76,0:07:02.33,Default,,0000,0000,0000,,示します Dialogue: 0,0:07:02.33,0:07:03.91,Default,,0000,0000,0000,,この例で言えば Dialogue: 0,0:07:03.91,0:07:05.91,Default,,0000,0000,0000,,Entry ノードからステートマシンへの Dialogue: 0,0:07:05.91,0:07:08.24,Default,,0000,0000,0000,,遷移であるため 遷移元のステートは Dialogue: 0,0:07:08.24,0:07:11.64,Default,,0000,0000,0000,,何でもあり得ます Dialogue: 0,0:07:11.92,0:07:14.54,Default,,0000,0000,0000,,この他にも Locomotion と Airborne の Dialogue: 0,0:07:14.54,0:07:17.52,Default,,0000,0000,0000,,両ステートマシン間の遷移もグレーで表示されています Dialogue: 0,0:07:19.50,0:07:21.50,Default,,0000,0000,0000,,これらも同様に 遷移元のステートが Dialogue: 0,0:07:21.50,0:07:23.50,Default,,0000,0000,0000,,不明であるためグレーなのです Dialogue: 0,0:07:24.62,0:07:26.62,Default,,0000,0000,0000,,グレーになっている遷移では Dialogue: 0,0:07:26.62,0:07:28.62,Default,,0000,0000,0000,,条件のみが編集可能です Dialogue: 0,0:07:29.16,0:07:31.16,Default,,0000,0000,0000,,遷移元のステートが分からない状態では Dialogue: 0,0:07:31.16,0:07:33.16,Default,,0000,0000,0000,,その他の詳細設定は Dialogue: 0,0:07:33.16,0:07:35.16,Default,,0000,0000,0000,,意味がありませんから Dialogue: 0,0:07:35.16,0:07:38.05,Default,,0000,0000,0000,,持続時間やその他の情報を制御する際は Dialogue: 0,0:07:38.05,0:07:40.96,Default,,0000,0000,0000,,遷移元のステートからの遷移を使います Dialogue: 0,0:07:43.37,0:07:45.37,Default,,0000,0000,0000,,Falling への遷移の条件には Dialogue: 0,0:07:45.37,0:07:47.37,Default,,0000,0000,0000,,"Grounded" が false と設定されています Dialogue: 0,0:07:47.69,0:07:49.55,Default,,0000,0000,0000,,この 2 つの遷移は組み合わせて考えると Dialogue: 0,0:07:49.55,0:07:51.55,Default,,0000,0000,0000,,このステートマシンに入った時 "grounded" が false であれば Dialogue: 0,0:07:51.55,0:07:54.26,Default,,0000,0000,0000,,Falling が再生されるという結果が得られます Dialogue: 0,0:07:55.34,0:07:58.35,Default,,0000,0000,0000,,そしてそれ以外の場合はデフォルトの遷移が使用され Dialogue: 0,0:07:58.36,0:08:00.36,Default,,0000,0000,0000,,"Leap Take Off" が再生されます Dialogue: 0,0:08:01.61,0:08:03.61,Default,,0000,0000,0000,,Entry / Exit ノードを使用してステートマシンを Dialogue: 0,0:08:03.61,0:08:05.61,Default,,0000,0000,0000,,カプセル化することの最大の利点は Dialogue: 0,0:08:05.61,0:08:07.47,Default,,0000,0000,0000,,その再利用性にあります Dialogue: 0,0:08:07.47,0:08:09.47,Default,,0000,0000,0000,,特定のアニメーターコントローラーに Dialogue: 0,0:08:09.47,0:08:11.47,Default,,0000,0000,0000,,他の場所でも使えるステートマシンがあった時 Dialogue: 0,0:08:11.83,0:08:14.16,Default,,0000,0000,0000,,ステートマシンをそのまま別の Dialogue: 0,0:08:14.16,0:08:16.16,Default,,0000,0000,0000,,アニメーターコントローラーにコピーできるからです Dialogue: 0,0:08:16.16,0:08:18.54,Default,,0000,0000,0000,,ステートマシンは自己完結型であり Dialogue: 0,0:08:18.54,0:08:21.80,Default,,0000,0000,0000,,外部への依存性を持たないので Dialogue: 0,0:08:21.80,0:08:23.80,Default,,0000,0000,0000,,コピー先の別のアニメーター Dialogue: 0,0:08:23.80,0:08:25.80,Default,,0000,0000,0000,,で他のステートやステートマシンが Dialogue: 0,0:08:25.80,0:08:27.19,Default,,0000,0000,0000,,どうなっていても関係ないわけです Dialogue: 0,0:08:27.19,0:08:29.19,Default,,0000,0000,0000,,アニメーターとアニメーターコントローラーの Dialogue: 0,0:08:29.19,0:08:32.17,Default,,0000,0000,0000,,詳細については下記リンク先の情報をご覧ください