unity物理檢測的幾種方式


(由於本人大多做2d游戲,因此以下以2d為主介紹,但是具體和3d相差不大)

在unity中有很多不同的物理檢測方式,但是大致可以分為以下幾種:

1.Physics2d檢測系列

  Physics2d.LineCast   //linecast與raycast相同,只是表現的方式不同,適合用於槍械的激光射線等

  Physics2D.RayCast

  Physics2D.LineCastAll   //獲得兩點之間的所有碰撞體,適合做視野檢測

  Physics2D.RayCastAll

  Physics2D.BoxCast    //往給定的方向的方形區域中的檢測,這里適合檢測前方是否有牆體等

  Physics2D.OverlapArea  //覆蓋范圍檢測

2.RigidBody2D檢測系列

  rigidbody2D.cast        //往某一個方向檢測除了自身和子物體意外的所有碰撞體,獲得所有碰撞點,這種方式的好處是可以檢測玩家是否站在某一個碰撞體上,從而決定是否可以進行跳躍操作,具體見我的博客《unity中利用純物理工具制作角色移動跳躍功能》

  rigidbody2D.overlapxx  //覆蓋范圍檢測

3.碰撞器與觸發器物理事件(常用)

 

在物理參數中常常遇到ContactFilter,這個參數其實是多個參數的集合體,為的是使得函數使用起來更加簡潔,最典型的參數:lanyermask和是否可以檢測觸發器

另外說一下,官方的手冊真的很清晰,即使是英文的,總體上也比較易懂

 

這里介紹一下BoxCast中的distance參數,這個distance是否可以理解為矩形往這個方向移動的一小段距離,在這個距離,或者說把這個矩形看作是一個很粗的射線的一個片元,好吧,我沒有做個相關檢測,這里我瞎猜一下。換種說法,這個矩形就好像一個photoshop畫筆的形狀,distance就是畫筆畫過的距離,當畫筆畫到終點,所覆蓋的區域所檢測到的碰撞體就是檢測到的結果;或者類似手電筒,distance是手電筒光的長度。簡單說,這是個有寬度的射線檢測。但是需要注意一個常常犯的錯誤,因為在一幀內BoxCast如果監測到碰撞了就會立刻停止向前,所以常常會出現box的size過大導致立即碰撞到了東西而返回,造成distance參數失去效果。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM