Oops! It appears that you have disabled your Javascript. In order for you to see this page as it is meant to appear, we ask that you please re-enable your Javascript!

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

スポンサードサーチ

関連記事

no image

Unityでオブジェクトに重力を1分以内につける方法

  どうも、チャーさん(@chaa___san)です。   あなたはUnityでオブジェクトに重力をつけたいですか?   この記事ではUnityでオブジェクトに、 重力を …

no image

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

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

no image

unityで矢印キーでオブジェクトを移動させるには(3d)

どうも、チャーさんです。 あなたはunityで矢印キーで3dオブジェクトを 移動させたいですか?   この記事では矢印キーによる3dオブジェクトの 移動を実現する方法を書いてるので、 読めば …

no image

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

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

no image

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

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

no image

unityでオブジェクトをスクリプトで削除する方法

どうも、チャーさんです。   あなたはunityでゲームオブジェクトを、 スクリプトなどから削除したいですか?   この記事では、関数を使い、 ゲームオブジェクトを削除する方法を書 …

no image

unityで敵を索敵する方法

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

no image

unityで攻撃に当たり判定をつける方法

どうも、チャーさんです。 あなたはunityで攻撃に当たり判定をつけたいですか?   この記事では、当たり判定をつける 方法を書いてるので、読めば当たり判定をつけれます。   とい …

no image

unityで地形を作る方法「初心者でもできるように丁寧に説明してます」

どうも、チャーさんです。   あなたはunityでいい感じの地形を作りたい。 でも、やり方がわからない。と悩んでいませんか?   この記事では、unityで地形を作る方法を、 ステ …

no image

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

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

no image

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

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

no image

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

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

no image

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

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

no image

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

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

no image

unityでのダンジョンの簡単な作り方(コードコピペで作れます)

どうも、チャーさんです。   あなたは、unityでダンジョンを作りたいと 思っていませんか?   この記事ではunityでのダンジョンの作り方を 説明してまして、本記事を読めば …

最新記事

チャーさん

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

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

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