‫こんにちは､ ようこそ｡
‫この講義では､ アニメーションをゲームプレイに接続する方法を学びます｡ また､
‫キャラクターのスピードをブレンドスペースに接続し､ この効果を得ることができるようにします｡
‫さっそく潜入してみましょう｡
‫なるほど｡
‫そこで､ このAVPシューターというキャラクターと融合するブレンド空間を手に入れたのです｡
‫まず最初に､ アニメーション ブループリント アニメーション グラフの動作の例として使用しているこれら
‫2 つのブレンドを削除します｡
‫その代わりに､ 右下のアセットブラウザから､ ブレンドスペースを取り込みます｡
‫そこで､ このBBSアンダースコアロケーションを作成したところです｡
‫これをアニメーショングラフにドラッグすると､ この小さな緑色のノードが表示されるのがわかると思います｡
‫他のブレンドノードなどと同じように､ 自分自身とインポーズを用意して､ 出力にドラッグすることができます｡
‫そしてコンパイルを押すと､ デフォルトのスペースが表示されます｡
‫そして､ この小さなブレンドスペースの可視化はとても便利です｡
‫さて､ おそらく後者を実行したいので､ 先に進み､
‫leftとforwardの2つの変数を削除してみましょう｡
‫そこで､ これをfloatに変更し､ 同じくfloatであるspeed変数も必要になってきます｡
‫そして､ この2つを変数speedでスピードに､ angleで角度にパッチすることができます｡
‫そして､ コンパイルを実行し､ アニメートプレビューエディタを見て､ 値を調整します｡
‫では､ まずスピードですが､ スピードを少し上げてみましょう｡
‫スピードを30くらいまで上げてみよう｡
‫どうなるか見てみましょう｡
‫行ってしまうのです｡
‫70まで上げて歩き始める｡
‫走ることに近づいている｡
‫100まで持っていく｡
‫まあ､ 10じゃなくて100だけどね｡
‫そうすれば､ 彼は完全に走り出し､ そして角度を変えることができます｡
‫90度では右へ90度､ -90度では左へ90度となるわけです｡
‫その中間でもいいんです｡
‫だから､ 45度と言えるのです｡
‫45度の角度で走っているのがわかります｡ ブレンドスペースで､ どのようなアニメーションを選ぼうとしているのかがわかります｡
‫前方へのアニメーションと右90度へのアニメーションの間でブレンドされているようなものです｡
‫だから､ かっこいいんです｡
‫それを実現したのが､ 私たちです｡
‫しかし､ ご存知のように､ これは実際のゲームプレイによって推進される必要がありますし､ そもそもなぜそんなことをするのでしょうか？
‫アニメーションで「こんなペースで進んでください」とゲームプレイを推進させるのはどうでしょう？
‫アニメーションをゲームプレイの原動力としない理由は､ デザイナーにゲームプレイに関するあらゆる変数を調整できるようにしたい場合が多いからです｡
‫このキャラクターがこのスピードで走っているのは違和感がある」と言われるようにしたいのです｡
‫むしろこのスピードで走らないとダメなんだ｡
‫そして､ 歩くことはこのスピードでもっとできるはずです｡
‫つまり､ アニメーションがデザインやゲーム感覚を制約するようなことは避けたいということですね｡
‫アニメーションは､ ゲーム感覚の裏返しで､ 見栄えを良くしてほしいのです｡
‫しかし､ そのために､ 別の走行アニメーションを収録したり､
‫別の走行アニメーションを探したりして､ 結局､ ゲームの操作感が改善されないことに気づくよりは､
‫最初にゲームを変更したほうがいいでしょう｡
‫だから､ この2つはなるべく分けて考えたいんです｡
‫どうしてもアニメーションに合わせなければならない場合もあるのですが､ 今回はそのようなことはありません｡
‫だから､ どんなルールにも例外がある｡
‫だから､ これを完全に決まったルールとして受け取らないでください｡
‫アニメーションの機能をゲームに反映させる場合もありますが､ 基本的にはその逆を目指したいと思っています｡
‫ゲームの中のキャラクターのスピードはどうなっているのか､ と言いたいのです｡
‫アニメーションのスピードがどうのこうのと言うより､ アップデートして行かせてください｡
‫ゲーム内のキャラクターの速度を更新させてください｡
‫なるほど｡
‫そうは言っても､ どうすればいいのか｡
‫基本的に､ このブループリント（アニメーション・ブループリント）は､ 他のブループリントと同様にイベント・グラフを持ち､
‫TICイベントのようなものを持つことができるという仕組みになっているのです｡
‫イベントグラフに移動して見てみると､ ここにいくつかのイベントノードがあり､ そこからスタートすることができます｡
‫この設計図の更新アニメーションがあります｡
‫アニメーションを更新するたびにこのノードから降りると､ 実行ノードが提供され､ 先に進んで状態を取得することができるようになります｡
‫これから行うのは､ この関数が呼び出されるたびに､ ある状態を取得することです｡ ここでは､ get
‫spawn ownerという関数があり､ 先に進んでポーン・オブジェクトを取得するよう指示しています｡
‫この場合はキャラクターで､ キャラクターはそのサブクラスで､ このビープシューターキャラクターになります｡
‫なぜ､ ビープシューターのキャラクターなんだろう？
‫さて､ どうでしょう｡
‫このキャラクターは､ メッシュを選択すると､ ビューポートに移動します｡
‫現在はシンプルなアニメーションを実行していますが､ アニメーションのモードをアニメーション
‫ブループリントの使用に変更し､ アプリのシューティング キャラクターを使用したいと思います｡
‫だから､ これが......オーナーなんです｡
‫そのアニメーションの設計図を使っているのです｡
‫つまり､ 設計図にポーンの持ち主が登場したわけです｡
‫この更新関数でやりたいことは､ 要約すると､ ポーンの動きに関する情報を取得することです｡
‫私たちは､ あなたのスピードはどれくらいですか？
‫動きの角度は？
‫それがこの講義で計算することです｡
‫スピードは一番シンプルだからやるだけです｡
‫角度は､ 次回の講義で紹介するトランスフォームで少し操作する必要がありそうです｡
‫ここで必要なのは､ ポーンの所有者の速度を取得するノードで､ このベクトルを得ることができます｡
‫そして､ そのベクトルの背後から､ その大きさまたは長さを求めたいので､ そのベクトルからドラッグして大きさを検索します｡
‫そして､ ここが巧妙で､ マグニチュードを検索しても､ ベクトルの長さという関数が表示されることに気づきました｡
‫だから､ 明らかにベクトルの長さの代名詞であることがわかる大きさです｡
‫なぜ､ ベクトルそのものではなく､ ベクトルの長さを求めるのでしょうか？
‫なぜなら､ floatを求めるからです｡ 速度ベクトルには､ 速度だけでなく方向も含まれているので､
‫角度を計算するのに必要なのです｡
‫しかし､ それは速度を計算するために必要なものではありません｡
‫そこで､ ここでちょっとしたミニチャレンジをしてみましょう｡
‫どうぞ｡
‫この講義では､ それ以外の課題はありません｡
‫このベクトル長を使って､ 速度を設定してきてください｡
‫そして､ 実行ピンが必要な場合は覚えておいてください｡
‫ブループリントの更新アニメーションでやろうとしているのです｡
‫では､ ビデオを一時停止して､ やってみてください｡
‫では､ お帰りなさい｡
‫そこで､ 設定したいのが速度です｡
‫これをブループリントにドラッグしてスピードを設定すると､ 必要な実行ピンが表示されます｡
‫Blueprint Update アニメーションから取得し､ データ ピンが必要です｡ これは､
‫速度を取得するためのベクトルの長さから来る速度になります｡
‫そのため､ 先に進んで保存し､ コンパイルすることができるはずです｡
‫これは､ 実際には存在しないポーンの所有者から設定しようとしているため､ 速度がゼロにリセットされていることがわかります｡
‫ですから､ 私たちがやりたいことは､ 実際に世界に出て行って､ 自分たちが何を得たかを確認することなのです｡
‫なるほど､ これならずっといい｡
‫ポーンは地面で静止していますが､ 私が動くと､ ポーンは私にスピードを与えてくれます｡
‫また､ コントローラーなどのアナログ入力を使えば､ アナログ入力を変えることで速度が変化するようなことがわかります｡
‫こいつの動く速さを変えればいいんだよ｡
‫さて､ ここで明らかに2つの問題があります｡
‫まず1つ目は､ 角度をずらして移動すると､ ちょうど絶対速度を使っているということです｡
‫ですから､ 私たちのブレンドスペースではその角度を調整することはできません｡
‫それで､ アニメーションがおかしく見えるんです｡
‫もうひとつの問題は､ アニメーションのスピードがゲーム内のキャラクターのスピードと合っていないため､
‫足が滑ってしまうことです｡
‫それは､ 次の講義で修正することも視野に入れています｡
‫素晴らしい内容です｡
‫アニメーションのブループリントを使用して､ アニメーションとゲームプレイをどのように関連付けるべきかを理解していただき､
‫ご自身のゲームに適用していただければと思います｡
‫次回の講義では､ この動きをもう少し自然に見せるために､ これらのアングルをフックアップしていきます｡