NavMesh
NavMeshは、Unityの強力なパスファインディングシステムで、ゲーム内のエージェントが自動で障害物を避けながら目的地に到達するために使用されます。教材では、NavMeshの基本的な使い方から応用例までを解説し、サンプルコードを通じて学べる内容にします。
NavMeshに関する教材構成案
1. NavMeshの基本概念
NavMesh(Navigation Mesh)は、シーンの地形上に設計された移動可能な領域を示します。これにより、キャラクターは特定の範囲内で移動可能であり、障害物を回避しながら目的地に向かいます。
- Bake: NavMeshを生成するプロセスです。地形や障害物を元に、移動可能な領域を自 動で作成します。
- NavMesh Agent: キャラクターやオブジェクトに取り付けるコンポーネントで、NavMesh上でのパスファインディングを行います。
2. 基本的なNavMeshのセットアップ方法
ステップ 1: NavMeshの作成
- シーン内の地形に「NavMesh」データを適用するには、Unityエディタで
Window > AI > Navigationを開きます。 - NavMeshを使用したい地形オブジェクトに
Staticオプションを適用し、Bakeを実行して移動可能な領域を作成します。
ステップ 2: NavMesh Agentの設定
- 移動するキャラクターに
NavMesh Agentコンポーネントを追加します。 Destinationプロパティに目的地を設定することで、キャラクターは自動でその位置まで移動します。
3. サンプルプログラム:NavMesh Agentを使った移動
NavMesh Agentを用いてキャラクターを指定した目的地まで自動で移動させる基本的なサンプルプログラムです。
using UnityEngine;
using UnityEngine.AI;
public class NavMeshMovement : MonoBehaviour
{
public Transform target; // 目的地となるターゲットのTransform
private NavMeshAgent agent;
void Start()
{
agent = GetComponent<NavMeshAgent>(); // NavMesh Agentの取得
}
void Update()
{
agent.SetDestination(target.position); // ターゲットの位置まで自動で移動
}
}
解説:
- NavMesh Agentは、
SetDestinationメソッドでターゲットの位置に向かって自動的に移動します。 NavMeshAgentは自動的に最適なルートを計算し、障害物を避けながら移動します。
4. 応用:クリックで動かすキャラクターの実装
マウスでクリックした場所にキャラクターを移動させる方法です。プレイヤーがインタラクティブにキャラクターを操作できるようになります。
サンプルプログラム:
using UnityEngine;
using UnityEngine.AI;
public class ClickToMove : MonoBehaviour
{
private NavMeshAgent agent;
private Camera cam;
void Start()
{
agent = GetComponent<NavMeshAgent>();
cam = Camera.main;
}
void Update()
{
if (Input.GetMouseButtonDown(0)) // 左クリックで目的地を設定
{
Ray ray = cam.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
agent.SetDestination(hit.point); // クリックした地点まで移動
}
}
}
}
解説:
Raycastを使用して、クリックした位置を取得し、NavMesh Agentにその座標を設定することで移動を開始します。- クリック位置が地形上にあり、NavMesh内の有効なポイントであれば、キャラクターはその地点に移動します。