Version: 5.4
public static bool Raycast (Vector3 sourcePosition, Vector3 targetPosition, out NavMeshHit hit, int areaMask);

パラメーター

sourcePosition レイの始点
targetPosition レイの終点
hit レイを飛ばしてヒットしたオブジェクトのプロパティー情報
areaMask レイを飛ばす時、特定のマスクをかけるためにナビメッシュレイヤーを渡すことができる

戻り値

bool ターゲット位置に辿りつく前に終点となる場合は true、そうでない場合は false

説明

ナビメッシュ上の二点間でレイを飛ばします

レイが始点から目標に向かってトレースされるとき、Source と Destination の点が NavMesh に最初にマップされます。レイが NavMesh 境界に当たった場合、関数は True を返し、ヒットデータが満たされます。 Source から目標へさえぎるものがない場合、関数は False を返します。

外縁でレイキャストが終了した場合、 hit.mask は 0 です。そうでなければブロックしているポリゴンのエリアマスクが含まれています。

NavMesh で 2 点の間をエージェントが障害なく歩くことができる場合、確認として使用できます。たとえば、キャラクターがスペースが必要で回避しなければならない場合、キャラクターの場所から複数の方向にキャラクタが回避できる場所を見つけるためにレイを放つことができます。

NavMesh.Raycast は Physics Raycast とは異なります。これはNavMesh 上で "2.5 次元" で機能するものだからです。 Physics Raycast との違いは NavMesh 版は地面の穴などのようなナビゲーションの障害物のすべての種類を検出できます。エリアをナビゲートできるなら斜面を登るようなこともできます。

// TargetReachable.cs
using UnityEngine;
using System.Collections;
public class TargetReachable : MonoBehaviour {
	public Transform target;
	private NavMeshHit hit;
	private bool blocked = false;
	void Update() {
		blocked = NavMesh.Raycast(transform.position, target.position, out hit, NavMesh.AllAreas);
		Debug.DrawLine(transform.position, target.position, blocked ? Color.red : Color.green);
		if (blocked)
			Debug.DrawRay(hit.position, Vector3.up, Color.red);
	}
}

NavMesh で最も近い点を見つけるために探している場合、ワールドで点を見つけるために Physics Raycast を使用する必要があります。 Move to Click Point の例を参照してください。