射线碰撞
Physics.Raycast 光線投射
1.一個靜態的發射射線的方法,在場景中投下可與所有碰撞器碰撞的一條光線。
參數解釋:
origin:射線起始點
direction:射線方向
distance:射線長度
layerMask:只選定Layermask層內的碰撞器,其它層內碰撞器忽略。
返回布爾類型,當光線投射與任何碰撞器交叉時為真,否則為假。(注意:如果從一個球型體的內部到外部用光線投射,返回為假。 )這一點測試不成功!
2.在場景中投下可與所有碰撞器碰撞的一條光線,并返回碰撞的細節信息。Unity3D教程手冊
Parameters參數
origin:在世界坐標,射線的起始點。
direction:射線的方向。
distance:射線的長度。
hitInfo:如果返回true,hitInfo將包含碰到器碰撞的更多信息。
layerMask:只選定Layermask層內的碰撞器,其它層內碰撞器忽略。
Returns:當光線投射與任何碰撞器交叉時為真,否則為假。
使用c#中out關鍵字傳入一個空的碰撞信息類,然后碰撞后賦值??梢缘玫脚鲎参矬w的transform,rigidbody,point等信息。
詳細解釋一下: LayerMask 層蒙版
每一個物體都有一個Tag和Layer標簽,tag就是一個簡單的標簽,可以用來區分不同的物體,LayerMask的作用是可以選擇性地過濾物體,例如當投射射線時,比如camera.cullingmask和光線投射時候。Unity3D教程手冊
可以在TagManager中編輯tag和Layer。然后設置物體的Layer層級,在攝像機中設置camera.cullingmask,可以控制攝像機的渲染層級,用在射線上,可以控制射線碰撞什么,不碰撞什么。
//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);
}
}
上面的例子是從當前腳本所綁定的物體做標點向右發射長度100的射線,射線碰撞層級為8,其他層級忽略。為了測試,我們在碰撞到物體后畫一條紅色線條,表示射線,停留一秒鐘。上面這些是射線的一些基本操作。
總結
- 上一篇: IDEA使用-Debug回到上一步
- 下一篇: axios 重新发起上次请求