Version: 2021.3

Physics.RaycastNonAlloc

切换到手册
public static int RaycastNonAlloc (Ray ray, RaycastHit[] results, float maxDistance= Mathf.Infinity, int layerMask= DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction= QueryTriggerInteraction.UseGlobal);

参数

ray 光线的起点和方向。
results 用于存储命中对象的缓冲区。
maxDistance 从射线起点开始,允许射线命中的最大距离。
layerMask 层遮罩,用于在投射射线时有选择地忽略碰撞体。
queryTriggerInteraction 指定该查询是否应该命中触发器。

返回

int 存储到 results 缓冲区的命中对象数量。

描述

向场景中投射射线,并将命中对象存储到缓冲区中。

Physics.RaycastAll 类似,但不产生任何垃圾。

当不再有命中对象和/或结果缓冲区已满时,射线投射查询结束。这些结果的顺序未定义。当返回完整的缓冲区时,不保证结果是最近的命中对象,并且返回的是缓冲区的长度。如果传入空缓冲区,则不返回任何结果,也不抛出任何错误或异常。


public static int RaycastNonAlloc (Vector3 origin, Vector3 direction, RaycastHit[] results, float maxDistance= Mathf.Infinity, int layerMask= DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction= QueryTriggerInteraction.UseGlobal);

参数

origin 光线的起点和方向。
results 用于存储命中对象的缓冲区。
direction 射线的方向。
maxDistance 从射线起点开始,允许射线命中的最大距离。
queryTriggerInteraction 指定该查询是否应该命中触发器。
layerMask 层遮罩,用于在投射射线时有选择地忽略碰撞体。

返回

int 存储到 results 缓冲区的命中对象数量。

描述

向场景中投射射线,并将命中对象存储到缓冲区中。

using UnityEngine;

public class ExampleClass : MonoBehaviour { // The size of the array determines how many raycasts will occur RaycastHit[] m_Results = new RaycastHit[5];

// See Order of Execution for Event Functions for information on FixedUpdate() and Update() related to physics queries void FixedUpdate() { // Set the layer mask to all layers var layerMask = ~0;

int hits = Physics.RaycastNonAlloc(transform.position, transform.forward, m_Results, Mathf.Infinity, layerMask); for (int i = 0; i < hits; i++) { Debug.Log("Hit " + m_Results[i].collider.gameObject.name); } if (hits == 0) { Debug.Log("Did not hit"); } } }