‫こんにちは｡
‫ようこそ｡
‫この講義では､ コントローラの動きを追加して､ コントローラを使って移動できるようにします（このような動きを見てみましょう）｡
‫ルックアップ率とルックライト率の軸を変えてやってみますが､ なぜそれが必要なのか､ その理由を見てみましょう｡
‫その理由を探るべく､ 潜入してみましょう｡
‫そこで､ コントローラーを使ってシーンを移動できるようにしたいのです｡
‫プレイモードでないときはもうできるんですけどね｡
‫そこで､ これと同じような動きを､ 右スティックでパン､ 左スティックで左右に移動できるようにしたいのです｡
‫また､ 上下することも可能です｡
‫でも､ それは相手がフライングポーンではないので､ できないことなんです｡
‫そこで､ これからやりたいことは､ まず､ 動きのマッピングがしやすいことです｡
‫あとは､ プロジェクトの設定で､ 入力のところにある「エンジン入力」をクリックすれば､ 前方移動軸と右方移動軸を設定することができます｡
‫WとSだけでなく､ 別のマッピングを追加すれば､ ゲームパッドも追加できます｡
‫ゲームパッドの下を見ると､ 左のサムスティックが見えますが､ これは前進のためのY軸にしたいのです｡
‫右の移動は､ またゲームパッドを追加して､ ゲームパッドで､ やはり左スティックです｡
‫しかし､ 今回はX軸とY軸をやっているので､ それが正しい動きなのかどうかを確認することができます｡
‫それでは､ 再生ボタンを押してください｡
‫そのためのショートカットとして､ alt pを使っています｡
‫すると､ 左右は前方に､ 後方は期待通りに動作します｡
‫しかし､ まだマッピングしていないため､ 明らかに回転はうまくいきません｡
‫では､ それに挑戦してみましょう｡
‫設定､ プロジェクト設定､ 入力でもう一度､ 見てみましょう､ 上を見ましょう｡
‫現在､ マウスYを使用しています｡
‫ここに入れるだけでは何か問題があるのでしょうか？
‫例えば､ ゲームパッド､ 右スティック､ そして今回のY軸？
‫まあ､ 最初の試みとしては､ ちょっと遊びに行ってみようか､ ということです｡
‫これなら実は大丈夫と思われるかもしれません｡
‫そこで､ 中に入ってみると､ 動き回ることができるのがわかります｡
‫ええ､ もちろんです｡
‫ちょっと速いけど､ まあまあかな？
‫いいんじゃないですか？
‫まあ､ そうでもないんですけどね｡
‫そしてその理由は､ 最終的にはフレームレートとこれらの軸の働きに集約されるのです｡
‫30フレーム/秒でゲームを動かしているとき､ マウスを画面の左から右へ均等な速度で動かすと､
‫軸の値が10､ 10､ 10となることがあります｡
‫そしてこれは､ 毎回マウスが10単位ずつ右に移動し､ それが毎フレーム同じように行われていることを教えてくれています｡
‫フレームレートを2倍にするとどうなるか？
‫さて､ 突然ですが､ マウスが同じ速度で動いているのは､ プレイヤーが同じ速度で手を動かしているためです｡
‫しかし､ フレームを表示する頻度が高くなり､ 刻みの頻度も高くなると､ 5分の5､
‫5分の5､ 5分の5となるたびに､ 軸からの入力が実際に半分になることになるのです｡
‫つまり､ 速いコンピューターでも遅いコンピューターでも､ 同じ速度で画面をパンすることに変わりはないのですから､
‫素晴らしいことです｡
‫マウスを一定量動かせば､ 同じ量の動きに気づくはずで､ それが私たちの望むところです｡
‫例えば､ アナログコントローラーで右方向にフルスロットルすると､
‫1秒間に30フレームになります｡
‫一人､ また一人と増えていく｡
‫理にかなっているでしょ？
‫60フレーム/秒の場合はどうでしょうか？
‫今でも1本､ 1本､ 1本と出てきます｡
‫でも､ コマ数が増えるから､ もっと増えるんです｡
‫それを直接使ってポーンの動きに影響を与えると､ 2倍のスピード､ 2倍のフレームレートで動くことになり､
‫私たちが望むような動きではありません｡
‫そこで､ ここでフレームレートの独立性を導入したいと思います｡
‫そのためには､ デルタタイムを掛けられるようにする必要があるわけです｡
‫入力軸を利用して､ 回転速度を調節するのに役立ちそうですね｡
‫そこで､ ちょっとだけ取り入れるといい｡
‫でも､ どういうことかというと､ 回転率の変数みたいなものが必要なんです｡
‫そのために新しいプロパティを作成し､ どこでも編集できるようにし､
‫フロートにして回転率にします｡
‫今度は､ 上も左も右も同じ回転数にしてみます｡
‫その両方に別々の変数を用意すればいいのです｡
‫それに､ ここでは回転率の良し悪しがよくわからないんです｡
‫フライングガス・ヘックスを
‫ここでは関係する単位が全く分からないので､ 先に10とします｡
‫でも､ そのうちわかるよ｡
‫速すぎるかもしれませんね｡
‫遅すぎるのでは？
‫ブループリントで調整できますので､ 先に進んで保存しておきます｡
‫ちなみにC++のAlt Oで切り替えて､ 移動の区別がつくように新しいタイプの軸を用意したいところです｡
‫右は､ マウス､ 直接の動きと移動の比較です｡
‫そうだろ？
‫というか申し訳ないことに､ 見た目が｡
‫そうですね､ これは率ですね｡
‫そこで､ プロジェクト設定に移動して､ ゲームパッドの左手親指を移動にマッピングする代わりに､
‫これを行うことにします｡
‫右､ すみません､ 左のサムスティックではなく､ 右のサムスティックが上を見るようにマッピングされているんです｡
‫その軸を削除して､ 新しい軸を追加して､ その軸が外観になるようにしてください｡
‫上へ
‫そうですね｡
‫そして､ これはゲームパッドを取り込むのですよね？
‫ゲームパッドですか､ そうですか｡
‫Y軸はルックアップなので､ 正の方を使うべきだと言っているからです｡
‫そこで､ これをマッピングする必要があるのですが､ 広告コントローラに直接マッピングするのはやめましょう｡
‫レートを計算し､ そのレートをフレームレートに依存しないようにするために､ ちょっとした計算が必要だからです｡
‫そこで､ オルトゼロに移動して､ 自分自身でルックアップを作成することにします｡
‫そして､ 右上に見えるように作成し､ 先に進んでこのコントロールシフトを作成するつもりです｡
‫P そして､ 実装プラグインを使用しています｡
‫ルックアップ・レート実装をやってみよう｡
‫軸の値が入るようになった｡
‫それは素晴らしいことです｡
‫次に､ プレーヤー入力コンポーネントのセットアップで､ このコンポーネントが呼び出されることを確認します｡
‫そこで､ ここに新しい行を作り､ 見た目を複製してみましょう｡
‫なるほど､ ルックアップということですね｡
‫右､ そうしてコピー＆ペーストするように｡
‫ルックアップ・レートを呼び出す関数への完全修飾されたリファレンス｡
‫それから､ 基本的に最後に呼び出したいのは､ コントローラ入力､ ピッチ､ コントローラ､ ピッチ入力を追加することです｡
‫しかし､ これには2つのことを掛け合わせたい｡
‫だから､ アクセス値は0から1の間の値で入ってくる｡
‫そのため軸値にレート回転数を掛けた場合｡
‫そうすると､ 出てくるのは速度ですが､ 実は欲しいのは距離なんです｡
‫マウスを動かすと､ 一定の距離で移動するように､ 毎フレーム､ 移動しています｡
‫それが入ってきていたのです｡
‫この速度を距離に換算してみたい｡
‫昔､ 数学の授業で､ 速度から距離を求めるには､ 時間を掛け合わせる必要があったのを覚えているだろうか｡
‫だから､ デルタ秒を世界から得ることでそれを実現しているのです｡
‫さて､ デルタ秒とは何でしょうか？
‫それが､ 最後の1フレームにかかった時間です｡
‫つまり､ フレームレートの逆バージョンみたいなものですね｡
‫1フレームにかかる時間は､ この動きを適用するのに必要な時間なので､
‫素晴らしいことです｡
‫つまり､ 速度があって､ その速度を適用するのに必要な時間がある､ と考えればいいのです｡
‫これは､ 基本的にコントローラーのピッチ入力に適用したい動作量を示しています｡
‫だから､ それを望んでいるのです｡
‫レベルを取得したいので､ まずは身の回りのワールドを取得します｡
‫そして､ 矢印関数を使ってデルタ秒を取得します｡ これは､ 最後のフレームで経過した時間を取得することを意味し､
‫現在の時点におけるフレームレートの近似値を得ることができます｡
‫なぜ動作入力で同じことをしないのかと思われるかもしれませんが､ 動作入力では､
‫そこで広告入力をすると､ すでにそれが実際の動作量ではなく､ レートであると仮定されてしまうからです｡
‫だから､ この計算をすでにやってくれているんです｡ 基本的にボンネットの中で､ ファイルを保存して､ アンリアルでコンパイルして､
‫この中のどれかに価値があるかどうかを確認するんです｡
‫それではプレイに向かい､ コントローラーの入力を使ってみます｡
‫これでよしとしよう｡
‫わりとゆっくり上がったり下がったりしています｡
‫しかし､ このデルタタイムを利用することで､ 完全にフレームレートに依存しなくなることを期待しています｡
‫そこで､ やっていただきたいのは､ ルックライトレートを導入してくることです｡
‫右を見るときにも､ 上を見るときと同じ方法を繰り返し､ スピードを微調整して､ 本当に遅くならないようにし､
‫実際にレベル内を移動するのに使えるようにします｡
‫なるほど｡
‫お帰りなさい｡
‫そこで､ まず最初に､ プロジェクトの設定で新しい軸のマッピングを作成しました｡
‫今回も見た目で勝負だ｡
‫そうだろ？
‫そうですね｡
‫そうそうどんな口ぶりなのか､ みたいな｡
‫それから､ ゲームパッドを買いに行くんです｡
‫今回の右とX軸､ これがマッピングの対象になるんです｡
‫そして､ 今度はシューターヘッダーファイルに移動します｡
‫ルックアップレートを複製するのです｡
‫そして､ 左側にあるファイルをお見せします｡
‫ルックアップ・レートの代わりに､ ルックライト・レート・コントロール・シフト・pクリエイトの実装を行い､
‫ほとんど同じコードと同じ乗算で､ 速度から移動距離の量に変換します｡
‫その姿です｡
‫そうか､ そうか｡
‫ルックライトレートは､ プレイヤー入力コンポーネントのセットから呼び出すか､
‫または軸が実際に操作されているときに呼び出す必要があります｡
‫そこで､ ルックアップ・レートではなく､ ここに別の軸を追加することにします｡
‫ルックライトレートになりそうです｡
‫そして､ その参照を関数にコピーします｡ その前にアンパサンドを､ そして文字に完全修飾したイシューを忘れないでください｡
‫コロン
‫コロン､ 右のレートを見てください｡
‫先に進んで､ そのファイルとhead of fileの両方を保存しましょう｡
‫プロジェクトに戻り､ 私がここでコンパイルをヒットさせたままにしておいたplayを終了してください｡
‫飛び込みで遊べるようにしないとね｡
‫だから
‫上下はゆっくり､ 左右はゆっくり作業しています｡
‫なかなか思うようにいきませんね｡
‫プロジェクトの設定を確認しましょう｡
‫だから､ 私たちのルック｡
‫そうですね｡
‫大丈夫そうだ｡
‫右手親指
‫サムスティックX軸｡
‫それを確認しよう｡
‫それがすべて､ C++に正しくバインドされた軸の見え方に通じているのです｡
‫そうか､ そうか｡
‫それは､ あなたの入力を呼び出すために順番に正しいレート関数またはシームを呼び出しています｡
‫ダナ､ 何があったの?
‫もう一度リコンパイルを押して､ もう一度再生を押すだけです｡
‫時には､ こんなことも必要です｡
‫しかし､ 今は左右を見ることが上下に働いており､ とてもとても遅いペースではありますが､ 動いているのです｡
‫そこで､ キャラクターの設計図に手を加えてみることにします｡
‫VPのシューターキャラクターを見つけに行こう｡
‫彼の設計図を開いてみてください｡
‫そして､ 下にスクロールして回転数を求めます｡ 10倍してみましょう｡
‫10倍速にしてみて､ その中間で納得のいく値を探そう｡
‫これは常に､ まず桁を変えてみることで値を見つけることができる一つの方法です｡
‫まあ､ その方がよっぽど正しい球筋なんですけどね｡
‫ちょっと繊細すぎるかもしれないので､ 半分くらいに叩いておくかな｡
‫今回は50本くらいで挑戦してみてください｡
‫500ではなく､ 50です｡
‫試してみよう
‫再生ボタンを押して､ スティックを動かしてみる｡
‫それが､ より自然に感じられるようになりました｡
‫この2つのちょうど中間くらいがいいかもしれませんね｡
‫だから､ その間に入る｡
‫今回も170まで行くのではなく､ 70くらいが適正なレートかもしれませんね｡
‫金メダルかどうか､ 見てみよう｡
‫はい､ そう思います｡
‫70というのは､ 私が動き回るのにちょうどいい率になると思うんです｡
‫もちろん､ このようなことは､ 多くのゲームでは設定でいじることができたり､ プレイヤーがいじることができたりするものなのですが｡
‫それを調べるつもりはない｡
‫これはこのセクションの範囲外ですが､ 自分のゲームでユーザーに公開したいと思う可能性があるものです｡
‫かっこいい｡
‫その講義の中で､ コントローラ入力とマウス入力の違いや､ 絶対的な動きではなく､
‫レートを扱う必要があることを見てきました｡
‫そこで､ 次回の講義では､ 私がずっとほのめかしていた三人称視点カメラについて見ていきたいと思います｡
‫現地でお会いしましょう｡