Version: 2018.1
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"); } } }
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961