射線檢測故名就是通過射線去檢測是否和碰撞器產生了交集,和碰撞器與碰撞器發生交集一樣,會返回乙個真。
射線的用法很多:比如檢測是否跳躍,通過向地面投射射線控制在地面時候可以跳起。
射擊遊戲中可以通過定長射線去判斷目標物體是否被擊中,等
主要用到的工具類是:
第一種是:
從開始位置到結束位置做乙個光線投射,如果與碰撞體互動,返回真。
debug.drawline(transform.position, line_floor.position, color.red, 1f);bool grounded = physics.linecast(transform.position, line_floor.position, 1 << layermask.nametolayer("ground"));
if (grounded)第二種:else
在場景中投下可與所有碰撞器碰撞的一條光線。可控制投射方向和投射長度
vector3 fwd = transform.transformdirection(-vector3.up);bool grounded = physics.raycast(transform.position,fwd, 10 );
if (grounded)第三種:else
在場景中投下可與所有碰撞器碰撞的一條光線,並返回碰撞的細節資訊。
raycasthit hit;注意,這裡返回的碰撞器的資訊是依次的,先返回第乙個碰撞的,第乙個碰撞結束後才返回第二個。bool grounded = physics.raycast(transform.position, -vector3.up, out hit);
// 可控制投射距離bool grounded = physics.raycast(transform.position, -vector3.up, out hit,100.0);
if (grounded)
else
投射一條光線並返回所有碰撞,也就是投射光線並返回乙個raycasthit結構體。
raycasthit hits;第五種:hits = physics.raycastall(transform.position, -vector3.up, 100.0f);
int i = 0;
while (i < hits.length)
控制碰撞的層,可以設定射線的長度,並且用debug檢視射線的長度。
使用層的時候,要注意,要給別的物件也附上層的名字,不能用預設,會出問題。
第五種:
返回球型半徑之內(包括半徑)的所有碰撞體 collider。可用於拾取物品用。
Unity3D 槍戰遊戲 發射子彈 射線檢測
一 子彈的碰撞檢測 因為子彈的移動速度非常的快,那麼如果為子彈新增乙個collider,就有可能檢測不到了。因為collider是每一幀在執行,第一幀子彈可能在100公尺處,那麼下一幀就在900公尺處了,那麼中間的障礙物就不能被檢測到了。所以就需要射線檢測 在每一幀的執行,都向上一幀發射射線,不斷地...
Unity3D 槍戰遊戲 發射子彈 射線檢測
一 子彈的碰撞檢測 因為子彈的移動速度非常的快,那麼如果為子彈新增乙個collider,就有可能檢測不到了。因為collider是每一幀在執行,第一幀子彈可能在100公尺處,那麼下一幀就在900公尺處了,那麼中間的障礙物就不能被檢測到了。所以就需要射線檢測 在每一幀的執行,都向上一幀發射射線,不斷地...
Unity3D總結 關於射線碰撞
1.static function raycast origin vector3 direction vector3 distance float mathf.infinity layermask int kdefaultraycastlayers bool 乙個靜態的發射射線的方法,在場景中投下可...