(由於本人大多做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參數失去效果。