アマゾンバナーリンク

ディスプレイ広告

スポンサーリンク

【超簡単】初心者でも使えるアセットEasyWaypoint AIの紹介 【AI Behaviorとの比較あり】

こんにちは!ジェイです。ゲーム開発をしていて敵キャラなどAIを実装する機会はよくありますよね?そんな時に自力で実装するよりも、お手軽にAIを実装できるアセットの紹介をします。

記事内広告

EasyWaypoint AIの特徴

EasyWaypoint AIは敵のAIを簡単に作れる仕組みになっていて、特徴として以下のAIを作れます。

  • ランダムに移動するAI
  • Waypoint上を移動するAI
  • ランダムに移動してターゲットを発見するとそちらに移動するAI
  • Waypoint上を移動してターゲットを発見するとそちらに移動するAI

基本的にこの4つの行動を、bool型のチェックを入れる、Waypointを設定する、のたった2つの操作のみで非常に簡単に切り替える事ができます。

AI Behaviorとの比較

AI Behaviorは無料で使えるのに非常に多機能なアセットで、11種類の状態と様々なトリガーを組み合わせる事によって、かなり多彩な動きを行うことが出来ます。ただし、もちろんのことながら、それなりに覚えることはあります。2つともスクリプトをいじらなくても使える点は共通です。

EasyWaypoint AIの使い方

こちらのアセットをインポートして、Assets>HermitMode>SimpleWaypointAI>Scenesに2つサンプルのシーンが入っています。先程説明した特徴のAIが4種類4色で別れていて、行動がはっきりとわかるようになっています。

WAYPOINT PATH SETUP

このアセットのすべての「Waypoint」NPCには、「NPC Waypoints」という適切に設定されたWaypoint Path Game Objectが必要です。
AIはスタート時にどのウェイポイントが一番近いかをチェックし、各ウェイポイント間を移動し始め、エディターのChange Distanceでユーザーが定義した一定の距離に達すると、次のウェイポイントに変更します。
ウェイポイント間の移動を開始し、エディターの “Change Distance “でユーザーが定義した一定の距離内に到達すると、次のウェイポイントに変更します。以下は、このようなゲームオブジェクトを正しく設定するためのガイドです。

1.Create Emptyで空のGameObjectを作成する

2.名前を「NPC Waypoints」に変更します。これは非常に重要です。GameObjectの名前が正しくないと、Waypoint NPCはウェイポイントパスへの参照を作成することができません。ウェイポイントパスへの参照を作成することができず、デフォルトでwanderロジックになってしまいます。

3.NPC Waypoints “ゲームオブジェクトの親となる空の子ゲームオブジェクトを作成します。エディタで使いやすいように、"NPC Waypoints “ゲームオブジェクトに “waypointViewer.cs “を追加する。子オブジェクトを動かして、順次、子オブジェクト間のパスを作成する。waypointViewer.cs “がエディタ内に線を引きます。エディタ上に線が引かれ、パスが作成されていることを確認できます。

