返回介绍

NavMesh.SamplePosition 采样位置

发布于 2019-12-18 15:38:04 字数 4015 浏览 3163 评论 0 收藏 0

JavaScript => public static function SamplePosition(sourcePosition: Vector3, out hit: NavMeshHit, maxDistance: float, areaMask: int): bool;
C# => public static bool SamplePosition(Vector3 sourcePosition, out NavMeshHit hit, float maxDistance, int areaMask);

Parameters 参数

sourcePositionThe origin of the sample query.
查询采样的起点。
hitHolds the properties of the resulting location.
产生位置的拥有属性。
maxDistanceSample within this distance from sourcePosition.
从sourcePosition开始在该距离内采样。
areaMaskA mask specifying which NavMesh areas are allowed when finding the nearest point.
遮罩指定哪个导航网格区域允许寻找最近的点。

Returns 返回

bool True if a nearest point is found.
发现最近的点为true。

Description 描述

Finds the closest point on NavMesh within specified range.

在导航网格上的指定范围内寻找最近的点。

The function samples the NavMesh to find the closest point on the NavMesh.

该函数采样导航网格并在导航网格上去寻找最近的点。

The closest point is returned based on distance to the query point. The function does not check for obstruction in the world. For example, you the sourcePosition is on the ceiling, a point on the second floor will be returned (if there is NavMesh there), instead of floor position on the first floor.

最近的点被返回基于查询的点的距离。在世界空间中该函数不检查障碍。例如,你的 sourcePosition 是在天花板上,一个点在第二层将会会被返回(如果这是导航网格),而不是在一楼的位置。

The function can get quite expensive if the search radius is really big. A good starting point for the maxDistance is 2 times the agent height.

如果查找半径是太大,该函数获取是相当昂贵。一个好的开始点对于最大距离来说是代理的2倍高。

If you are trying to find a random point on the NavMesh, it is better to use recommended radius and do try multiple times instead of using one very large radius.

如果你在导航网格上尝试寻找一个随机点,塔最好使用推荐半径并且尝试多次而不是使用一更大的半径。

JavaScript:

#pragma strict
// RandomPointOnNavMesh.cs
public class RandomPointOnNavMesh extends MonoBehaviour {
	public var range: float = 10.0f;
	function RandomPoint(center: Vector3, range: float, result: Vector3) {
		for (var i: int = 0; i < 30; i++) {
			var randomPoint: Vector3 = center + Random.insideUnitSphere * range;
			var hit: NavMeshHit;
			if (NavMesh.SamplePosition(randomPoint, hit, 1.0f, NavMesh.AllAreas)) {
				result = hit.position;
				return true;
			}
		}
		result = Vector3.zero;
		return false;
	}
	function Update() {
		var point: Vector3;
		if (RandomPoint(transform.position, range, point)) {
			Debug.DrawRay(point, Vector3.up, Color.blue, 1.0f);
		}
	}
}

C#:

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

navmesh

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文