unity3d 2d 射線檢測
阿新 • • 發佈:2019-01-06
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”層顯示。