‫こんにちは､ ようこそ｡
‫この講義では､ AI Focusに取り組みます｡
‫このように､ Unrealに組み込まれた機能を利用することで､ 私たちの後をついてくるAIキャラクターが､
‫どこに行っても私たちを狙えるようにすることができます｡
‫それでは､ フォーカスの仕組みを見てみましょう｡
‫だから､ 私は現在､ あまりやっていないんです｡
‫そして､ それが何かをするためには､ まずプレイヤーのほうを向くことが出発点になると思います｡
‫そのためには､ AIに備わっている機能､ つまりフォーカルポイントを設定することが有効です｡
‫そこで､ AIコントロールを見て､ セットフォーカスを探すと､ ここにいくつかの関連メソッドがあります｡
‫ひとつはセットフォーカス､ もうひとつはセットフォーカス､ そのすぐ下はクリアフォーカスです｡
‫つまり､ AIコントローラーに､ 特定のポイントにフォーカスするように､ あるいは特定のアクターにフォーカスするように指示することができるのです｡
‫もし後者を選んだ場合､ もし俳優に焦点を当てることを選んだ場合､ その俳優が動けば､
‫その俳優に焦点を当て続けることになります｡
‫一方､ ある一点に集中することを選択した場合は､ その一点に集中し続けることになります｡
‫しかし､ その点がアクターの位置だった場合､ そのアクターが移動しても､ その点は更新されない｡
‫ですから､ 一般的にフォーカルポイントは､ 世界に固定されたものに対して使われ､ 動き回るものに対しては､ ある種の理にかなった役者が使われます｡
‫そして､ この下にあるクリアフォーカス機能は､ 何かに集中するのをやめようということを教えてくれるものです｡
‫そういうことなんですね｡
‫フォーカスを定め､ フォーカスをクリアする｡
‫ここで､ この優先順位という変数がありますが､ これはこれから少し説明します｡
‫しかし､ ここでの考え方は､ 優先順位のレベルが違うということです｡
‫この列挙型は､ デフォルトでゲームプレイに設定されています｡
‫enumの定義を見てみると､ デフォルトの動きとゲームプレイがあり､ 基本的に優先順位の高い順に並んでいることがわかります｡
‫ですから､ ゲームプレイが最も優先されます｡
‫ゲームプレイとして何かを設定すると､ それを見ることになります｡
‫ゲームプレイ優先をクリアしたためにゲームプレイが設定されていない場合は､ どこに行くのか､
‫どこにも移動していない場合は､ デフォルトの優先順位を見るだけで､ どこか遠くの場所にいるだけかもしれません｡
‫ですから､ 警備員が巡回する行動をとっている場合､ 警備員が次に移動する場所を確認するのがデフォルトになります｡
‫デフォルトで見るポイントを設定するとか｡
‫だから､ 自分のこだわりのゾーンへの入り口を見ているとか､ そういうことかもしれませんね｡
‫とにかく､ 優先順位はこんなものです｡
‫というのも､ このゲームプレイ機能は､ 「あそこで何か面白いことが起こっているよ」ということを伝えるために使うことがほとんどだからです｡
‫プレーヤーがいるから､ 先に見ておこう｡
‫そこでまず､ AIコントローラーにbegin playを実装し､ begin playにフォーカスを設定できるようにします｡
‫これは､ この関数がどのように動作するかを示すためのものです｡
‫だからBegin Playは､ 前にも見たことがあると思いますが､ プロテクトされた機能なんです｡
‫そこで､ 保護されたセクションを作成し､ 仮想空洞の再生を開始させる必要があります｡
‫ここでは安全のためにoverrideキーワードを置き､ C++で実装を作成します｡
‫また､ スーパープレーの開始を呼び出したいと思います｡ そうしないと､ 設計図がうまくいかないからです｡
‫これを忘れると､ もしbegin playを作成した後にblueprintがうまくいかないことがあったら､ superに呼び出しているかどうか確認してください｡
‫そして､ この時点で､ ポーンアクタを手に入れ､ それにフォーカスを合わせることです｡
‫ポーンアクターを取得するには､ ゲームプレイ統計ヘッダの関数を使用します｡ このヘッダにカーソルを合わせるか､ control p
‫でゲームプレイ統計を検索すると､ kismet forward slash gameplay statics
‫の下にあることが分かります｡
‫そこで､ シューターIのコントローラーCPに戻り､ それを搭載することにします｡
‫ハッシュインクルードして､ kismet forward slash gameplay staticsとし､ U gameplay
‫staticsを行うことができるようにします｡ この中で､ 私が非常に便利だと思う関数は､ get player pawnで､
‫これはプレーヤーポーンへのポインタとして返します｡
‫そして､ ワールドコンテキストオブジェクトとプレイヤーインデックスを取り込むことでそれを実現します｡
‫この場合は､ ゼロのプレーヤーを探します｡
‫だから､ ポーンをプレイしてゲットワールドをやろう｡
‫そして､ インデックス・ゼロを探し､ これを変数､ ポーンに保存するのです｡
‫どのプレーヤーになるんだろう......みたいな｡
‫だから､ そこに注目したいのです｡
‫だから､ フォーカスを定めてのチャレンジタイムなのです｡
‫ゲームプレイ静的関数の呼び出し､ 設定､ フォーカスを使用して取得したプレイヤーを使って､ さまざまなキャラクターの周りを移動できるかどうか､
‫世界でテストしてみましょう｡
‫彼らはあなたについてくるのでしょうか？
‫彼らの視線はあなたの後を追うだろうか？
‫ビデオを一時停止してご覧ください｡
‫なるほど｡
‫お帰りなさい｡
‫だから､ あまり難しくないといいのですが｡
‫セットフォーカスは親にあるので､ セットフォーカスを呼び出す必要があります｡
‫ここでポインターを探す必要はない｡
‫私たちはフォーカスを定めていますが､ その結果どうなったのでしょうか？
‫優先順位はすでにデフォルトでゲームプレイに設定されているので､
‫基本的にアクターを入れるだけでよく､ いずれにせよ私たちが望んでいたことです｡
‫では､ さっそく構築してみましょう｡
‫そして､ それが終わったら､ Unreal に飛び乗って遊んでみましょう｡
‫なぜかまだこの厄介なスポーンポイントがあるんです｡
‫これを削除して､ 目のキャラクターの近くにスポーンするようにしましょう｡
‫さあ､ どうぞ｡
‫見てみよう､ このキャラクターの周りを少し歩いてみよう､ すると瞬時に､ 私のポーンがどこに導こうと､
‫彼が私のポーンに顔を向けているのがわかるのです｡
‫それが､ いくつかのAIの導入の始まりなんですね｡
‫少ないですが､ 次回の講義ではこれをさらに深くできるように努力します｡
‫現地でお会いしましょう｡