Unity3D 之射線檢測

2021-09-25 05:01:40 字數 2135 閱讀 2649

射線檢測故名就是通過射線去檢測是否和碰撞器產生了交集,和碰撞器與碰撞器發生交集一樣,會返回乙個真。

射線的用法很多:比如檢測是否跳躍,通過向地面投射射線控制在地面時候可以跳起。

射擊遊戲中可以通過定長射線去判斷目標物體是否被擊中,等

主要用到的工具類是:

第一種是:

從開始位置到結束位置做乙個光線投射,如果與碰撞體互動,返回真。

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 乙個靜態的發射射線的方法,在場景中投下可...