射线碰撞
Physics.Raycast 光線投射
1.一個(gè)靜態(tài)的發(fā)射射線的方法,在場(chǎng)景中投下可與所有碰撞器碰撞的一條光線。
參數(shù)解釋:
origin:射線起始點(diǎn)
direction:射線方向
distance:射線長(zhǎng)度
layerMask:只選定Layermask層內(nèi)的碰撞器,其它層內(nèi)碰撞器忽略。
返回布爾類(lèi)型,當(dāng)光線投射與任何碰撞器交叉時(shí)為真,否則為假。(注意:如果從一個(gè)球型體的內(nèi)部到外部用光線投射,返回為假。 )這一點(diǎn)測(cè)試不成功!
2.在場(chǎng)景中投下可與所有碰撞器碰撞的一條光線,并返回碰撞的細(xì)節(jié)信息。Unity3D教程手冊(cè)
Parameters參數(shù)
origin:在世界坐標(biāo),射線的起始點(diǎn)。
direction:射線的方向。
distance:射線的長(zhǎng)度。
hitInfo:如果返回true,hitInfo將包含碰到器碰撞的更多信息。
layerMask:只選定Layermask層內(nèi)的碰撞器,其它層內(nèi)碰撞器忽略。
Returns:當(dāng)光線投射與任何碰撞器交叉時(shí)為真,否則為假。
使用c#中out關(guān)鍵字傳入一個(gè)空的碰撞信息類(lèi),然后碰撞后賦值。可以得到碰撞物體的transform,rigidbody,point等信息。
詳細(xì)解釋一下: LayerMask 層蒙版
每一個(gè)物體都有一個(gè)Tag和Layer標(biāo)簽,tag就是一個(gè)簡(jiǎn)單的標(biāo)簽,可以用來(lái)區(qū)分不同的物體,LayerMask的作用是可以選擇性地過(guò)濾物體,例如當(dāng)投射射線時(shí),比如camera.cullingmask和光線投射時(shí)候。Unity3D教程手冊(cè)
可以在TagManager中編輯tag和Layer。然后設(shè)置物體的Layer層級(jí),在攝像機(jī)中設(shè)置camera.cullingmask,可以控制攝像機(jī)的渲染層級(jí),用在射線上,可以控制射線碰撞什么,不碰撞什么。
//Raycast hit
RaycastHit hit;
LayerMask mask = 1 << 8;
void testRay(){
if(Physics.Raycast(transform.position,Vector3.right,out
hit,100, mask.value)){
Debug.DrawLine(transform.position,hit.point,Color.red,1);
}
}
上面的例子是從當(dāng)前腳本所綁定的物體做標(biāo)點(diǎn)向右發(fā)射長(zhǎng)度100的射線,射線碰撞層級(jí)為8,其他層級(jí)忽略。為了測(cè)試,我們?cè)谂鲎驳轿矬w后畫(huà)一條紅色線條,表示射線,停留一秒鐘。上面這些是射線的一些基本操作。
總結(jié)
- 上一篇: IDEA使用-Debug回到上一步
- 下一篇: tcp 和 dcp 的几大区别