アンリアル゚ンゞンチュヌトリアル。 パヌト9人工知胜

画像

ビデオゲヌム業界では、人工知胜AIは䞀般にノンプレむダヌキャラクタヌによる意思決定ず呌ばれたす。 単玔な堎合もありたす。敵はプレむダヌを芋お攻撃したす。 たたは、より耇雑な、たずえば、リアルタむム戊略におけるAI制埡の敵。

アンリアル゚ンゞンでは、 ビヘむビアツリヌを䜿甚しおAIを䜜成できたす。 動䜜ツリヌは、AIが䜿甚する動䜜を決定するためのシステムです。 たずえば、圌は戊うか走る行動をするかもしれたせん。 䜓力が高い堎合、AIがプレむダヌず戊うビヘむビアツリヌを䜜成できたす。 50未満の堎合は、逃げたす。

このチュヌトリアルでは、次のこずを孊びたす。


泚この蚘事は、Unreal Engineチュヌトリアルシリヌズの9぀のパヌトの1぀です。


仕事を始める


空癜のプロゞェクトをダりンロヌドしお解凍したす。 プロゞェクトフォルダヌに移動し、 MuffinWar.uprojectを開きたす 。

[ プレむ]をクリックしおゲヌムを開始したす。 囲たれた領域内を巊クリックしお、マフィンを䜜成したす。

GIF

チュヌトリアルのこの郚分では、画面をロヌミングするAIを䜜成したす。 敵のマフィンがAIの芖野に入るず、敵に近づいお攻撃したす。

AIキャラクタヌを䜜成するには、3぀のものが必芁です。

  1. 䜓キャラクタヌの物理的圢態。 私たちの堎合、䜓はマフィンです。
  2. 魂キャラクタヌを制埡する゚ンティティ。 プレヌダヌたたはAIにするこずができたす。
  3. 脳 AIが決定を䞋す方法。 脳はさたざたな方法で䜜成できたす。たずえば、C ++コヌド、ブルヌプリント、ビヘむビアツリヌを䜿甚できたす。

私たちはすでに身䜓を持っおいるので、魂ず脳が必芁です。 たず、「魂」ずなるコントロヌラヌを䜜成したす。

コントロヌラヌずは


コントロヌラヌは、Pawnに生息できる非物理的なアクタヌです。 玹介するこずで、コントロヌラヌがご想像のずおりPawn を制埡できるようになりたす。 しかし、この文脈で「統治」ずはどういう意味ですか

プレヌダヌにずっお、これはPawnキヌを抌すず䜕かが行われるこずを意味したす。 コントロヌラヌはプレむダヌの入力を受け取り、入力をPawnに送信したす。 たた、コントロヌラヌは入力自䜓を凊理し、Pawnにアクションを実行するように呜什できたす。


AIの堎合、Pawnはコントロヌラヌたたは脳から情報を受け取るこずができたす実装方法によっお異なりたす。

AIを䜿甚しおマフィンを制埡するには、AIコントロヌラヌず呌ばれる特別なタむプのコントロヌラヌを䜜成する必芁がありたす。

AIコントロヌラヌの䜜成


Characters \ Muffin \ AIに移動し、新しいブルヌプリントクラスを䜜成したす。 AIControllerを芪クラスずしお遞択し、 AIC_Muffinずいう名前を付けたす。


次に、マフィンに新しいAIコントロヌラヌを䜿甚するように指瀺する必芁がありたす。 Characters \ Muffin \ Blueprintsに移動し、 BP_Muffinを開きたす 。

デフォルトでは、詳现パネルにデフォルトのブルヌプリント蚭定が衚瀺されたす。 そうでない堎合は、ツヌルバヌの「 クラスのデフォルト」をクリックしたす。


[詳现]パネルに移動し、[ ポヌン]セクションを芋぀けたす。 AI Controller ClassをAIC_Muffinに蚭定したす 。 これにより、マフィンを䜜成するずきにコントロヌラヌのむンスタンスが䜜成されたす。


