チャムコード

チャーさんのUnityゲームラボです。Unityでゲーム制作する時に使うコードやノウハウをメインに発信しています。Unityでゲーム制作したいと思っているなら読んでください。

敵Aiの作り方

unityで敵を移動させる方法(詳細にわかりやすく説明します)

投稿日:2020年3月29日 更新日:

うも、チャーさんです。

 

あなたはunityで敵を移動させたい、そう思っていませんか?

コライダーなどでもできるが、他の方法がないかと探してませんか?

 

この記事ではコライダーなどを使わず敵を移動させる

方法を書いてます。なので読めば、あなたはunityで

敵を移動させれるようになります。

 

そして敵オブジェクトを自由に移動させて

ゲームづくりを楽しめるでしょう。ということでunityで

敵を移動させたいなら読んでみてください。

 

*動画はこちら

 

 

unityで敵を移動させる方法

 

ということで早速その方法ですが、

navMeshAgentというunityで用意されてる

機能を使いましょう。

 

というのもnavMeshAgentとは、

オブジェクトを目的地に向かって動かす

という機能でして、

 

これを使えばunityで敵をプレイヤーなどに向かって

移動させるなどできます。

 

 

ということで敵を移動させたければ、

navMeshAgentを使いましょう。

 

unityで敵を移動させるための手順

 

ということで、ここからはこのnavMeshAgentを使い

敵を移動させるための手順を書いていきます。

 

床と敵を用意する

 

ということでまず、

1番目にオブジェクトが移動するための

床と敵役として移動させたいオブジェクトを

用意しましょう。

 

床はCreate 3d ObjectでTerrainなどを

用意しとけばいいでしょう。

 

敵はCubeでもCylinderでもなんでも

OKです。

 

 

navMeshを設定する

 

で次2番目に、

navMeshというのを設定する必要があります。

 

でこのnavMeshというのは何かというと、

オブジェクトが移動する範囲を設定するというものです。

 

これをせずしてnavMeshAgentで敵を

移動させれないのでまずこれをやりましょう。

 

 

でやり方ですが、Inspector画面を

みてください。

 

するとその横にNavigationという表示が

書いてあります。

 

【追記 2023/10/2 】

 Navigation 表示のやり方がちょっと変わったみたいで、

Unityの左上メニューにある Window → AI → Navigation の順でクリックしていけば Navigationを表示できます。

 

unity navmeshエディター

 

でまずはここをクリックしましょう。

 

 

でBakeというタブがあるので、

そこをクリックして、その下のBakeボタンを

クリックしましょう。

 

するとシーンビューの中の床に当たる部分が

青色で表示されます。

(その青い部分がオブジェクトが移動できるエリアになります。)

 

そしたらBakeが完了です。

 

navMeshAgentコンポーネントをつける

 

そして次、3番目に、

navMeshAgentというコンポーネントを

敵にするオブジェクトにつけましょう。

 

その理由は、このnavMeshAgentというコンポーネントを

つけないと、オブジェクトを移動させることが

できないからです。

 

なので必須です。

 

 

やり方は普通にオブジェクトを選択し、

add componentをクリックすると、

コンポーネント一覧の中に、

 

navMeshAgentというのがあるので、

それをクリックしましょう。

 

スクリプトをつけましょう

 

でそれができたら、次4番目ですが、

敵にするオブジェクトにスクリプトを

つけましょう。

 

(navMeshAgentのコンポーネントを

つけたのと同じオブジェクトにつけましょう)

 

理由はこのスクリプト内で、

敵を移動させるコードを書くからです。

 

 

移動先である目的地などの指定も

このスクリプト内で行うので、

add componentしましょう。

 

で、スクリプトの中身ですが、

 

以下を参考にしてください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI; //①←これを足しておかないと動かないので必須です。

public class navtest : MonoBehaviour {

    public GameObject goal;  //②←目的地になるオブジェクトを取得するための変数
    public NavMeshAgent agent; //③コンポーネント取得用の変数

    // Use this for initialization
    void Start () {
     agent = GetComponent<NavMeshAgent> (); //③コンポーネントの取得
        goal = GameObject.Find (“ここに目的地になるゲームオブジェクト名); //②ここで目的地を取得
    }
    
    // Update is called once per frame
    void Update () {
            agent.destination = goal.transform.position; //④ここで目的地を設定
    }
}

 

上記コードですが実行すると敵が

プレイヤーに向かって移動してくる(追いかけてくる)

動きになります。

 

ということでコードを解説します。

 

 

using UnityEngine.AI;

ですがnavMeshAgentの機能を使うのに必須です。

なのでこのコードを絶対に書きましょう。

 

書かないとエラー表示が出ます。

 

 

public GameObject goal;

void Start () {
        goal = GameObject.Find (“ここに目的地になるゲームオブジェクト名); //②ここで目的地を取得
    }

ここで目的地に当たるオブジェクトを取得

してます。

 

 

Findの後の()内には目的地に当たるオブジェクトを書きましょう。

例えばプレイヤーに相当するゲームオブジェクトの名前が

playerになってた場合、

 

goal = GameObject.Find (“player);

にすればOKです。

 

 

でこんなことする理由ですがnavMeshAgentでは、

オブジェクトを目的地に向かって動かす、

という仕組みが採用されてます。

 

なので敵が移動する際、目的地にあたる位置情報

が必要なのです。

 

で、このコードでオブジェクトを取得することで、

位置情報を取得できます。

 

 

で上記コードでは、

プレイヤーのオブジェクトを取得することで

プレイヤーの位置情報を取得し、

 

