Unity3d自學之射線初識

相關api

1、Ray Camera.main.ScreenPointToRay(Vector3 pos)返回一條射線Ray從攝像機到屏幕指定一個點

2、Ray?Camera.main.ViewportPointToRay(Vector3?pos)返回一條射線Ray從攝像機到視口(視口之外無效)指定一個點

3、Ray射線類

4、RaycastHit光線投射碰撞信息

5、bool?Physics.Raycast(Vector3?origin,?Vector3?direction,?float?distance,?int?layerMask)

當光線投射與任何碰撞器交叉時為真,否則為假。

bool?Physics.Raycast(Ray?ray,?Vector3?direction,?RaycastHit?out?hit,?float?distance,?int?layerMask)

在場景中投下可與所有碰撞器碰撞的一條光線,并返回碰撞的細節信息()。

bool?Physics.Raycast(Ray?ray,?float?distance,?int?layerMask)

當光線投射與任何碰撞器交叉時為真,否則為假。

bool?Physics.Raycast(Vector3?origin,?Vector3?direction,?RaycastHit?out?hit,float?distance,?int?layerMask)

當光線投射與任何碰撞器交叉時為真,否則為假。

注意:如果從一個球型體的內部到外部用光線投射,返回為假。

參數理解:

origin?:在世界坐標中射線的起始點

direction:射線的方向

distance:射線的長度

hit:使用c#中out關鍵字傳入一個空的碰撞信息類,然后碰撞后賦值。可以得到碰撞物體的transform,rigidbody,point等信息。

layerMask:?只選定Layermask層內的碰撞器,其它層內碰撞器忽略。選擇性的碰撞

例子:

1.創建2個Cube其中Cube加一個子Cube做槍嘴

2.接下來創建一個腳本,我這里叫play


3.打開腳本進行編輯

private Ray ray = new Ray();

private RaycastHit hit;

private float length;

private int lay;

創建4個變量,分別是射線 Ray,碰撞信息 hit,射線長度 length,lay:我的理解是碰撞物的一個標記。

接下來在Start初始化這個變量。

void Start () { ? ??

//初始化Hom為給Cube2設置的Layer標記

?? ? lay = LayerMask.GetMask("Hom"); ??

}


接下來在Update添加下面的內容。

void Update () {

//當用戶按下Q

if (Input.GetKey(KeyCode.Q))

{

//設置射線的位置

ray.origin = transform.position;

//設置射線的朝向

ray.direction = transform.forward;

//判斷射線擊中碰撞體

if (Physics.Raycast(ray, out hit, length, lay))

{

//如果是就打印擊中了

Debug.Log("擊中了");

}

}

}

然后將腳本掛在Cube的槍嘴上。


然后將,Cube2的Layer設置為Hom就可以運行了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容