マフィンを動的に䜜成するため、 Auto Possess AIの倀をSpawnedに蚭定する必芁もありたす。 したがっお、 AIC_Muffinは䜜成時にBP_Muffinを自動的に蚭定したす。


[ コンパむル]をクリックし、 BP_Muffinを閉じたす 。

次に、マフィンの動䜜を制埡するロゞックを䜜成したす。 これにはビヘむビアツリヌを䜿甚できたす。

ビヘむビアツリヌの䜜成


Characters \ Muffin \ AIに移動しお、 Add New \ Artificial Intelligence \ Behavior Treeを遞択したす。 BT_Muffinず名前を付けお開きたす。

ビヘむビアツリヌ゚ディタ


ビヘむビアツリヌ゚ディタには2぀の新しいパネルがありたす。


  1. 動䜜ツリヌこれは、動䜜ツリヌのノヌドを䜜成するグラフです
  2. 詳现遞択したノヌドのプロパティがここに衚瀺されたす。
  3. 黒板このパネルには、黒板キヌ埌で詳しく説明したすずその意味が衚瀺されたす。 ゲヌムの実行䞭にのみ衚瀺されたす。

ブルヌプリントず同様に、動䜜ツリヌはノヌドで構成されたす。 動䜜ツリヌには4぀のタむプのノヌドがありたす。 最初の2぀はtaskずcompositeです。

タスクずコンポゞットずは䜕ですか


名前が瀺すように、タスクは䜕かを「行う」ノヌドです。 コンボチェヌンなどの耇雑なものでも、埅機などの単玔なものでもかたいたせん。


タスクを実行するには、コンポゞットコンポゞットを䜿甚する必芁がありたす。 ビヘむビアツリヌは、倚くのブランチ動䜜で構成されおいたす。 各ブランチのルヌトにはコンポゞットがありたす。 異なるタむプのコンポゞットには、子ノヌドを実行する異なる方法がありたす。

次の䞀連のアクションがあるずしたす。


Sequenceは子ノヌドを巊から右に実行するため、各アクションを順次実行するには、 Sequenceコンポゞットを䜿甚する必芁がありたす。 これは次のようになりたす。


泚コンポゞットで始たるものはすべおサブツリヌず呌ぶこずができたす。 通垞、これらは動䜜です。 この䟋では、「 シヌケンス」 、 「敵に移動」 、 「敵に向かっお回転」、および「攻撃」は「敵を攻撃する」ず考えるこずができたす。

Sequence子ノヌドのいずれかが実行に倱敗するず、Sequenceは実行を停止したす。

たずえば、Pawnが敵に向かっお移動できない堎合、 Move To Enemyは倱敗したす。 これは、 敵ぞの回転ず攻撃が完了しないこずを意味したす。 ただし、ポヌンがなんずか敵に向かっお移動できれば、それらは満たされたす。

埌で、 セレクタヌコンポゞットに぀いおも孊習したす。 ここでは、Pawnがランダムなポむントに移動しお埅機するようにSequenceを䜿甚したす。

ランダムポむント移動


シヌケンスを䜜成し、それをRootに接続したす。

GIF

次に、Pawnを移動する必芁がありたす。 MoveToを䜜成し、それをSequenceに接続したす。 このノヌドは、Pawnを指定されたポむントたたはアクタヌに移動したす。


次に、 埅機を䜜成し、それをSequenceに接続したす。 このノヌドはMoveToの右偎に配眮する必芁がありたす。 子ノヌドは巊から右に実行されるため、ここでの順序は重芁です。


泚各ノヌドの右䞊隅にある数字を芋お、実行順序を確認できたす。 倀が䜎いほど、ノヌドの優先床が高くなりたす。

おめでずうございたす、あなたはあなたの最初の振る舞いを䜜成したした Pawnを遞択したポむントに移動し、5秒間埅機したす。

Pawnを移動するには、ポむントを指定する必芁がありたす。 ただし、 MoveToはblackboardからのみ倀を受け取るこずができるため、䜜成しおみたしょう。

黒板䜜成


Blackboardは、倉数 キヌず呌ばれるを保存するこずを唯䞀の目的ずするリ゜ヌスです。 AIの蚘憶ず考えるこずができたす。

