unity

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

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

Pocket

うも、チャーさんです。

 

あなたは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という表示が

書いてあります。

 

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で敵に近づくと追いかけてくるコードとコードの解説記事

 

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

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

追いかけてくる。

 

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

 

 

 

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

 

チャーさん

-unity

==========

Unity用の3Dモデルを探してる方、欲しい方ご注目!

自作のUnity用3Dモデルを販売(基本的に無料版あり)してますので、
以下のリンクより一度ご覧ください。

Unity用3Dモデルを見てみる

==========


スポンサードサーチ

関連記事

no image

unityで敵を索敵する方法

どうも、大石です。   あなたはunityでプレイヤーが敵を索敵する 機能をつけたいですか?   この記事を読めば、敵を索敵する 機能を簡単に作れますよ。   ということ …

no image

unityで他のオブジェクトを取得する方法

どうもチャーさんです。   あなたはunityで他のオブジェクトを 取得したいがわからず困ってますか?   この記事では、unityで他のオブジェクトを 取得する方法を書いてます。 …

no image

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

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

no image

unityでprefabを複製する(スクリプトで)方法

どうも、大石です。 あなたはunityでprefabをスクリプトで複製 したいですか?   この記事を読めば、あなたはprefabをスクリプトで 複製できるようになります。   な …

no image

unityで動く床にのるとオブジェクトが滑る場合の解決法

どうも、大石です。   unityで動く床を作ったのに オブジェクトが上に乗ると滑って 一緒に付いて行かずに落ちる、、   みたいなことで悩んでますか?     …

no image

unityでoculus questの開発をしたい方必見!手順まとめました

どうも、チャーさんです。   あなたはunityでoculus questの 開発をしたい、そう思ってませんか?     この記事ではunityでoculus quest …

no image

unityでコンポーネントを取得する方法を詳しく解説

どうも、チャーさんです。 あなたはunityでコンポーネントを取得する方法を 探していますか?   この記事ではコンポーネントを取得する方法、 その際の変数宣言の書き方や、 コンポーネント名 …

no image

blenderで作ったモデルをunityにインポートする方法「簡単です」

どうも、チャーさんです。   あなたはblenderで作ったものを、 unityで表示(インポート)したいと、 思っていませんか?   この記事では、あなたが作ったblenderの …

no image

unityでカメラを追従させる簡単なコードと方法の説明をする記事

  どうも、チャーさんです。   あなたはunityでカメラの追従をさせたい、 こう思ってませんか?   この記事ではオブジェクトをカメラで追従させる、 (カメラが追いか …

no image

unityでオブジェクトを移動させたい人は読んでください。

どうも、チャーさんです。   あなたはunityでオブジェクトや、 プレイヤーなど自由自在に移動させたい、 そう思っていませんか?     キーボードの上下左右の矢印ボタ …

no image

unityでボタンクリックで他のオブジェクトの色を変更するスクリプト

どうも大石です。   あなたはunityでボタンをクリックしたら、 他のオブジェクトの色を変更するという スクリプトを書きたいですか?     この記事を読めば、あなたは …

no image

unityでオブジェクトを回転させる方法「1分でできます」

どうも、チャーさんです。   あなたはunityでオブジェクトを回転させたいですか?   unityでゲームなど作るとオブジェクトを 回転させたい場面がありますよね。   …

no image

unity上でblender作成モデルが透ける時の解決法

どうも、チャーさんです。   あなたはunityにblenderで作ったモデルを 持ってきたものの、面が透ける現象が起こって 困っていませんか?     この記事は、透け …

no image

unityで弾の発射位置をコントロールする方法

どうも、大石です。 あなたはunityで弾の発射位置を自由に コントロールしたいですか?   この記事を読めばあなたの好きな位置から 弾を発射できるようになりますよ。   スポンサ …

no image

[unity]foreach内でget componentを使う方法

どうも、チャーさんです。   この記事ではunityのforeachループで get componentする方法を書きます。     なのでこの記事を読めば、 &nbsp …

最新記事

チャーさん

プログラミング・筋トレ・unity系の記事などを書いてます。

大学卒業後→開業→個人事業主7年目ぐらいです。webサイト制作したり、unityでゲーム開発しております。

youtubeもやってまして、主にプログラミング動画とかunity系の動画をあげてるので見てください。