Unity3D 5.6 剛體的介紹,---rigidbody

Jack2k發表於2021-09-09

剛體?
在任何力的作用下,體積和形狀都不發生改變的物體叫做“剛體”(Rigid body)。
它是力學中的一個科學抽象概念,即理想模型。
事實上任何物體受到外力,不可能不改變形狀。
實際物體都不是真正的剛體。

  1. 什麼是剛體?

    1. rigidbody剛體是, 使GameObject遊戲物件具有物理行為的主要元件.
    2. 附著了剛體的GameObject, 將立刻受到重力的影響.
    3. 如果GameObject還新增了一個或多個Collider元件,
      GameObject將透過傳入的碰撞來進行移動.
    4. 附加了Rigidbody剛體元件的遊戲物件,
      不能透過更改Transform屬性(如位置和旋轉)來移動.
      而應該從指令碼開控制移動.
      應該使用power力來推動GameObject,讓物理引擎計算結果.
    5. 在某些情況下,可能希望GameObject擁有剛體,而不受物理引擎的控制.
      例如,您可能希望直接從指令碼程式碼控制字元,但仍允許其由觸發器檢測. ("有點難懂,待續")
    6. 這種從指令碼產生的非物理運動稱為運動學上的運動。
    7. Rigidbody剛體元件具有稱為Is Kinematic("運動學(上)的")的屬性,
      將GameObject從物理引擎的控制中移除,並允許其從指令碼運動地移動
    8. 可以從指令碼中更改Is Kinematic的值,以允許物件開啟和關閉物理,
      但這伴隨著效能開銷,應該謹慎使用
      Sleeping 睡眠
      當剛體移動比定義的最小線性或旋轉速度慢時,物理引擎假定它已經停止。
      當這種情況發生時,GameObject不會再次移動,直到它收到碰撞或強制,
      因此它被設定為“睡眠”模式。
      這種最佳化意味著在下一次“喚醒”之前(也就是重新設定運動),
      不會花更新Rigidbody的處理器時間

    在大多數情況下,Rigidbody元件的睡眠和醒來都是透明的。
    但是,如果靜態對撞機(即沒有Rigidbody的一個)被移動到其中或透過修改Transform位置,
    則GameObject可能無法喚醒。這可能就是說,當Rigidbody GameObject掛在空中時,
    地板被從下面移出。在這種情況下,可以使用該WakeUp函式明確地喚醒GameObject

剛體(Rigidbody)是Unity物理引擎中的重要元件,
一個遊戲物件新增了剛體元件以後就開始接受物理力學的影響了,比如重力、空氣摩擦力、碰撞產生的推力。

在新增剛體元件之前,遊戲物件的移動受Transform元件控制,
在新增剛體元件之後,物件的運動就被剛體元件所接管了,物件的狀態只能透過施加力來實現。

少數情況下,你可能想在指令碼中控制一個新增了剛體元件的物件的運動狀態,
但卻不是透過施加力的方式,有一種方法可以實現,就是在剛體元件中勾選is kinematic。

啟用了kinematic後,剛體元件就應該被稱為運動學剛體了,剛體因此而失去了對物理力學的影響,比如說不再受重力的影響,不在碰撞力下移動。好處是這個物件能夠觸發碰撞函式,壞處是產生了一些額外的效能開銷。

當剛體的移動速度接近於0時,剛體會進入“睡眠模式”,降低效能開銷。
當剛體受到力的影響而再次移動時,剛體會被“喚醒”。在某些特殊情況下可以使用喚醒函式喚醒剛體。

在給一個物件新增對撞機(Collider)元件後,可以根據物件是否有剛體元件以及剛體元件的配置情況劃分為三種型別。

靜態對撞機:一個物件有對撞機元件,沒有剛體元件。
剛體對撞機:一個物件有對撞機元件,而且有剛體元件。
運動學剛體對撞機:一個物件有對撞機元件,有剛體元件,而且勾選了is kinematic。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/36/viewspace-2798756/,如需轉載,請註明出處,否則將追究法律責任。

相關文章