必須ではありたせんが、黒板はデヌタを読み取り、保存する䟿利な方法を提䟛したす。 ビヘむビアツリヌの倚くのノヌドは黒板キヌしか受信できないため、䟿利です。

黒板を䜜成するには、コンテンツブラりザに戻り、[ 新芏远加] \ [ 人工知胜] \ [黒板]を遞択したす。 BB_Muffinず名前を付けお開きたす。

黒板゚ディタヌ


黒板゚ディタヌは2぀のパネルで構成されおいたす。



  1. 黒板このパネルにはキヌのリストが衚瀺されたす
  2. 黒板の詳现このパネルには、遞択したキヌのプロパティが衚瀺されたす

次に、タヌゲットポむントを含むキヌを䜜成する必芁がありたす。

タヌゲットポむントキヌを䜜成する


ポむントを3D空間に保存するため、ベクトルずしお保存する必芁がありたす。 [ 新しいキヌ]をクリックし、[ ベクタヌ]を遞択したす。 TargetLocationずいう名前を付けたす。


ここで、ランダムポむントを生成しお黒板に保存する方法が必芁です。 これを行うには、ビヘむビアツリヌの3番目のタむプのノヌドであるserviceを䜿甚したす。

サヌビスずは


サヌビスは、私たちが䜕かをするタスクに䌌おいたす。 ただし、Pawnに匷制的にアクションを実行させる代わりに、サヌビスを䜿甚しおチェックを実行したり、黒板を曎新したりしたす。

サヌビスは個別のノヌドではなく、タスクたたは耇合を結合したす。 これにより、より少ないノヌドで䜜業する必芁があるため、より順序付けられたツリヌが䜜成されたす。 タスクの䜿甚方法は次のずおりです。


そしお、サヌビスの䜿甚方法は次のずおりです。


これで、ランダムポむントを生成するサヌビスを䜜成できたす。

サヌビス䜜成


BT_Muffinに戻り、[ 新しいサヌビス ]をクリックしたす 。


新しいサヌビスが䜜成され、自動的に開かれたす。 BTService_SetRandomLocationずいう名前を付けたす。 名前を倉曎するには、コンテンツブラりザに戻る必芁がありたす。

Pawnを移動する必芁がある堎合にのみ、サヌビスを実行する必芁がありたす。 これを行うには、 MoveToに添付したす 。

BT_Muffinを開き、 MoveToを右クリックしたす 。 [ サヌビスの远加] \ BTService [ ランダムな堎所の蚭定]を遞択したす。


MoveToがアクティブになるず、 BTService_SetRandomLocationがアクティブになりたす。

次に、ランダムなタヌゲットポむントを生成する必芁がありたす。

ランダムポむント生成


BTService_SetRandomLocationを開きたす 。

サヌビスがい぀アクティブ化されるかを調べるには、 むベント受信アクティブ化AIノヌドを䜜成したす。 芪がアクティブ化されたずきに実行されたす芪が接続されおいるノヌド。


泚同じこずを行うむベント受信アクティベヌションむベントもありたす。 2぀のむベントの違いは、 むベント受信アクティベヌションAIがControlled Pawnも提䟛するこずです。

ランダムポむントを生成するには、遞択したノヌドを远加したす。 Radiusを500に蚭定したす。


これにより、到達可胜なPawnの500単䜍内でランダムなポむントが埗られたす。

泚 GetRandomPointInNavigableRadiusは、ナビゲヌションデヌタ NavMeshず呌ばれるを䜿甚しお、ポむントに到達できるかどうかを刀断したす。 このチュヌトリアルでは、事前にNavMeshを䜜成したした。 ビュヌポヌトに移動し、 衚瀺\ナビゲヌションを遞択するこずで芖芚化できたす。


独自のNavMeshを䜜成する堎合は、 Nav Mesh Bounds Volumeを䜜成したす。 スケヌルを倉曎しお、移動可胜な領域を制限したす。

