‫こんにちは､ お帰りなさい｡
‫さて､ 戦車とタワーの死を処理する機能はすでに作成しましたが､ 戦車については､ プレイヤーコントローラーにアクセスして入力を無効化し､
‫マウスカーソルを表示しないようにしたため､ いくつかの追加手順が必要になりました｡
‫ここで､ 独自のカスタム・プレーヤー・コントローラ・クラスを作成し､ この処理を行う機能を追加できるようにしたいと思います｡
‫そして､ このクラスに基づいてブループリントを作成し､ 実際にマウスカーソルの表示を開始したときに､
‫どのマウスカーソルを表示するかなど､ プレーヤーコントローラの公開変数にアクセスできるようにしたいと思います｡
‫そこで､ プレイヤーコントローラクラスを作成し､ 入力の有効化・無効化機能を追加します｡
‫そして､ ブループリントを作成し､ ブループリントにマウスカーソルの種類を設定します｡
‫さて､ このクラスを作成することは､ あなたが知っていることです｡
‫そこで､ 課題のプレイヤー・コントローラー・クラスを作成します｡ 新しいC++クラスを作成し､ 親クラスとしてプレイヤー・コントローラーを選択します｡
‫この曲は戦車とかプレイヤーコントローラーとか､ そういう適当な呼び方をしてください｡
‫そして完成したら､ このクラスをベースにしたブループリントを作成します｡
‫さて､ ブループリントができたら､ ゲームモードブループリントでこれをデフォルトのプレイヤーコントローラーとして割り当てます｡
‫ゲームモード､ 設計図そのもので行う｡
‫ビデオを一時停止し､ 今戦車用のプレーヤーコントローラクラスを作成します｡
‫なるほど｡
‫というわけで､ また編集部に戻ってきました｡
‫右クリックで新しいC++クラスをクリックし､ スクロールダウンすると､ プレーヤーコントローラがここにオプションとしてあることがわかります｡
‫そこで､ プレーヤーコントローラーを選択し､ 新しいプレーヤーコントローラーにtune tanksという名前を付けます｡
‫プレイヤー､ コントローラー､ クリックの各クラスを作成します｡
‫そして､ ここに新しいプレイヤー・コントローラー・クラスがあります｡
‫さて､ 次はこれを元に設計図を作成することになります｡
‫エディタに戻り､ こうするようにとは言いませんでしたが､ ブループリント フォルダに Player Controller
‫という名前の新しいフォルダを作成します｡
‫また､ 同じフォルダ構成にしたい場合は､ まだ作成していない場合は今すぐこのフォルダを作成し､ プレーヤー
‫コントローラ ブループリントをこの中に移動させることができます｡
‫ブループリントをあるフォルダから別のフォルダに移動させる方法がわからない場合は､ 非常に簡単です｡
‫設計図が入っているフォルダに行き､ クリックして正しいフォルダにドラッグし､ 「ここに移動」をクリックするのです｡
‫さて､ このフォルダに投影機を移動させたくないので､ コンテンツブラウザのここをクリックして､
‫この動作をキャンセルします｡
‫ということで､ プレイヤーコントローラーのフォルダが出来ました｡
‫右クリックして､ Blueprint Class をクリックし､ この検索で toon tanks, player controller
‫を探し､ そのクラスを選択して Select をクリックします｡
‫これで､ このビープ・アンダースコア・トゥーン・タンク・プレイヤー・コントローラーを呼ぶことができるようになりました｡
‫だから､ 今､ 私はプレーヤーコントローラーを持っています｡
‫あとは､ これをデフォルトのプレイヤーコントローラーとして設定する必要があります｡
‫そこで､ ゲームモードフォルダで､ beep, tune tanks, game modeを開き､ フルブループリントを開いてみます｡
‫編集部 そして､ ここにプレーヤー・コントローラー・クラスがあります｡
‫ドロップダウンをクリックして､ BP tune tanks､ player controllerを選択し､ コンパイルして保存して､
‫そこから閉じますね｡
‫これで､ カスタムプレイヤー・コントローラ・クラスができました｡
‫これに機能を追加する準備が整いました｡
‫つまり､ プレイヤーが戦車を動かすための入力を追加できる状態かどうかを設定できる関数が必要なのです｡
‫あとは､ アクターが死んだときに､ ゲームモードからこれを呼び出す予定です｡
‫そこで､ ここに公開部分を作り､ 機能は無効とすることにします｡
‫そして､ B player enabledというブール値を取ることができる､ このset player enabled stateを単純に呼び出すことにします｡
‫このように､ この関数を呼び出すと､ プレーヤーを有効にしたい場合はtrueを､ 無効にしたい場合はfalseを渡すことができます｡
‫そこで､ この関数をチューンタンク､ プレイヤー､ コントローラーに実装してみましょう｡
‫CP では､ ここに私の関数と､ もちろんここにクラス名が必要です｡
‫つまり､ チューンタンク､ プレーヤー､ コントローラー､ そしてスコープリゾリューションオペレーターということになりますね｡
‫さて､ この関数は非常にシンプルなものになります｡
‫B player enabledの値をチェックすることになりますが､ これは単純なifチェックでできます｡
‫つまり､ Bプレイヤーが有効で､ ポーンにアクセスして入力を有効または無効にしたい場合､ このプレイヤーコントローラが持っているポーンにアクセスする方法は､
‫get pawnという関数を使うということです｡
‫これは､ ポーンと返され､ ポーンクラスは関数を持ちます｡
‫Enable inputとenable inputは､ これまで見てきたようにプレイヤーコントローラが必要なので､ これを渡せばいい｡
‫ポーンのインクルード方法は､ アンリアル・エンジンのポーンに関するドキュメントを参照するか､
‫ポーンを継承したポーン基底クラスを参照することで簡単に確認することができます｡
‫ポーンを継承しているので､ ポーンのヘッダーをコピーして､ ゲームのフレームワークであるスラッシュポーンに含める必要があることがわかりました｡
‫そこで､ バックチューンタンクのプレイヤーコントローラーに注目｡
‫そのincludeをここのトップに貼り付けると､ 赤い四角が消えますね｡
‫つまり､ これはB player enabledがtrueの場合の対処ですが､ ここではLSの場合も必要です｡
‫LSの場合､ get pawnを呼び出します｡ enable inputと同じように､ 入力を無効にするための関数があり､
‫ご想像の通り､ disable inputと呼ばれています｡
‫また､ これにはプレーヤーコントローラーが必要ですが､ これにはパスを通します｡
‫プレイヤーコントローラでは､ マウスカーソルを表示するように設定されているので､ これも設定します｡
‫そして､ プレーヤーを有効にするかどうかで設定したいと思います｡
‫つまり､ B player enabledのブール値が何であれ､ B show mouse cursorをその値に設定するのです｡
‫つまり､ B shoマウスカーソル＝Bプレーヤー有効ということになりますね｡
‫さて､ まだマウスカーソルを表示していませんね｡
‫その辺はこれからですね｡
‫実は､ ゲーム中にマウスカーソルを表示して､ 戦車の狙いがわかるようにしたいんです｡
‫それでは､ 早速ご紹介しましょう｡
‫しかし､ 今のところ､ プレーヤーコントローラにこの素晴らしい関数があるので､ 今､ ゲームモードからこの関数を呼び出して､
‫私が言いたいことをお見せしたいと思います｡
‫ゲームモードに戻り､ アクターが死亡した関数です｡ 入力を無効にして､ マウスカーソルをここに表示するように設定しているのがわかると思います｡
‫というわけで､ 私が欲しいのは
‫この関数を呼び出すと､ ブール値を渡すことができます｡
‫この場合､ falseを渡すと入力無効化関数が呼ばれ､ Bを渡すとマウスカーソルがfalseにセットされます｡
‫そのため､ プレイヤー・コントローラーを返すtank get player controllerを呼び出す代わりに､ ここでその関数を呼び出すだけでよいのです｡
‫そのプレーヤーコントローラーにアクセスできるポインター変数が欲しいですね｡
‫そこで､ ここtune tanks game modesで､ プライベート変数を追加します｡
‫前方に宣言して､ タイプAチューンタンク､ プレーヤー､ コントローラー､ これはポインターです｡
‫そして､ これをチューンタンクのプレイヤーコントローラーと呼びます｡ これをチューンタンクのゲームモードにセットして､
‫ゲームプレイスタティックを使ってプレイを開始することができます｡
‫さて､ ゲームプレイスタティックにプレイヤーコントローラーの取得機能があるのかと思ったら､ その通りでした｡
‫これは､ ワールドコンテキストオブジェクトとプレイヤーインデックスを必要とする便利な静的関数の1つです｡ したがって､
‫ゲームプレイ静的関数用のインクルードをコピーして､ Begin Playの中でこれを呼び出すことができます｡
‫この一番上にゲームプレイ統計がありますが､ これはすでにここで使っているからで､ プレイヤーの取得を呼び出すためにプレイを開始します
‫--｡
‫ここでも同じように､ プレイヤーコントローラーのポインターを設定します｡
‫さて､ これはどうしたらいいかということです｡
‫そこで､ ビデオを一時停止して､ ここでちょっとしたミニチャレンジをしてみましょう｡ チューンタンクの値を設定するだけです｡
‫なるほど｡
‫そこで､ tune tanks, player, controllerと言い､ you gameplay statics get player
‫controllerの結果と等しくなるように設定しています｡ ワールドコンテキストオブジェクトはこれとなり､ プレイヤーのインデックスは9ではなく､
‫0であることが分かっています｡
‫そしてもちろん､ これがプレーヤーコントローラーを返すもので､ チューンタンクのプレーヤーコントローラーを返すものではないことは分かっています｡
‫そこで､ このタンクのときと同じように､ キャスティングを行います｡
‫そこで､ cast to a tune tanks player controllerと言い､ get player controllerの結果をキャストしているのです｡
‫では､ Begin Playの後に､ チューンタンク､ プレイヤーコントローラーを用意します｡
‫そしてここに来て､ プレイヤーコントローラをタンクから直接取得する代わりに､ 変数tune
‫tanks player controllerが有効であることを確認し､ それから作成した関数を呼び出すことができます｡
‫戻って見てみましょう｡
‫set player enabled stateと呼ばれるもので､ ここではゲームモードで入力を無効にしてカーソルを表示しないようにしたいので､
‫このためにfalseを渡すことになります｡
‫つまり､ tune tanks, player, controller, set player enabled stateと言い､ これにはfalseを渡し､ tune tanks, player
‫controllerを使っているので､ tune tanks, player controllerを含める必要があります｡
‫ここでは､ 一番上にチューンタンク､ プレイヤーコントローラーを配置します｡
‫そして今､ このタイプのOCが定義されました｡
‫では､ これをコンパイルしてみましょう｡
‫そして､ これを終える前に行う最後のことは､ プレイヤーコントローラのブループリントに入り､ マウスインターフェイスセクションまでスクロールダウンして､
‫Default Mouse Cursorと書いてあるのを確認することです｡
‫あとはドロップダウンをクリックすれば､ さまざまなカーソルを選択することができます｡
‫そして私は「Crosshairs」を選びます｡
‫今はまだマウスカーソルを表示していませんが､ ゲームを開始したらカーソルを表示する予定です｡
‫その際､ マウスカーソルを見たときにいつも見えるデフォルトの白い矢印ではなく､ 十字線になるようにしたいですね｡
‫そこで､ デフォルトのマウスカーソルを十字線に設定し､ 実際にマウスカーソルを有効にすると､ 十字線が表示されるようになります｡
‫要約すると､ カスタム プレイヤー コントローラ クラスを作成し､ そのクラスに配置した関数で入力を有効化または無効化するために使用しているということです｡
‫また､ この関数を使用して､ 渡されたブール値に基づいてマウスカーソルを表示したり隠したりしています｡
‫そして､ 作成したブループリントで､ マウスカーソルの種類を設定しました｡ ゲーム開始時にマウスカーソルを表示し始めると､
‫十字のマウスカーソルがどのように見えるか､ すぐに分かると思います｡
‫だから素晴らしい仕事だ｡
‫これでプレイヤーコントローラーが完成し､ ゲーム機能の実装を継続する準備が整いました｡
‫では､ 次のビデオでお会いしましょう｡