Version: 5.3 (switch to 5.4b)
言語English
  • C#
  • JS

スクリプト言語

好きな言語を選択してください。選択した言語でスクリプトコードが表示されます。

NavMesh.SamplePosition

フィードバック

ありがとうございます

この度はドキュメントの品質向上のためにご意見・ご要望をお寄せいただき、誠にありがとうございます。頂いた内容をドキュメントチームで確認し、必要に応じて修正を致します。

閉じる

送信に失敗しました

なんらかのエラーが発生したため送信が出来ませんでした。しばらく経ってから<a>もう一度送信</a>してください。ドキュメントの品質向上のために時間を割いて頂き誠にありがとうございます。

閉じる

キャンセル

マニュアルに切り替える
public static function SamplePosition(sourcePosition: Vector3, out hit: NavMeshHit, maxDistance: float, areaMask: int): bool;
public static bool SamplePosition(Vector3 sourcePosition, out NavMeshHit hit, float maxDistance, int areaMask);

パラメーター

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);
		}
	}
}