Unity 射線檢測

2021-10-03 05:29:12 字數 1437 閱讀 2549

要使用射線檢測,物體必須是觸發器或者碰撞器。

什麼是觸發器,碰撞器請看

射線檢測函式在physics 類中。由於射線無法看見,除錯起來非常不方便。unity 給我們提供了乙個畫射線的方法debug.drawray,便於除錯。debug.drawray需要在update中使用,否則渲染一幀就會消失。一幀時間太短。人眼是看不見的。

physics.raycast使用此函式來發射一條射線。射線碰到物體將停止。也就是最多檢測到乙個物體。

引數:ray : 射線,這是乙個結構體,有兩個欄位origin 描述起點,direction秒速方向。

maxdistance:這條射線的最大長度,預設值是無窮大。

layermask:只檢查哪些層。這個數字的意義不是十進位制,是二進位制數。unity最多有32個層,乙個int 整數 是32位二進位制數。那位2進製數是1,那麼就表示將檢查這一層,比如說5 這個數表示的二進位制是 101 ,第0位與第2位二進位制數是1表示將檢查第0層 與 第2層。預設是2的31次方減1。也就是全部檢測。

raycasthit:是射線擊中的一些資訊。

querytriggerinteraction: 是用來控制是否忽略觸發器的。ignore表示忽略掉觸發器,collide 表示檢測觸發器。useglobal 是說遵循unity編輯器的設定。此項設定在edit->project setting->physics 中的queris hit triggers,如果勾選則將檢測觸發器,不勾選則不檢測觸發器。不論如何碰撞器一定會檢測。

physics.raycastall:此函式與 physics.raycast 的區別是可以檢測多個被射線碰到的物體。返回值是乙個碰撞資訊陣列,不管有沒有碰到物體,陣列都不是空值,如果沒有碰到物體陣列的長度將是0。

physics.raycastnonalloc:此函式與physics.raycastall 類似,也是檢測被射線碰到的物體。區別在與返回值,physics.raycastall 返回值是乙個整數,是被射線碰撞到的物體數量。碰撞到的結果資訊是raycasthit的乙個陣列,使用者自己例項化後傳入陣列。射線碰撞到的物體數量不受returns陣列長度的影響。但是碰撞資訊受到return長度的影響,如果長度不足以裝下碰撞資訊,後面的碰撞資訊將會被忽略。

physics.spherecast這個太不好理解。raycast發射的是一條射線,sphere 可以想象成發射無數條射線,呈現圓柱形(乙個原柱形從底部往上發射射線)。檢測的是乙個範圍。另外的spherecastall與spherecastnonalloc的參考raycastall,raycastnonalloc。

除此之外還有boxcast、capsulecast、linecast。

linecast與射線非常相像,射線只有乙個端點,向乙個方向發射。線段有兩個端點,沒有方向。就是點與點的連線。類似於射線檢測。只是用法不一樣。

Unity 射線檢測

射線是乙個無窮的線,開始於origin並沿著direction方向。例 ray ray new ray new vector3 1,1,1 new vector3 0,0,0 例2 ray ray2 camera.main.screenpointtoray input.mouseposition 從...

unity射線檢測碰撞

使用普通的碰撞體檢測,檢測時不連續的,是每隔0.02秒進行的離散檢測,這樣在被檢測的物體速度比較快時,就會由直接穿過物體的可能,這個時候,就需要使用射線檢測了。為了實現高速狀態下的碰撞檢測,要使用連續的射線來完成這樣乙個功能。使用 new ray建立射線new ray 發射位置,發射方向乘上發射速度...

Unity 常用射線檢測方法

1.普通射線檢測 一般用於檢測某乙個物體 ray ray camera.main.screenpointtoray input.mouseposition debug.drawray ray.origin ray.direction color.red raycasthit hit if physi...