U3D physics总结
U3D physics總結
物理系統基于collider,?沒有collider的物體不會發生任何主動和被動的物理交互,也不會產生trigger相關消息。
當且僅當A和B都有碰撞體時,兩者才有可能發生交互,才有可能產生trigger消息。
碰撞體collider分為兩大類:trigger collider,?非trigger collider
trigger collider就是觸發器,一個勾選了Is trigger的?collider不產生任何物理交互,只在其它collider進入其范圍時觸發一個OnTriggerEnter消息,停留其間觸發OnTriggerStaty消息,退出時觸發OnTriggerExit消息。
Is trigger選項將會使RigidBoy組件的物理碰撞效果失效,但會受到重力的作用。
非trigger collider就是物理碰撞體。一個取消勾選Is trigger的collider就是一個物理碰撞體(這是默認選項)。
又分為兩類:障礙物(或稱靜態碰撞體static collider,只有collider組件)和剛體(或稱動態碰撞體dynamic collider,同時有collider和rigidbody組件)
static collider一般為場景中不動的障礙物,會阻擋其它碰撞體的運動但不會被推動。如果非要移動靜態碰撞體則會導致物理系統額外的計算開銷及不可知的錯誤,對游性能造成很外的影響,不要這樣使用。
dynamic collider就是動態碰撞體,剛體,具有collider和rigidbody兩種組件。可以碰撞其它碰撞體,也可以被碰。
剛體如果勾選了rigidbody組件的 Is kinematic屬性將變為運動學剛體,這種物體與障礙物的表現有些類似,可以稱為半動態碰撞體,可移動的障礙物。運動學剛體可以推動其它物體卻不可以被其它物體推動。且不受重力影響。
不存在一個物體既是觸發器又是是碰撞體。只能二選一。要么是trigger,?要么非trigger
?總結:物理系統中物體的分類:觸發器(collider組件勾選了Is?Trigger),障礙物(僅有collider組件),可移動障礙物(有collider和rigidbody組件且rigidbody組件勾選了Is Kinematic),剛體(同時具有collider和rigidbody組件)
觸發器不產生任何物理交互。障礙物靜止不動,會阻攔其它則體運動。
可移動障物可推動其它剛體或被剛體推動,不與障礙物互動。
剛體與則體可以互動。
——————————————————————————————————————————————————————
2018.8.9?
物理系統
1,collider存在的目的是為了物理碰撞,而不是僅為了給出物體的包圍盒
collider + rigidbody 稱為動態collider,這在游戲中模擬運動物件,受物理作用(被撞動,被阻停等)
僅collider而無rigidbody稱靜態collider,不受物理作用,這在游戲中用來模擬不動物,如地面,墻等
不要移動靜態collider(設置position),它對性能沖擊很大(因為物理碰撞是使用場景八叉樹來做的,
而八叉樹的建立很慢,將場景中所有靜態物件按空間八叉樹組織起來,通常是游戲開始前創建完成,
當靜態物件位置改變時就需要重建八叉樹,而動態物件不是維護在此樹上的,故移動動態collider消耗不大)
總之,靜態collider在運行時不要做這些操作:move, enable/disenable, scale
2,剛體:讓物體可以受力和給予力(作用,反作用力)
3,meshcollider 不參與碰撞,必須勾選convex才行,因為mesh太復雜,convex是mesh的近似
4,碰撞或觸發器消息都是廣播的,如OnTriggerEnter或OnCollisionEnter
假設:有A,B,C三個物體,B,C靜止不動,A(勾選了isTrigger)向B,C(勾選了isTrigger或未勾選)運動,
A 同時(或先后)與B,C發生了接觸,則:
A收到一次B進入的消息 - OnTriggerEnter(b)
A收到一次C進入的消息 - OnTriggerEnter(c)
B收到一次A進入的消息 - OnTriggerEnter(a)
C收到一次A進入的消息 - OnTriggerEnter(a)
對于物理碰撞,同理:
假設:有A,B,C三個物體,B,C靜止不動,A(有RigidBody)向B,C(有RigidBody或無)運動,
A 同時(或先后)與B,C發生了接觸,則:
A收到一次B碰撞的消息 - OnCollisionEnter(b)
A收到一次C碰撞的消息 - OnCollisionEnter(c)
B收到一次A碰撞的消息 - OnCollisionEnter(a)
C收到一次A碰撞的消息 - OnCollisionEnter(a)
5,Kinematic Rigidbody Collider
當剛體組件的Kinematic勾選時,它就成了這樣一個運動學剛體,這時候它只阻擋物體不會被移動,
這用來模擬門之類的,當門鎖上時,不可被移動,當門打開時,可以被推動。
不同于靜態collider, 運動學剛體在運動中會給其它物體施加摩擦力并喚醒(剛體停止運動后就進入睡眠)其它物體
?
posted on 2016-11-08 12:48 時空觀察者9號 閱讀(...) 評論(...) 編輯 收藏
總結
以上是生活随笔為你收集整理的U3D physics总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: U3D 扩展方法 Dotween t
- 下一篇: 安全使用委托的-