読者です 読者をやめる 読者になる 読者になる

おもちゃラボ

Unityで遊びを作っていきます

【Unity】NavMeshで経路に沿って動かす

NavMeshを使ってキャラクタを動かす方法を紹介します。
NavMeshを使えば、簡単に移動できる範囲を指定でき、指定した経路にそって自動的にキャラクタを動かすことが出来ます。

f:id:nn_hokuson:20160805224820p:plain

ステージを作る

まずは土台と鳴るステージを作成します。
ステージには標準のモデルを使っても良いですが、Prototypeという便利なアセットが用意されているので、これを使用しています。

Prototypeアセットを利用するにはメニューバーから「Assets」→「Import Packages」→「Prototyping」を選択してインポートします。

f:id:nn_hokuson:20160805230003p:plain

配置するブロックをメッシュ単位で動かす方法は、テラシュールブログさんで紹介されています。

tsubakit1.hateblo.jp

次に、経路に指定したいオブジェクトを選択し、インスペクタから「Navigation Static」に指定します。

f:id:nn_hokuson:20160805230448p:plain

メニューバーから「Window」→「Navigation」を選択します。
インスペクタの部分にNavigationタブが開くので、右下の「Bake」ボタンを押して下さい。
ボタンを押すと画面上に経路が水色で表示されます。

f:id:nn_hokuson:20160805231420p:plain

キャラクタにNavMeshAgentをアタッチする

次に経路にそって歩かせるキャラクタ(ここではSDユニティちゃん)を配置します。
SDユニティちゃんはこちらからダウンロードできます。

SDユニティちゃん 3Dモデルデータ - ダウンロード - UNITY-CHAN! OFFICIAL WEBSITE

ユニティちゃんが配置できたら、経路に沿って動かすためにNavMesh Agentコンポーネントをアタッチします。
ヒエラルキービューからユニティちゃんのオブジェクトを選択し、インスペクタから「Add Component」→「Navigation」→「Nav Mesh Agent」を選択します。

f:id:nn_hokuson:20160805233129p:plain

ゴール地点を指定する

最後にスクリプトからゴール地点を指定します。
プロジェクトビューで「Create」→「C# Script」を選択し、「UnityChanController」にリネームします。
次のスクリプトを入力して下さい。

using UnityEngine;
using UnityEngine.AI;
using System.Collections;

public class UnityChanController : MonoBehaviour {
    public Transform target;
    NavMeshAgent agent;

    void Start () {
        agent = GetComponent<NavMeshAgent>();
    }

    void Update () {
        agent.SetDestination(target.position);
    }
}

スクリプトを保存したら、ヒエラルキービューのユニティちゃんオブジェクトにドラッグ&ドロップしてアタッチします。

最後に、ゴール地点となるオブジェクトを指定します。
先ほどアタッチしたUnityChanControllerスクリプトのTargetのスロットにゴール地点になるオブジェクトをドラッグ&ドロップします。

f:id:nn_hokuson:20160805234149p:plain

実行するとユニティちゃんが自動的にゴール地点まで移動します。

f:id:nn_hokuson:20160805234416g:plain

「Unity5の教科書」を書きました。どうぞよろしくお願いします!(^^)/

nn-hokuson.hatenablog.com

Unity5の教科書 (Entertainment&IDEA)

Unity5の教科書 (Entertainment&IDEA)