Version: 2017.3
public static bool Raycast (Vector3 origin, Vector3 direction, float maxDistance= Mathf.Infinity, int layerMask= DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction= QueryTriggerInteraction.UseGlobal);

参数

origin 射线在世界坐标系中的起点。
direction 射线的方向。
maxDistance 射线应检查碰撞的最大距离。
layerMask 层遮罩,用于在投射射线时有选择地忽略碰撞体。
queryTriggerInteraction 指定该查询是否应该命中触发器。

返回

bool 如果射线与任何碰撞体相交,返回 true,否则为 false。

描述

向场景中的所有碰撞体投射一条射线,该射线起点为 /origin/,朝向 /direction/,长度为 /maxDistance/。

您可以选择提供一个 LayerMask,以过滤掉不想生成与其碰撞的碰撞体。

Specifying queryTriggerInteraction allows you to control whether or not Trigger colliders generate a hit, or whether to use the global Physics.queriesHitTriggers setting.

该示例创建一个简单的射线投射 - 从对象的当前位置向前投影,延伸 10 个单位。

using UnityEngine;

public class ExampleClass : MonoBehaviour { // C# example. void Update() { // Bit shift the index of the layer (8) to get a bit mask int layerMask = 1 << 8;

// This would cast rays only against colliders in layer 8. // But instead we want to collide against everything except layer 8. The ~ operator does this, it inverts a bitmask. layerMask = ~layerMask;

RaycastHit hit; // Does the ray intersect any objects excluding the player layer if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), out hit, Mathf.Infinity, layerMask)) { Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * hit.distance, Color.yellow); Debug.Log("Did Hit"); } else { Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * 1000, Color.white); Debug.Log("Did not Hit"); } } }
using UnityEngine;

public class ExampleClass : MonoBehaviour { void FixedUpdate() { Vector3 fwd = transform.TransformDirection(Vector3.forward);

if (Physics.Raycast(transform.position, fwd, 10)) print("There is something in front of the object!"); } }

Notes: Raycasts will not detect Colliders for which the Raycast origin is inside the Collider.


public static bool Raycast (Vector3 origin, Vector3 direction, out RaycastHit hitInfo, float maxDistance= Mathf.Infinity, int layerMask= DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction= QueryTriggerInteraction.UseGlobal);

参数

origin 射线在世界坐标系中的起点。
direction 射线的方向。
hitInfo 如果返回 true,则 hitInfo 将包含有关碰撞体的撞击位置的更多信息(另请参阅:RaycastHit)。
maxDistance 射线应检查碰撞的最大距离。
layerMask 层遮罩,用于在投射射线时有选择地忽略碰撞体。
queryTriggerInteraction 指定该查询是否应该命中触发器。

返回

bool 当光线与任何碰撞体交叠时为 true,否则为 false。

描述

向场景中的所有碰撞体投射射线,并返回有关命中对象的详细信息。

该示例报告当前对象与报告的碰撞体之间的距离:

using UnityEngine;

public class RaycastExample : MonoBehaviour { void FixedUpdate() { RaycastHit hit;

if (Physics.Raycast(transform.position, -Vector3.up, out hit)) print("Found an object - distance: " + hit.distance); } }

该示例重新引入 maxDistance 参数,以限制投射射线的距离:

using UnityEngine;

public class RaycastExample : MonoBehaviour { void FixedUpdate() { RaycastHit hit;

if (Physics.Raycast(transform.position, -Vector3.up, out hit, 100.0f)) print("Found an object - distance: " + hit.distance); } }

public static bool Raycast (Ray ray, float maxDistance= Mathf.Infinity, int layerMask= DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction= QueryTriggerInteraction.UseGlobal);

参数

ray 光线的起点和方向。
maxDistance 射线应检查碰撞的最大距离。
layerMask 层遮罩,用于在投射射线时有选择地忽略碰撞体。
queryTriggerInteraction 指定该查询是否应该命中触发器。

返回

bool 当光线与任何碰撞体交叠时为 true,否则为 false。

描述

与上面使用 ray.originorigin(而不是 origin 和 /direction/)时相同。

using UnityEngine;

public class ExampleClass : MonoBehaviour { void Update() { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, 100)) print("Hit something!"); } }

public static bool Raycast (Ray ray, out RaycastHit hitInfo, float maxDistance= Mathf.Infinity, int layerMask= DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction= QueryTriggerInteraction.UseGlobal);

参数

ray 光线的起点和方向。
hitInfo 如果返回 true,则 hitInfo 将包含有关碰撞体的撞击位置的更多信息(另请参阅:RaycastHit)。
maxDistance 射线应检查碰撞的最大距离。
layerMask 层遮罩,用于在投射射线时有选择地忽略碰撞体。
queryTriggerInteraction 指定该查询是否应该命中触发器。

返回

bool 当光线与任何碰撞体交叠时为 true,否则为 false。

描述

与上面使用 ray.originorigin(而不是 origin 和 /direction/)时相同。

该示例实现以下功能:每当检测到碰撞时,沿射线长度绘制一条线:

using UnityEngine;

public class ExampleClass : MonoBehaviour { void Update() { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit;

if (Physics.Raycast(ray, out hit, 100)) Debug.DrawLine(ray.origin, hit.point); } }
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961