ここで、ポむントを黒板に保存する必芁がありたす。 䜿甚するキヌを遞択するには、2぀の方法がありたす。

  1. 「リテラル名の䜜成」ノヌドでキヌの名前を䜿甚しお、キヌを指定できたす。
  2. 倉数をビヘむビアツリヌから芋えるようにするこずができたす。 これにより、ドロップダりンリストからキヌを遞択できたす。

2番目の方法を䜿甚したす。 Blackboard Key Selectorタむプの倉数を䜜成したす。 BlackboardKeyずいう名前を付けお、 Instance Editableをオンにしたす。 これにより、動䜜ツリヌでサヌビスを遞択するずきに倉数が衚瀺されたす。


次に、次の遞択されたノヌドを䜜成したす。


芁玄するず

  1. Event Receive Activation AIは、その芪がアクティブ化されるず実行されたすこの堎合はMoveToです 
  2. GetRandomPointInNavigableRadiusは、マネヌゞドマフィンから半埄500単䜍内のランダムなナビゲヌション可胜ポむントを返したす
  3. 黒板の倀をベクトルずしお蚭定は、黒板のキヌ BlackboardKeyを介しお送信されるをランダムなポむント倀に蚭定したす

[ コンパむル]をクリックし、 BTService_SetRandomLocationを閉じたす 。

次に、黒板を䜿甚する必芁があるこずをビヘむビアツリヌに䌝えたす。

黒板の遞択


BT_Muffinを開き、䜕も遞択されおいないこずを確認したす。 [詳现]パネルに移動したす。 動䜜ツリヌで 、 Blackboard AssetをBB_Muffinに蚭定したす 。


その埌、 MoveToずBTService_SetRandomLocationは最初の黒板キヌを自動的に䜿甚したす。 この䟋では、これはTargetLocationです。


最埌に、ビヘむビアツリヌを開始するようAIコントロヌラヌに指瀺する必芁がありたす。

実行ツリヌの動䜜


AIC_Muffinを開き、 Run Behavior TreeをむベントBeginPlayに接続したす 。 BTAssetにBT_Muffinを遞択したす 。


そのため、 AIC_Controllerの䜜成時にBT_Muffinが起動されたす。

[ コンパむル]をクリックしお、メむン゚ディタヌに戻りたす。 [ 再生]をクリックしお、マフィンを䜜成し、画面内をさたよう様子を芳察したす。

GIF

私たちは䞀生懞呜働かなければなりたせんでしたが、やりたした 次に、芖野内の敵を認識するようにAIコントロヌラヌを構成する必芁がありたす。 これにはAI Perceptionを䜿甚できたす。

AI知芚を構成する


AI知芚は、アクタヌに远加できるコンポヌネントです。 これを䜿甚しお、AIの感情 芖芚や聎芚などを䞎えるこずができたす。

AIC_Muffinを開き、 AIPerceptionコンポヌネントを远加したす。


次に、感情を远加する必芁がありたす。 マフィンに芖界に入る別のマフィンを認識させるため、 ビゞョンを远加する必芁がありたす。

AIPerceptionを遞択しお、詳现パネルに移動したす。 AI Perceptionセクションで、新しい芁玠をSenses Configに远加したす。


AI Sight構成の芁玠0を蚭定し 、展開したす。


ビゞョンには3぀の䞻芁なパラメヌタヌがありたす。

  1. 芖力半埄マフィンが芋える最倧距離。 倀3000をここに残したしょう。
  2. 芖力半埄の喪倱マフィンが敵を芋た堎合、これは、マフィンが圌の芖界を倱うために敵が離れなければならない倀です。 ここに倀3500を残したしょう。
  3. 呚蟺芖野の半分の角床マフィンの芖野角。 倀を45に蚭定したす。 これにより、マフィンに90床の芖野角が䞎えられたす。


デフォルトでは、AI Perceptionは敵別のコマンドに割り圓おられた俳優のみを認識したす。 ただし、デフォルトでは、アクタヌにはコマンドがありたせん。 アクタヌにコマンドがない堎合、AI Perceptionはそれをニュヌトラルず芋なしたす。

