Unity 敵キャラが範囲内に入ってきたら追いかけるようにしよう 3Dゲーム作り③
今日も憂鬱で心配な日々が続きます。
どうも、ゆうき病んです。
あ、間違えましたゆうきやんです。
最近曜日を間違えてゴミ出しに行きました。
ゆうきやんです。
どうでもいい話は置いといて本題に入っていきましょう!
敵キャラが範囲内に入ってきたら追いかけるようにしよう!
今回は前回のパートの続きになります。
初めての方は必要な部分だけ見てくれると幸いです。
※前回のパートの記事は下記になります。
www.unityprogram.info
気分を上げていくために
背景と音をつけてみましょう!
別に必要ないよって人は次に進んでください。
※背景の付け方は下記記事を参考にしてください。
www.unityprogram.info
BGMの付け方は下記記事を参考にしてください。
www.unityprogram.info
次に、敵キャラクターとして今回は
ゾンビを使っていくので、エディタ上部にある、
Window⇨Asset StoreからZombieを
インポートしてください。
※一応下記リンクを貼っておきます。
assetstore.unity.com
エディタ画面に戻って、上部にある①のWindow⇨AI⇨Navigationをクリックします。
次に、②のBakeをクリックして③のBakeをクリックでNavigationが
適応される範囲を反映させます。
※フィールドの範囲が大きいと反映まで時間がかかります。
Agent Height⇨エージェントの高さ。
Max Slope⇨エージェントが登れる坂道の最大角度。
Step Height⇨階段など、エージェントが超えられる段差の最大値。
インポートした①のZombieの▶︎をクリックして
②のPrefabsをクリックします。
③のZombie1を④のScene内にドラッグ&ドロップしてください。
Inspector内にあるAnimator内の⑤のControllerの◉を
選択してNoneをクリックしてください。
既存のContorollerはZombie内にある色々なアニメーションを
繰り返すだけなので消しておきましょう。
ZombieのInspectorの一番下にあるAdd Componentをクリックして
Box ColliderとNav Mash Agentを追加して、
Nav Mesh AgentのSpeedを1にしましょう。
次に⑥にあるスクリプトを作っていきます。
Add Component⇨New Scriptから作成するか、
Project内の好きな所で右クリック⇨Create⇨C# Scriptから作成して
Zombie1にドラッグ&ドロップ(アタッチ)してください。
スクリプトの名前をMoveEnemyにします。
次のコードをコピー&ペーストするか同じように記述してください。
using System.Collections; using System.Collections.Generic; using UnityEngine; //UnityEngineでAIコードを使えるようにするよ。 using UnityEngine.AI; //このスクリプトをアタッチすると自動的にNavMeshAgentを追加するよ! [RequireComponent(typeof(NavMeshAgent))] public class EnemyMove : MonoBehaviour { //NavMeshAgent型を変数a_agentで宣言します。 private NavMeshAgent a_agent; void Start() { //GetComponentでNavMeshAgentを取得して変数a_agentで参照します。 a_agent = GetComponent<NavMeshAgent>(); } //CollisionEnemyスクリプトのOnTrrigerStayにセットし、衝突判定を受け取るメソッド。 public void OnDetectObject(Collider collider) { //検知したオブジェクトにPlayerタグがついていた時の処理。 if (collider.CompareTag("Player")) { //Playerのコライダーの位置を取得して追いかけます。 a_agent.destination = collider.transform.position; } } }
Hierarchy内にあるQuery-Chanをクリックして
Inspector内にあるTagをクリックして
Playerに変更しましょう。
敵キャラクターが追いかけるObjectの認識が
出来るようになります。
次に、Hierarchy内にあるZombie1の①の余白部分で
右クリック⇨Create Empty⇨GameObjectをZombie1の子Objectにして作成します。
名前をEnemyCollisionにしましょう。
EnemyCollisionのInspectorの一番下にあるAdd Componentをクリックして、
②にあるSphere Colliderを追加してください。
次に、③のRadiusの値を4に設定してColliderの範囲を大きくします。
②にあるスクリプトをまた同じような手順で作ってください。
名前をEnemyCollisionにします。
次のコードをコピー&ペーストするか同じ記述にしてください。
using System.Collections; using System.Collections.Generic; using UnityEngine; //UnityEngineでEventsのコードを使えるようにするよ。 using UnityEngine.Events; //スクリプトを追加した時に自動でColliderを追加するよ! [RequireComponent(typeof(Collider))] public class EnemyCollision : MonoBehaviour { //SerializeFieldでUnityEventをInspectorから使えるようにします。 //UnityEvent型の変数onTriggerStayを宣言します。 //それを新しくnew UnityEvent()と宣言するよ! [SerializeField] private UnityEvent onTriggerStay = new UnityEvent(); private void OnTriggerStay(Collider other) { //onTriggerStayで指定された処理を実行します。 onTriggerStay.Invoke(); } //InspectorでOnTriggerStay()を実際に表示させて使えるようにします。 [SerializeField] public class TriggerEvent : UnityEvent<Collider> { } }
そうしたら④の部分にHierarchy内にある⑤のZombie1をドラッグ&ドロップします。
※すみません、⑤を何故だか2つ作ってしまったので左上の⑤でお願いします泣
次に右下の⑤をクリックしてEnemyMove⇨OnDetectObject(Collider)を選択します。
最後に、⑥の所にHierarchy内にあるQuery-Chanをドラッグ&ドロップしてください。
これで完成です!再生してみましょう!
範囲内に入ると敵キャラが追いかけてきましたね!
次回は敵キャラにもアニメーションをつけて
攻撃してくるようにします。
ご視聴ありがとうございました!!
※3Dゲーム作り編は下記カテゴリを参照してください。
www.unityprogram.info
※Unity学習していきたい方は下記カテゴリを参考にしてください。
www.unityprogram.info
※初心者編は下記カテゴリから。
www.unityprogram.info
※オススメのアセットは下記カテゴリから見てください!
www.unityprogram.info