Unityナビゲーションシステムの使い方
■動物キャラが障害物を避けながら、マウスクリックした位置に歩行移動していくUnityのナビゲーションシステムについて解説する
①アセットストアから「cartoon cat」を取得し、「Rig」と「Animation」の設定をする
【Rigの設定】
「Animation Type」を「Legacy」に設定して、「Apply」押下
【Animation】の設定
2か所の「Wrap Mode」を「Loop」に設定して、「Apply」押下
②「ヒエラルキーウィンドウ」に「Plane」と「cat_Walk」を追加
③更に適当に「Cube」や「Capsule」を追加して、わかりやすいようにマテリアルで色付けする
④ナビゲーションを設定
「Window」タブ⇒「AI」⇒「Navigation」を押下
一旦セーブし、障害物を全て選択後、「Navigation Static」にチェック
「Bake」タブを押下し「Bake」ボタンを押下
「cat_Walk」が移動できる範囲が表示される
⑤「cat_Walk」の目指す目標点を「Sphere」で作成し、「target」という名前でプレファブ化する
⑥ヒエラルキーウィンドウから「target」プレファブを削除後、「cat_Walk」を選択し、「Add Componet」から「Nav Mesh Agent」と追加
⑦マウスでクリックした位置に「target」プレファブを配置するスクリプト(WalkingTarget.cs)を作成し、「cat_Walk」にセット
「Pysics.Raycast」の詳細はこちら→Unity3D 【詳細】Physics.RayCast
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class WalkingTarget : MonoBehaviour
{
//ナビゲーションを使用する為にNavMeshAgent型の変数
NavMeshAgent agent;
//targetプレファブを作成する為のゲームオブジェクト
public GameObject target;
// Start is called before the first frame update
void Start()
{
//NavMeshAgentコンポーネントにアクセスして変数agentを参照
agent = GetComponent<NavMeshAgent>();
}
// Update is called once per frame
void Update()
{
//マウスを左クリックした場合の処理
//※引数が1なら右クリック
if (Input.GetMouseButtonDown(0)) {
//Ray(光線)を飛ばした時にRayとオブジェクトが衝突した時の情報を得る為の変数
RaycastHit hit;
//マウスをクリックした位置にRayを飛ばす
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
//飛ばしたRayがマウスをクリックした位置と衝突した場合
if (Physics.Raycast(ray, out hit, 100.0f)) {
//Rayが当たった場所にtargetプレファブを配置
Instantiate(target, hit.point, Quaternion.identity);
//プレイヤーをターゲットに移動
agent.destination = hit.point;
}
}
}
}
⑧「cat_Walk」に「target」プレファブをセット
⑨Unityを再生し、クリックした位置にtargetプレファブが配置され、プレイヤー(猫)がその方向に向かって歩くけばOK