sourcePosition | クエリとなるサンプルの原点 |
hit | 一番近い辺のヒット情報 |
maxDistance | サンプリングされる sourcePosition からの距離 |
areaMask | もっとも近い位置を見つける時に特定のマスクをかけるためにナビメッシュレイヤーを渡すことができる |
bool もっとも近い点が見つかった場合は true
指定した範囲内の NavMesh で最も近い点を検索します。
特定の位置からもっとも近いナビメッシュオブジェクトの辺の情報を取得します
最も近い点はクエリポイントへの距離に基づいて返されます。関数はワールド内の閉塞をチェックしません。たとえば sourcePosition が天井にあり、1 階の床の位置ではなく 2 階上の点が返されます ( NavMesh がそこにある場合) 。
検索半径が本当に大きい場合、関数は非常に高くついてしまいます。 MaxDistance のよい出発点はエージェントの高さの 2 倍です。
NavMesh でランダムな点を検索する場合、ひとつの大きな半径を使用する代わりに推奨される半径を複数回試すことをお勧めします。
// RandomPointOnNavMesh.cs using UnityEngine; using System.Collections; public class RandomPointOnNavMesh : MonoBehaviour { public float range = 10.0f; bool RandomPoint(Vector3 center, float range, out Vector3 result) { for (int i = 0; i < 30; i++) { Vector3 randomPoint = center + Random.insideUnitSphere * range; NavMeshHit hit; if (NavMesh.SamplePosition(randomPoint, out hit, 1.0f, NavMesh.AllAreas)) { result = hit.position; return true; } } result = Vector3.zero; return false; } void Update() { Vector3 point; if (RandomPoint(transform.position, range, out point)) { Debug.DrawRay(point, Vector3.up, Color.blue, 1.0f); } } }