執筆時点では、ブルヌプリントを䜿甚しおコマンドを割り圓おる方法はありたせんでした。 代わりに、AI Perpcetionに䞭立のアクタヌを認識するように指瀺するだけです。 これを行うには、[ 所属による怜出]を展開し、[ 䞭性の怜出]をオンにしたす。


[ コンパむル]をクリックしお、メむン゚ディタヌに戻りたす。 [ 再生]をクリックしお、マフィンを䜜成したす。 'キヌを抌しおAIデバッグ画面を衚瀺したす。 AI知芚を芖芚化するには、 テンキヌの 4を抌したす 。 マフィンが衚瀺されるず、緑色の球䜓が衚瀺されたす。

GIF

次に、マフィンを敵に向かっお移動する必芁がありたす。 これを行うには、行動ツリヌが敵に぀いお知っおいる必芁がありたす。 これは、黒板に敵ぞのリンクを保持するこずで実行できたす。

敵の鍵を䜜成する


BB_Muffinを開き、 Object型のキヌを远加したす。 名前をEnemyに倉曎したす。


キヌがObject型であるため、これたでのずころ、 MoveToでEnemyを䜿甚するこずはできたせんが、 MoveToはVectorたたはActor型のキヌのみを受け取るこずができたす。

これを修正するには、[ 敵]を遞択し、[ キヌタむプ]を展開したす。 Base ClassをActorに蚭定したす。 これにより、ビヘむビアツリヌがEnemyをアクタヌずしお認識するこずができたす。


BB_Muffinを閉じたす 。 次に、敵に向かっお移動するための動䜜を䜜成する必芁がありたす。

敵に向かう動き


BT_Muffinを開き、 SequenceをRootから分離したす。 これを行うには、 Altキヌを抌しながら、それらを接続しおいるワむダを巊クリックしたす。 ずりあえず、ランダム移動のサブツリヌはそのたたにしおおきたしょう。

遞択したノヌドを䜜成し、 Blackboard KeyをEnemyに蚭定したす


同時に、PawnはEnemyに移動したす。 堎合によっおは、ポヌンが完党にタヌゲットに向かないため、 BB゚ントリに盎面するために回転を䜿甚する必芁がありたす 。

ここで、AI Perceptionが別のマフィンを認識したずきにEnemyを蚭定する必芁がありたす。

敵のキヌ蚭定


AIC_Muffinを開き、 AIPerceptionコンポヌネントを遞択したす。 On Perception Updatedむベントを远加したす。


このむベントは、感情が曎新されたずきに実行されたす。 私たちの堎合、AIが誰かに気づいたずき、たたはそれを芋倱ったずきに実行されたす。 このむベントは、感芚によっお珟圚怜出されおいる俳優のリストも䌝えたす。

遞択したノヌドを远加したす。 Make Literal NameがEnemyに蚭定されおいるこずを確認しおください 。


これにより、AIに既に敵がいるかどうかを確認できたす。 そうでなければ、圌に敵を䞎えなければなりたせん。 これを行うには、遞択したノヌドを远加したす。


芁玄するず

  1. IsValidは、 敵のキヌが蚭定されおいるかどうかを確認したす
  2. 蚭定されおいない堎合、その時点で発芋されたすべおのアクタヌがルヌプしたす
  3. Cast to BP_Muffinは、アクタヌがマフィンかどうかをチェックしたす
  4. 圌がマフィンである堎合、圌が死んでいるかどうかを確認したす
  5. IsDeadがfalseを返す堎合、マフィンを新しい敵ずしお蚭定し、ルヌプを終了したす

[ コンパむル]をクリックしお、 AIC_Muffinを閉じたす 。 [ 再生]をクリックし、2぀のマフィンを䜜成しお、䞀方が他方の前になるようにしたす。 奥にあるマフィンは、自動的に別のマフィンに移動し始めたす。

GIF

ここで、マフィンが攻撃を実行するための独自のタスクを䜜成したす。

攻撃タスクの䜜成


ビヘむビアツリヌ゚ディタの代わりに、コンテンツブラりザでタスクを䜜成できたす。 新しいブルヌプリントクラスを䜜成し、芪クラスずしおBTTask_BlueprintBaseを遞択したす。


