版本:Unity 6 (6000.0)
语言英语
  • C#

NavMesh.Raycast

建议修改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们会阅读用户提出的每条建议,并在适用时进行更新。

关闭

提交失败

由于某些原因,您建议的修改未能提交。请在几分钟后<a>重试</a>。感谢您花时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

public static bool Raycast(Vector3 sourcePosition, Vector3 targetPosition, out AI.NavMeshHit hit, int areaMask);

参数

sourcePosition 射线的起点。
targetPosition 射线的终点。
hit 持有射线穿过位置的属性。
areaMask 指定在跟踪射线时穿过的导航网格区域的位字段掩码。

返回值

bool 如果射线在到达目标位置之前终止,则为真。否则,返回假。

描述

在导航网格上的两点之间绘制一条线。

首先将源点和目标点映射到导航网格上,然后从源点朝向目标追踪射线。如果射线击中导航网格边界,则该函数返回真,并且命中数据填入其中。如果从源到目标的路径畅通无阻,该函数返回假。

如果该射线终止在外边缘,则hit.mask 为 0;否则,它包含阻挡多边形的区域掩码。

可以使用该函数检查代理是否能在导航网格上的两点之间畅通无阻地行走。例如,如果你的角色具有需要空间的回避闪避移动,你可以从角色所在位置朝多个方向发射射线,以找到角色可以闪避到的点。

射线投射不同于物理射线投射,因为它在“2.5D”上即导航网格上运行。射线投射不同于物理射线投射之处在于,导航网格射线投射可以检测所有类型的导航障碍物,如地面的空洞,并且还能爬上斜坡,如果该区域可导航。

// TargetReachable
using UnityEngine;
using UnityEngine.AI;

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

如果你想找到导航网格上的最近点,请使用物理射线投射在世界中找到一个点。有关更多信息,请参阅移动到单击点示例。


声明

public static bool Raycast(Vector3 sourcePosition, Vector3 targetPosition, out AI.NavMeshHit hit, AI.NavMeshQueryFilter filter);

参数

sourcePosition 射线的起点。
targetPosition 射线的终点。
hit 持有射线穿过位置的属性。
filter 一个筛选器,指定在追踪射线时可以经过的 NavMesh 区域。

返回值

bool 如果射线在到达目标位置之前终止,则为真。否则,返回假。

描述

在 NavMesh 上追踪两个位置之间的线,受筛选器论据定义的约束条件制约。

该线在边界或不可通过区域结束。