これだけで、ウェイポイントNPCで使用するための適切なウェイポイントパスを設定することができます。他に必要なのは、地面として使われるあらゆる地形にナビゲーショナルメッシュをベイクすることです。
ウェイポイントのノード("NPC Waypoints “の子オブジェクト)が、ナビメッシュの下や上にありすぎると、NPCエージェントが動けなくなるので注意してください。
ウェイポイントノード("NPC Waypoints “の子オブジェクト)がナビメッシュの下や上にありすぎると、"npcAI.cs “の “Change Distance “の値がトリガーされないため、NPCエージェントがその位置で動けなくなってしまうことに注意してください。

ANIMATION CONTROLLER SETUP

すべてのNPCは、同じアニメーションコントローラーの設定を使用することができます。知覚を持たないNPCの場合は冗長性があるため、削除することができます。詳細は以下の通りです。
簡単に設定するには、プリセットのアニメーションコントローラ「Humanoid」を使用します。
Hermit Mode > SimpleWaypointAI > Animation Controllers > Humanoidアニメーションコントローラーには、ロコモーティブブレンドツリーを持つベースレイヤーが必要です。

また、「Speed」という名前のフロート値が必要です。Blendツリーは、この変数に関連付けられていなければなりません。

鋭敏なNPCの設定には、「攻撃」アニメーションを持つ第2のレイヤーが必要です。このレイヤーには、アニメーションをHumanoid Upper Bodyに限定するマスクを使用します。このような設定は、以下のようにします。
Hermit Mode > easyWaypoint AI > Animation Controller > UpperBody

WaypointNPCには、この2つ目のレイヤーは攻撃するためのものなので、必要ありません。

WAYPOINT NPC SETUP

最初に利用できるNPC AIのタイプは「Waypoint NPC」です。これは、"NPC Waypoints “という名前のGameObjectと、ウェイポイントのパスを作成する子のTransformが必要です。設定されたWaypoint NPCは以下の場所にあります。
Hermit Mode > easy Waypoint NPC > Prefabs > WaypointNPC
ウェイポイントNPCを最初から作りたい場合は、以下の簡単な設定ガイドを参照してください。

1.Create Emptyで空のゲームオブジェクトを作成する

2.これを適切な名前に変更します。キャラクターのメッシュをこの空のゲームオブジェクトを親に設定し、位置と回転の両方のトランスフォームを0,0,0にリセットします。

3.「npcAI.cs」と「Navmesh Agent」をルートのgameObjectに追加します。

WAYPOINT NPC SETUPの続き

ルートのGO(GameObject)の親となる空の子GameObjectを作成し、"lookAtGO “のような名前にする。
ローカルの位置と回転の両方が0,0,0になっていることを確認します。これを “Look At GO “のリファレンスである “npcAI.cs “にドラッグします。

5.アニメーターを “animator “リファレンスにドラッグします。ナビメッシュのエージェントを「エージェント」のリファレンスにドラッグします。そして、"Use Waypoints “をtrueにします。

6.Change Distance “を “0 “以外の値に変更します。この値は、エージェント座標と距離座標の間の距離が「Change Distance」の値を下回ると、エージェントの目的地を次のウェイポイントに変更するために使用されます。


この値は、エージェント座標と距離座標の間の距離が「距離変更」の値を下回ると、エージェントの目的地として次のウェイポイントに変更するために使われます。


ウェイポイントがナビメッシュの地形から十分に離れていないためにNPCが動けなくなっている場合は、通常「1」に変更すると効果的です。ウェイポイントがナビメッシュの地形に近づかないためにNPCが動けなくなっている場合は、この値を3~5にすると効果的です。

ウェイポイントのNPC AIが設定されました。ウェイポイントAIを動作させるには、シーン内に有効なウェイポイントが設定されている必要があります。ウェイポイントのパスを正しく設定する方法については、WAYPOINT PATH SETUPを参照してください。

WANDER NPC SETUP

2種類目のNPC AIは「Wander NPC」です。ランダムな動きをするため、「NPCウェイポイント」を必要としません。
設定されたWaypoint NPCがあり、それは以下の場所で見つけることができます。
Hermit Mode > easy Waypoint NPC > Prefabs > wanderNPC
以下は、最初から作りたい場合の簡単な設定ガイドです。


1.空のゲームオブジェクトを作成します。

2. これを適切な名前に変更します。
キャラクターのメッシュをこのゲームオブジェクトにペアレントし、位置と回転の両方のトランスフォームを 0,0,0 にリセットします。

3. npcAI.csとNavmesh AgentをルートのgameObjectに追加します。

WAYPOINT NPC SETUPの続き

4. ルートのGO(GameObject)の親となる空の子GameObjectを作り、"lookAtGO “のような名前をつけます。ローカルの位置と回転の両方が0,0,0になっていることを確認します。これを “Look At GO “のリファレンスである “npcAI.cs “にドラッグします。

Animatorを “animator “にドラッグして、Navmesh agentを “Agent “にドラッグします。そして、"Use Waypoints “をtrueにします。

5. アニメーターを “animator “にドラッグします。
NavmeshAgentを「agent」にドラッグします。
「Deviance Rnage(逸脱範囲)」を、NPCがオフセット先を選ぶ際にランダムに設定する値に変更します。
「Change Distance」を、エージェントがターゲットの目的地にどれだけ近づけばいいかを決める値に変更します。新しいVector3座標を選択して移動します。
徘徊するNPCが開始位置に戻る前に半径方向の距離制限を設けたい場合は、「Stric To Start(開始位置にこだわる)」をチェックします。
スタート位置に戻る前に半径方向の距離制限を設けたい場合は、「Stric To Start(開始位置にこだわる)」をtrueにチェックします。
そして、「Wander Distance」を、wander NPCが移動できる半径の制限に変更します。

WAYPOINT NPC PERCEPTIVE SETUP

3種類目のNPC AIは「Waypoint NPC Perceptive」です。これには、"NPC Waypoints “という名前のGameObjectと、ウェイポイントのパスを作成する子のTransformが必要です。


設定されたWaypoint NPC Perceptiveは、以下の場所で見つけることができます。Hermit Mode > easy Waypoint NPC > Prefabs > WaypointNPC_Perceptive以下は、最初から作りたい人のための簡単なセットアップガイドです。

1.Create Emptyで空のGameObjectを作成する

2.これを適切な名前に変更します。キャラクターのメッシュをこのゲームオブジェクトにペアレントし、位置と回転の両方のトランスフォームを0,0,0にリセットします。

3.「npcAI.cs」と「Navmesh Agent」をルートのgameObjectに追加します。

4.ルートのGO(GameObject)の親となる空の子GameObjectを作成し、"lookAtGO “のような名前にする。ローカルの位置と回転の両方が0,0,0になっていることを確認します。これを “Look At GO “のリファレンスである “npcAI.cs “にドラッグします。

アニメーターを “animator “リファレンスにドラッグします。
ナビメッシュ・エージェントを “Agent “リファレンスにドラッグします。
“Use Waypoints “をtrueにチェックします。
“Perceptive “をtrueにします。
Change Distance “を、エージェントが新しいVector3座標を選択する前に、目標とする目的地にどれだけ近づくかを決定する値に変更します。
移動先の新しいVector3座標を選択するまでの距離を指定する値に変更し
「Change Distance」を、エージェントが「Player」タグの付いたものを攻撃する前に、ターゲットとなる目的地にどれだけ近づくかを決める値に変更し
「Attack Dist Check」を、「プレイヤー」とタグ付けされたものを攻撃する前に、エージェントが目標とする目的地にどれだけ近づくかを決める値に変更します。

6.ルートのゲームオブジェクトにRigidbodyを追加し、"is kinematic" = true, “use Gravity" = falseとします。
そして球体のコライダを追加し、それをトリガーとしてマークし、その半径を少なくとも10に変更します。

これで、Waypoint NPC Perceptive AIが設定されました。「Player」というタグの付いたコライダーを認識するまで、ポイントからポイントへと移動します。
このゲームオブジェクトに向かって移動し、「Attack Distance Check」の範囲内に入ると、攻撃アニメーションでプレイヤーを攻撃し、攻撃アニメーションを開始します。
プレイヤーが離れていくと、NPCは「Player」ゲームオブジェクトが球体トリガーの知覚半径外に移動するまで追いかけ続けます。
NPCは、「Player」ゲームオブジェクトが球体トリガーの知覚半径外に移動するまで追いかけ続け、その時点でウェイポイントの目的地に向かって移動します。

WANDER NPC PERCEPTIVE SETUP

4種類目のNPC AIは「Wander NPC Perceptive」です。
これは、"NPC Waypoints “という名前のGameObjectと、ウェイポイントのパスを作成する子のTransformが必要です。
設定されたWaypoint NPC Perceptiveがあり、それは以下の場所にあります。
Hermit Mode > easy Waypoint NPC > Prefabs > WaypointNPC_Perceptive
以下は、最初から作りたい人のための簡単なセットアップガイドです。

1.Create Emptyで空のGameObjectを作成

これを適切な名前に変更します。キャラクターのメッシュをこのゲームオブジェクトにペアレントし、位置と回転の両方のトランスフォームを 0,0,0 にリセットします。

3.「npcAI.cs」と「Navmesh Agent」をルートのgameObjectに追加します。

4.ルートのGO(GameObject)の親となる空の子GameObjectを作成し、"lookAtGO “のような名前にする。ローカルの位置と回転の両方が0,0,0になっていることを確認します。これを “Look At GO “のリファレンスである “npcAI.cs “にドラッグします。

5.アニメーターを “animator “にドラッグします。
ナビメッシュのエージェントを「Agent」にドラッグします。
「Deviance Range(逸脱範囲)」を、NPCがオフセット先を選ぶ際にランダムに設定する値に変更します。
「Change Distance」を、エージェントがターゲットの目的地にどれだけ近づけばいいかを決める値に変更します。
新しいVector3座標を選択して移動します。
徘徊するNPCが開始位置に戻る前に半径方向の距離制限を設けたい場合は、「Strik To Start(開始位置にこだわる)」をtrueにチェックします。
スタート位置に戻る前に半径方向の距離制限を設けたい場合は、「Strik To Start(開始位置にこだわる)」をtrueにチェックします。
そして、"Wander Distance “を、wander NPCが歩き回れる半径の制限に変更します。
「AttackDistCheck(攻撃距離チェック)」を、エージェントが目標地点にどれだけ近づけば攻撃するかを決める値に変更します。「プレイヤー」と書かれたものを攻撃するまでの距離を指定します。

6.ルートのゲームオブジェクトにRigidbodyを追加し、"is kinematic" = true, “use Gravity" = falseとします。
そして球体のコライダを追加し、それをトリガーとしてマークし、その半径を少なくとも10に変更します。

これで、Wander NPC Perceptive AIが設定されました。
ランダムな地点からランダムな地点へと移動し、「プレイヤー」というタグの付いたコライダーを認識します。
このゲームオブジェクトに向かって移動し、「Attack Distance Check」の範囲内に入ると、攻撃アニメーションでプレイヤーを攻撃を開始します。
プレイヤーが離れていくと、NPCは「Player」ゲームオブジェクトが球体トリガーの知覚半径外に移動するまで追い続けます。
NPCは、「Player」ゲームオブジェクトが球体トリガーの知覚半径外に移動するまで追いかけ続け、その時点でランダムな目的地に移動します。

実行結果

#Unity
簡単にAIの設定ができるEasyWaypoint AI
今までのAIのアセットの中で1番使いやすいです

こちらは人型のEasyWaypoint AIです。
青色はひたすらルート通りに歩き、赤は適当に歩いて、黄色と緑色はターゲットを見つけたら攻撃します。

Originally tweeted by ジェイ@Unityオンラインゲームスペシャリスト (@JY20160816) on 2021年5月24日.

まとめ

EasyWaypoint AIの使い方を説明してきました。大きくわけると4つの種類で「Waypointにそって歩く」と「ターゲットを見つけたら追いかけて攻撃する」の2種類を組み合わせた行動パターンになります。

無料で多機能で高機能を求めるなら、AI Behaviorが良いです。
しかし、あまり難しい事は考えないで、簡単に使いたい方は、EasyWaypoint AIがオススメです。

イラストはこんぺいとうさんからお借りしました

+3