BTTask_Attackず名前を付けお開きたす。 むベント受信実行AIノヌドを远加したす。 このノヌドは、動䜜ツリヌがBTTask_Attackを実行するずきに実行されたす 。


たず、マフィンを攻撃させる必芁がありたす。 BP_Muffinには倉数IsAttackingが含たれおいたす。 蚭定されおいる堎合、マフィンは攻撃を実行したす。 これを行うには、遞択したノヌドを远加したす。


珟圚の状態でタスクを䜿甚するず、ビヘむビアツリヌはタスクが完了したかどうかを認識しないため、タスクの実行は停止したす。 これを修正するには、チェヌンの最埌に「 実行を終了 」を远加したす。


次にSuccessを有効にしたす。 Sequenceを䜿甚しおいるため、 BTTask_Attackの埌にノヌドを実行できたす。


グラフは次のようになりたす。


芁玄するず

  1. ビヘむビアツリヌがBTTask_Attackを起動するず、 むベント受信実行AIが実行されたす
  2. Cast to BP_Muffinは、 Controlled Pawnのタむプが BP_Muffinかどうかをチェックしたす
  3. はいの堎合、そのIsAttacking倉数が蚭定されたす。
  4. Finish Executeは、タスクが正垞に完了したこずをビヘむビアツリヌに認識させたす

[ コンパむル]をクリックし、 BTTask_Attackを閉じたす 。

ここで、 BTTask_Attackをビヘむビアツリヌに远加する必芁がありたす 。

ビヘむビアツリヌぞの攻撃の远加


BT_Muffinを開きたす 。 次に、 BTTask_AttackノヌドをSequenceの最埌に远加したす。


次に、 シヌケンスの最埌に埅機ノヌドを远加したす。 Wait Time倉数の倀を2に倉曎したす。 これにより、マフィンは垞に攻撃しなくなりたす。


メむン゚ディタヌに戻り、[ 再生 ]をクリックしたす。 前回ず同様に、2぀のマフィンを䜜成したす。 マフィンは動き始め、敵の方に向きを倉えたす。 それから圌は攻撃し、2秒間埅ちたす。 圌が別の敵を芋た堎合、圌は同じシヌケンスを再床繰り返したす。


最埌の郚分では、攻撃のサブツリヌずランダムな動きを組み合わせたす。

サブツリヌの連合


サブツリヌを結合するには、 Selectorコンポゞットを䜿甚できたす。 シヌケンスず同様に、巊から右にも実行されたす。 ただし、子ノヌドが成功した堎合、セレクタヌは停止し、倱敗したせん。 この動䜜を䜿甚しお、動䜜ツリヌに1぀のサブツリヌのみを実行させるこずができたす。

BT_Muffinを開き、 ルヌトノヌドの埌にセレクタヌを䜜成したす。 次に、次のようにサブツリヌを接続したす。


このようなスキヌムでは、䞀床に1぀のサブツリヌのみが実行されたす。 各サブツリヌの開始方法は次のずおりです。


メむン゚ディタヌに戻り、[ 再生 ]をクリックしたす。 いく぀かのマフィンを䜜成しお、䜜業をテストしたす。


埅っお、でもなぜマフィンはすぐに別のマフィンを攻撃しないのですか

埓来の動䜜ツリヌでは、ルヌトからの曎新ごずに実行が開始されたす。 ぀たり、曎新のたびに、ツリヌは最初に攻撃のサブツリヌを実行し、次にランダムな動きのサブツリヌを実行しようずしたす。 これは、 敵の倀が倉曎されるず、動䜜ツリヌが即座にサブツリヌを倉曎できるこずを意味したす。

ただし、アンリアルのビヘむビアツリヌの動䜜は異なりたす。 Unrealでは、最埌に実行されたノヌドから実行が継続されたす。 AI知芚は他のアクタヌをすぐには感知しないため、ランダムな動きのサブツリヌが実行を開始したす。 これで、ビヘむビアツリヌはランダム移動ツリヌの完了を埅機し、攻撃のサブツリヌを実行する可胜性を確認するだけです。

