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从射线起点开始,允许射线命中的最大距离。
layermask 层遮罩,用于在投射射线时有选择地忽略碰撞体。
queryTriggerInteraction指定该查询是否应该命中触发器。

返回

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];

void Update() { // Set the layer mask to all layers var layerMask = ~0;

// Do any of the rays hit? if (Physics.RaycastNonAlloc(transform.position, transform.forward, m_Results, Mathf.Infinity, layerMask) > 0) { foreach (var result in m_Results) { // Check for null since some array spots might be if (result.collider != null) { Debug.Log("Hit " + result.collider.gameObject.name); } } } else { Debug.Log("Did not hit"); } } }