相關(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就可以運行了。