Unity3d自學(xué)之射線初識

相關(guān)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)

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

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

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

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

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

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

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

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

參數(shù)理解:

origin?:在世界坐標(biāo)中射線的起始點

direction:射線的方向

distance:射線的長度

hit:使用c#中out關(guān)鍵字傳入一個空的碰撞信息類,然后碰撞后賦值??梢缘玫脚鲎参矬w的transform,rigidbody,point等信息。

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

例子:

1.創(chuàng)建2個Cube其中Cube加一個子Cube做槍嘴

2.接下來創(chuàng)建一個腳本,我這里叫play


3.打開腳本進行編輯

private Ray ray = new Ray();

private RaycastHit hit;

private float length;

private int lay;

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

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

void Start () { ? ??

//初始化Hom為給Cube2設(shè)置的Layer標(biāo)記

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

}


接下來在Update添加下面的內(nèi)容。

void Update () {

//當(dāng)用戶按下Q

if (Input.GetKey(KeyCode.Q))

{

//設(shè)置射線的位置

ray.origin = transform.position;

//設(shè)置射線的朝向

ray.direction = transform.forward;

//判斷射線擊中碰撞體

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

{

//如果是就打印擊中了

Debug.Log("擊中了");

}

}

}

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


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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容