相關(guān)api
1前酿、Ray Camera.main.ScreenPointToRay(Vector3 pos)返回一條射線Ray從攝像機(jī)到屏幕指定一個(gè)點(diǎn)
2匈子、Ray?Camera.main.ViewportPointToRay(Vector3?pos)返回一條射線Ray從攝像機(jī)到視口(視口之外無效)指定一個(gè)點(diǎn)
3杂数、Ray射線類
4、RaycastHit光線投射碰撞信息
5彻磁、bool?Physics.Raycast(Vector3?origin,?Vector3?direction,?float?distance,?int?layerMask)
當(dāng)光線投射與任何碰撞器交叉時(shí)為真留凭,否則為假。
bool?Physics.Raycast(Ray?ray,?Vector3?direction,?RaycastHit?out?hit,?float?distance,?int?layerMask)
在場景中投下可與所有碰撞器碰撞的一條光線升略,并返回碰撞的細(xì)節(jié)信息()微王。
bool?Physics.Raycast(Ray?ray,?float?distance,?int?layerMask)
當(dāng)光線投射與任何碰撞器交叉時(shí)為真,否則為假品嚣。
bool?Physics.Raycast(Vector3?origin,?Vector3?direction,?RaycastHit?out?hit,float?distance,?int?layerMask)
當(dāng)光線投射與任何碰撞器交叉時(shí)為真炕倘,否則為假。
注意:如果從一個(gè)球型體的內(nèi)部到外部用光線投射翰撑,返回為假罩旋。
參數(shù)理解:
origin?:在世界坐標(biāo)中射線的起始點(diǎn)
direction:射線的方向
distance:射線的長度
hit:使用c#中out關(guān)鍵字傳入一個(gè)空的碰撞信息類,然后碰撞后賦值眶诈≌谴祝可以得到碰撞物體的transform,rigidbody,point等信息。
layerMask:?只選定Layermask層內(nèi)的碰撞器逝撬,其它層內(nèi)碰撞器忽略浴骂。選擇性的碰撞
例子:
1.創(chuàng)建2個(gè)Cube其中Cube加一個(gè)子Cube做槍嘴
2.接下來創(chuàng)建一個(gè)腳本,我這里叫play
3.打開腳本進(jìn)行編輯
private Ray ray = new Ray();
private RaycastHit hit;
private float length;
private int lay;
創(chuàng)建4個(gè)變量,分別是射線 Ray球拦,碰撞信息 hit,射線長度 length靠闭,lay:我的理解是碰撞物的一個(gè)標(biāo)記。
接下來在Start初始化這個(gè)變量坎炼。
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就可以運(yùn)行了檩淋。