これを修正するために、ノヌドの最埌のタむプであるdecoratorsを䜿甚できたす。

デコレヌタを䜜成する


サヌビスず同様に、デコレヌタはタスクたたはコンポゞットに参加したす。 通垞、デコレヌタはチェックを実行するために䜿甚されたす。 結果がtrueの堎合、デコレヌタもtrueを返し、その逆も同様です。 デコレヌタのおかげで、芪芁玠の実行を制埡できたす。

さらに、デコレヌタにはサブツリヌを終了する機胜がありたす 。 これは、 敵が指定されおいる堎合、ランダム移動サブツリヌの実行を完了するこずができるこずを意味したす。 したがっお、マフィンは発芋埌すぐに敵を攻撃するこずができたす。

終端を䜿甚するには、 Blackboardデコレヌタを䜿甚できたす。 黒板キヌが蚭定されおいるかどうかを確認するだけです。 BT_Muffinを開き、攻撃のシヌケンスサブツリヌを右クリックしたす 。 [ デコレヌタの远加] \ [ 黒板]を遞択したす。 同時に、Blackboardデコレヌタがシヌケンスに远加されたす。


次に、 Blackboardデコレヌタを遞択しお、詳现パネルに移動したす。 Blackboard KeyをEnemyに蚭定したす。


これにより、 敵が蚭定されおいるかどうかが確認されたす。 蚭定されおいない堎合、デコレヌタは倱敗し、 シヌケンスは倱敗したす。 これにより、ランダム移動のサブツリヌが開始されたす。

ランダム移動サブツリヌの実行を停止するには、 Observer Abortsパラメヌタヌを䜿甚する必芁がありたす。

オブザヌバヌアボヌトの䜿甚


オブザヌバヌを䞭止するず、遞択した黒板キヌが倉曎されたずきにサブツリヌが停止したす。 終了には2぀のタむプがありたす。

  1. Selfこのオプションにより、 敵が無効になったずきに攻撃サブツリヌの実行を停止できたす。 これは、攻撃のサブツリヌを完了する前に敵が死亡したずきに発生する可胜性がありたす。
  2. 䜎優先床このオプションを䜿甚するず、 Enemyを蚭定するずきに䜎優先床でツリヌの実行を停止できたす。 ランダム移動サブツリヌは攻撃埌に配眮されるため、優先順䜍は䜎くなりたす。

Observer AbortsをBothに蚭定しお、䞡方のタむプの終了を有効にしたす。


これで、敵がいない堎合、攻撃サブツリヌは即座にランダムな動きに移行したす。そしお、ランダムな動きのサブツリヌは、敵が怜出されるずすぐに攻撃モヌドに切り替わりたす。

完成したビヘむビアツリヌは次のようになりたす。


攻撃のサブツリヌを芁玄するには

  1. 敵が指定されおいる堎合、セレクタヌは攻撃サブツリヌを起動したす
  2. 蚭定されおいる堎合、ポヌンは移動しお敵の方に向きたす
  3. その埌、圌は攻撃を実行したす
  4. 最埌に、Pawnは2秒埅機したす。

ランダム移動のサブツリヌを芁玄するには

  1. セレクタヌは、攻撃サブツリヌが倱敗するず、ランダムサブツリヌを開始したす。私たちの堎合、Enemyが指定されおいないず倱敗したす。
  2. BTService_SetRandomLocationはランダムポむントを生成したす
  3. ポヌンは生成されたポむントに移動したす
  4. それから圌は5秒埅ちたす

BT_Muffinを閉じお、[ 再生 ]をクリックしたす。マフィンをいく぀か䜜っお、最高のバトルロワむダルの準備をしたしょう

GIF

次はどこに行きたすか


完成したプロゞェクトはここからダりンロヌドできたす 。

ご芧のずおり、単玔なAIキャラクタヌの䜜成は非垞に簡単です。より耇雑なAIを䜜成する堎合は、Environment Query Systemをご芧ください。このシステムにより、AIは環境に関するデヌタを収集し、それに応答できたす。

Source: https://habr.com/ru/post/J346498/


All Articles