プレイヤー(目的地)に向かって敵が移動してくるというわけです。

 

 

 ③コンポーネントの取得ですが、

スクリプトでnavMeshAgentを制御するには、

 

スクリプト内で、

agent = GetComponent<NavMeshAgent> ();

とかいて、コンポーネントを取得する必要があります。

 

取得しないと動かないので書いときましょう。

 

 

void Update () {
            agent.destination = goal.transform.position; //④ここで目的地を設定
    }
}

 

これですが、上記のコードを書くことで、

実際に敵が移動してくれます。

 

変数名.destination =  というのは、

「目的地は、」という意味で、

 

その目的地に当たるのが、

goal.transform.position;

になるわけです。

 

 

でこのgoal.transform.positionとは、

今回のコードで言えばプレイヤーオブジェクトの

位置情報です。

 

(用語に馴染みがないとわかりづらいのですが、

transform.positionとは位置情報のことです。)

 

(なのでgoal.transform.positionとは、

goalという変数に格納したゲームオブジェクトの

位置情報という意味です。)

 

 

ということでこのコードを書くことで、

プレイヤーに向かって敵が移動してくるという

わけです。

 

 

ということで、上記を書いて、

保存したら実行してみましょう。

 

でこれで敵オブジェクトが移動したら

成功です。

 

まとめ

 

ということで長かったと思いますが、

unityで敵を移動させたいならnavMeshAgentを

使うといいです。

 

コライダーで動かすこともできますが、

攻撃判定がややこしくなったりするので、

navMeshAgentでやった方がいいです。

 

ということで早速本記事の内容を実践して、

敵を動かしてみてください。

 

 

また、今回は単純に敵がプレイヤーに

向かって移動してくるという方法を記事にしましたが、

 

これだけだとゲーム的に味気ないので、

プレイヤーが敵にある程度近づいたら、

移動してくるというような機能を作る方法も書きました。

 

それが以下の記事です。

 

unityで敵に近づくと追いかけてくるコードとコードの解説記事

 

ということで本記事の内容をクリアして、

そこから応用としてプレイヤーが敵に近づくと、

追いかけてくる。

 

をやりたいなら上記記事を読んでください。

 

 

 

ということで読んでもらってありがとうございました。

 

チャーさん

-敵Aiの作り方

関連記事

Unityで敵の上にHPを表示させる方法「すぐにできます」

どうも、チャーさんです。 あなたは、unityで敵にHPを表示させたいですか?   この記事ではunityで敵の上にHPを表示させる方法について お話しします。   なのであなたが …

Unityで敵にプレイヤーを攻撃させる方法

どうも、チャーさんです。   あなたはUnityで敵が攻撃してくるようにしたいですか? この記事ではUnityで敵に攻撃させる方法を書いてるので、 この記事を読めば敵に攻撃させることができま …

no image

unityで敵に近づくと追いかけてくるコードとコードの解説記事

どうも、チャーさんです。   あなたはunityで敵に近づくと、 プレイヤーを追いかけてくるという機能を つけたいと思っていませんか?   この記事ではそれを実現するコードと方法や …

Unityで敵を徘徊させたい?ならこうやればいいですよ。

どうも、チャーさんです。   あなたは、Unityで敵に徘徊させたいですか? であればこの記事を読んでください。   読めば、Unityで敵に徘徊させることができるようになります。 …

Unityで敵が攻撃を受けたらHPを減らす機能の作り方

どうも、チャムコードというブログ運営してる、チャーさんです。   あなたはUnityで敵のHPを減らす機能を作りたいですか? 敵がプレイヤーから攻撃を受けたときに、HPを減らす 処理をつけた …

Unityで敵に巡回させるならこの3ステップ(ランダム巡回もできる)

どうも、チャーさんです。 あなたはUnityで敵を巡回させたいですか? この記事ではUnityで敵を巡回させる方法を説明します。   なので、この記事を読めばUnityで敵の巡回をすぐにさせ …

unity-enemy-spawn

Unityで敵をスポーンさせる簡単な方法[速攻でできる]

どうも、チャーさんです。 この記事では、Unityで敵をスポーンさせる方法について お話しします。   なので、あなたがこの記事を読めば、 すぐにUnityで敵をスポーンさせることができるよ …

Unityで敵による索敵を距離で行わせる簡単な方法「このメソッド1個使えばいける」

どうも、チャーさんです。 いつもこのブログ、チャムコードに来ていただき ありがとうございます。   あなたは、Unityで敵による索敵を距離で行わせたいですか? プレイヤーと敵オブジェクトと …

Unityで敵に索敵機能を持たせる方法(簡単なやり方)

どうも、チャーさんです。   あなたはUnityで敵に索敵機能をつけたいですか? この記事ではUnityで敵に索敵機能をつける方法を説明します。 なので、   この記事を読めば、あ …

unityで敵を消滅させる

Unityで敵を消滅させる方法(敵を攻撃した時に消滅させるとかも)

  どうも、チャーさんです。   あなたはUnityで敵を消滅させたいですか? 例えばプレイヤーが敵を攻撃したら消滅させたり、 そんな風にしたいならばこの記事を読んでください。 & …

最新記事

チャーさん

Unityに関する記事を書いてます。

 

[簡単な経歴]

 

2018年-プログラムを始めUnityの存在を知りハマる。

2019年-エンジニアとして仕事開始(web系)

2021年-UnityでVR開発等にも手を出し始める。

現在-エンジニアとして活動しながらUnityも続行中。

 

youtubeでは、Unityに関する動画をあげてるので、

あなたのUnityスキルアップにどうぞ。