1. 程式人生 > >unity3d 2d 射線檢測

unity3d 2d 射線檢測

Physics2D.LinecastNonAlloc 直線投射不分配記憶體
C# ⇒ static int LinecastNonAlloc(Vector2 start, Vector2 end, RaycastHit2D[] results, int layerMask = DefaultRaycastLayers, float minDepth = -Mathf.Infinity, float maxDepth = Mathf.Infinity);

start:直線在世界空間的開始點。
end :直線在時間空間的結束點。
results:返回與直線相交的物體陣列。 返回結果的數量(int)。
layerMask:只在某些層過濾檢測碰撞器。
minDepth:只包括Z座標(深度)大於這個值的物件。
maxDepth:只包括Z座標(深度)小於這個值的物件。

具體 例項`using UnityEngine;
using System.Collections;

public class test : MonoBehaviour {

    public Transform targetpos;//目標位置//
    RaycastHit2D [] ray;
    int hitNumber =0;//檢測返回與直線相交的物體數量//
    // Use this for initialization
    void Start () 
    {
        ray=new RaycastHit2D[5] ;
    }
    void FixedUpdate()
    {
        HitTest ();
    }
     void
HitTest() { hitNumber = Physics2D.LinecastNonAlloc (gameObject.transform .position,targetpos.transform.position ,ray,1<<LayerMask.NameToLayer("GameModel")); for (int i = 0; i < hitNumber; i++) { Debug.DrawLine(gameObject.transform .position ,ray[i].transform.position,Color.red); print ("ray{"
+i+"}.name"+ray[i].transform.name); } } }

1<<LayerMask.NameToLayer("GameModel") //在哪個層顯示,mask 只在”GameModel”層顯示。

這裡寫圖片描述