2D樞紐關節 (Hinge Joint 2D)

2D樞紐/鉸鏈關節(Hinge Joint 2D) 是 Unity 中的一個 2D 物理組件。

  • 它可以讓遊戲物件(GameObject)圍繞一個特定的點旋轉
  • 這個關節可以讓兩個點重疊,這兩個點可以是
    • 兩個2D剛體(Rigidbody 2D)物件,或是
    • 一個2D剛體物件另一個為一個世界空間中固定的點。若要連接到世界空間中固定的點可以透過將 Connected Rigidbody 設為 None
  • 這個關節可以向連接的兩個點施加一個線性力(linear force)
  • 通常用於模擬門、槓桿或鐘擺等旋轉機制。

2D樞紐/鉸鏈關節(Hinge Joint 2D)具有三個約束條件,這些條件都是可選的

  1. 保持兩個2D剛體(Rigidbody 2D)物件上的兩個錨點(anchor point)之間的相對線性距離(relative linear distance)
    • 此約束確保錨點之間的距離保持不變。
  2. 保持兩個2D剛體(Rigidbody 2D)遊戲物件上的兩個錨點之間的角速度(angular speed)
    • 可以使用Maximum Motor Force屬性限制最大扭矩(maximum torque)來限制角速度。
  3. 保持角度(angle)在指定的弧度(arc)範圍內
    • 此約束確保角度在一定範圍內。

可以使用這個關節來建構需要像旋轉樞軸行為的物理遊戲物件。例如:

  • 翹翹板的樞軸(see-saw pivot):水平部分連接到基座。使用關節的角度(Angle)限制來模擬翹翹板的最高點和最低點。
  • 剪刀(scissors)的樞軸:剪刀用鉸鏈連接在一起。使用關節的角度限制來模擬剪刀的閉合和最大打開。
  • 簡單的車輪連接到車體:車輪的樞軸點在車輪的中心與車體相連。你可以使用2D樞紐/鉸鏈關節(Hinge Joint 2D) 的馬達(motor)來旋轉車輪。
屬性 功能
Enable Collision 啟用這個屬性後,可以偵測碰撞。
Connected Rigidbody 指定此關節連接到的其他遊戲物件(GameObject)。如果將此設置為「None」,則關節的另一端固定在由「Connected Anchor」設置定義的空間點。
Auto Configure Connected Anchor 啟用此屬性以自動設置此2D鉸鏈關節(Hinge Joint 2D)連接到的遊戲物件的錨點(Anchor)位置。如果啟用此屬性,則不需要為「Connected Anchor」屬性輸入座標。
Anchor 定義此遊戲物件的2D剛體(Rigidbody2D)上的關節(joint)端點連接的位置(以x、y座標表示)。
Connected Anchor 定義這個關節(joint)端點要連接到另一個遊戲物件的2D剛體(Rigidbody2D)上的位置(以x、y座標表示)。
Use Motor 啟用此選項以對關節應用馬達動力。
Motor 選擇此選項以展開此屬性的設置。
Motor Speed 設定馬達要達到的目標速度(每秒度數)。
Maximum Motor Force 設定馬達在嘗試達到目標速度時可以施加的最大扭矩(torque)(或旋轉力(rotation))。
Use Limits 啟用此選項以限制旋轉的角度(rotation angle)。
Angle Limits 選擇此選項以展開對角度限制的設置。當Use Limits啟用時,就會應用這些限制。
Lower Angle 設定旋轉圓弧(rotation arc)下端(lower end)允許的極限。
Upper Angle 設定旋轉圓弧(rotation arc)上端(upper end)允許的極限。
Break Action 設置當超過力(force)臨界值或達到扭矩臨界值(torque threshold)時採取的動作。
Break Force 設置力的臨界值,當超過時這個關節就會執行選擇的Break Action。預設值為Infinity,表示不執行Break Action
Break Torque 設置扭矩的臨界值,當超過時這個關節就會執行選擇的Break Action。預設值為Infinity,表示不執行Break Action

Reference

2D車輪關節(Wheel Joint 2D)

2D車輪關節(Wheel Joint 2D):是一種物理關節,可以用它來模擬轉動的車輪,

  • 可以為它施加馬達動力(motor power),
  • 它使用了懸吊彈簧(suspension spring)來保持與車輛主體(main body of the vehicle)的距離。

這種關節可用來模擬車輪(wheels)和懸掛系統(suspension)。其目的是保持兩個點在一條延伸到無限遠的直線上,同時使它們重疊(overlap)。這兩個點可以是兩個Rigidbody2D組件,也可以是一個Rigidbody2D組件和世界中的一個固定位置(通過將Connected Rigidbody設置為None來連接到世界中的固定位置)。

  • 簡單的說:2D車輪關節(Wheel Joint 2D),讓兩個點保持在同一條直線上,而這條直線是可以延伸到無限遠的。同時,當沒有外力作用時,這兩個點會保持在一起(即重疊)。

Wheel Joint 2D類似於Slider Joint 2D(無馬達動力或限制約束)和Hinge Joint 2D(無限制約束)的組合。
這種關節對兩個連接的剛體(rigid body)物件施加線性力(linear force),使它們保持在線上,並施加角度馬達(angular motor)以使物件在線上旋轉(rotate),同時用彈簧(spring)來模擬車輪懸掛(wheel suspension)。

設置
Maximum Motor Speed(最大馬達速度)與Maximum Motor Force(最大馬達動力)控制角馬達速度,讓兩個剛體物體旋轉。
Maximum Motor Force(最大馬達動力):設置角馬達的最大扭矩。

  • 即馬達所能施加的最大旋轉力。這個最大扭矩的設置對於控制車輪的轉動速度和力量非常重要。例如:
    • 如果 Maximum Motor Force 設置得太小,馬達可能無法提供足夠的扭矩來驅動車輪,特別是在遇到障礙或需要加速的情況下。
    • 如果 Maximum Motor Force 設置得太大,馬達可能會施加過大的扭矩,導致車輪快速旋轉,可能會影響車輛的穩定性
      模擬懸掛
      可以設置車輪懸掛的硬度和運動,以模擬不同程度的懸掛效果。例如,模擬硬且幾乎不動的懸掛:
  • 設置高頻率(Frequency)(1,000,000是最高值)== 硬懸掛。
  • 設置高阻尼比(Damping Ratio)(1是最高值)== 幾乎不動的懸掛。

若要模擬有彈性且自由運動的懸掛,可以使用以下設置:

  • 設置低頻率 == 鬆弛的懸掛。
  • 設置低阻尼比 == 可動的懸掛。

保持零相對線性距離(zero relative linear distance):在兩個剛體物體的錨點之間指定的線上保持零相對線性距離。
保持角速度(angular speed):在兩個剛體物體的錨點之間保持角速度(通過Maximum Motor Speed選項設置速度,通過Maximum Motor Force設置最大扭矩)。

應用場景

  • 這種關節適用於構建需要像是通過旋轉樞軸連接,但不能脫離指定線的物理對象。例如:模擬具有馬達驅動的車輪。
屬性 功能
Enable Collision 啟用這個屬性後,可以偵測碰撞。
Connected Rigid Body 指定此關節連接到的其他遊戲物件(GameObject)。如果將此設置為「None」,則關節的另一端固定在由「Connected Anchor」設置定義的空間點。
Auto Configure Connected Anchor 啟用此屬性以自動設置此關節連接到的遊戲物件的錨點(Anchor)位置。如果啟用此屬性,則不需要為「Connected Anchor」屬性輸入座標。
Anchor 定義此遊戲物件的2D剛體(Rigidbody2D)上的關節(joint)端點連接的位置(以x、y座標表示)。
Connected Anchor 定義這個關節(joint)端點要連接到另一個遊戲物件的2D剛體(Rigidbody2D)上的位置(以x、y座標表示)。
Suspension 選擇此選項以展開此屬性的設置。
Damping Ratio(阻尼比) 控制彈簧(spring)振盪(oscillation)的關節設置。較高的阻尼比意味著彈簧會更快停止振盪
Frequency 設定遊戲物件接近所需分離距離時彈簧振盪的頻率(以每秒週期數為單位)。範圍為0到1,000,000,值越高,彈簧越硬,也就是說越不容易來回振動。注意:將頻率設置為零會創建最硬的彈簧類型關節(即不振動)
Angle 設定懸掛系統(suspension)的世界(World)運動角度
Use Motor 啟用此選項以對關節應用馬達動力。
Motor 選擇此選項以展開此屬性的設置。
Motor Speed 設定馬達要達到的目標速度(每秒度數)。
Maximum Motor Force 設定馬達在嘗試達到目標速度時可以施加的最大扭矩(torque)(或旋轉力(rotation))。
Break Action 設置當超過力(force)臨界值或達到扭矩臨界值(torque threshold)時採取的動作。
Break Force 設置力的臨界值,當超過時這個關節就會執行選擇的Break Action。預設值為Infinity,表示不執行Break Action
Break Torque 設置扭矩的臨界值,當超過時這個關節就會執行選擇的Break Action。預設值為Infinity,表示不執行Break Action

Damping Ratio(阻尼比):描述系統在受到擾動後振盪及衰減的情形。阻尼比越大,物件受力振盪後越快恢復原狀。

  • 無阻尼:= 0 , 對應沒有阻尼的簡諧運動。
  • 欠阻尼:< 1 , 指數遞減且振盪
  • 過阻尼:> 1 , 沒有振盪的指數遞減
  • 臨界阻尼:= 1 , 介於過阻尼及欠阻尼之間,是許多工程應用想要的結果
  • https://zh.wikipedia.org/zh-tw/%E9%98%BB%E5%B0%BC%E6%AF%94

Reference:https://docs.unity3d.com/Manual/class-WheelJoint2D.html

Physics Material實體材質

實體材質,決定你的物體摩擦力與彈性,讓你的物件可以滑動或是反彈

在專案的畫面中使用滑鼠右鍵,找到Create ->

  • 如果是2D,選擇 -> 2D -> Physics Material 2D
  • 如果是3D,選擇 -> Material

參數簡介

  • Dynamic Friction:已在移動時使用的摩擦力,通常為0到1之間的值
    • 值為0時,就像冰一樣,會滑動
    • 值為1時,將使物件迅速靜止,除非使用很大的力或重力推動該物件
  • Static Friction:當物件靜止在表面上時的摩擦力,通常為0到1之間
    • 值為0時,就像冰一樣,會滑動
    • 值為1時,將使物件很難推動
  • Bounciness:表面的彈性,
    • 值為0時,不會反彈
    • 值為1時,在反彈時不會產生任何能量損失,可以一直反彈
  • Friction Combine:兩個碰撞物件的摩擦力的組合方式
    • Average:對兩個摩擦值求平均值
    • Minimum:使用兩個值中最小的值
    • Maximum:使用兩個值中最大的值
    • Multiply:兩個摩擦值相乘
  • Bounce Combine:兩個碰撞物件的彈性組合方式,其模式與Friction Combine相同

碰撞器(Collider)

剛體(Rigidbody)賦予了物件可以接受力,而碰撞器(Collider)則賦予物件碰撞的形狀(edit collider),以及是否可以會其他物件碰撞,越複雜形狀的碰撞器越耗效能。

參數簡介

  • Is Trigger:是否是觸發器,如果啟用則該collider將用於觸發事件,並被物理引擎忽略,主要用於進行沒物理效果的碰撞檢測
  • Material:物理材質,可以確定碰撞體和其他物件碰撞時的交互方式
  • Center:碰撞體在物件局部中的中心點位置

Unity Rigidbody

Rigidbody(剛體)component:可將Rigidbody應用到你的遊戲物件(GameObject)上,讓這個GameObject可以被物理的方式控制,也將是說讓這個GameObject可以被physics forces(物理力,如推力,阻力等) 與 torque(扭力)作用。

另外在2D遊戲中,則是使用Rigidbody2D component它只會做用在2D環境,也就是說只能在XY plane上作用。

參數簡介

  • Body Type(Rigidbody2D)
    • Dynamic(動態,預設值)
      • 運動時受力影響,並且接受完全的物理模擬,包括重力、碰撞、施加力等,最耗效能。
    • Kinematic(運動學)
      • 不受力影響但可移動,其運動行爲是被我們開發者完全限定的,可以碰撞,沒有設定質量(Mass)的參數
      • 只會與Dynamic2D碰撞
    • Static(靜態)
      • 不受力影響也不會動,會與動態類型剛體碰撞,最不消耗效能。
  • Mass:質量,預設為千克,質量越大慣性越大,質量越大越不容易被別的物體推動
  • Drag:空氣阻力,根據移動物件時影響物件的空氣阻力大小,0表示沒有空氣阻力
  • Angular Drag:根據樞紐旋轉物件時影響物件的空氣阻力大小,0表示沒有空氣阻力
  • Use Gravity:是否受重力影響
  • Is Kinematic:如果啟用此選項,則物件不會被物理引擎驅動,只能透過Transform對其進行操作,
    • 對於移動平台,或者如果要動畫化附加了HingeJoint的剛體,此屬性非常有用
  • Interpolate:插值運算,讓剛體物體移動更平滑
    • None:不使用
    • Interpolate:根據前一幀的變換來平滑變換
    • Extrapolate:根據下一幀估計的變換來平滑變換
  • Collision Detection:碰撞檢測,用於防止快速移動的物體其他物體而不檢測碰撞
    • Discrete:預設值,離散檢測,
      • 最不耗效能的檢測,
      • 對場景中所有其他碰撞體使用離散碰撞檢測,
      • 用於一般碰撞。
      • 可能會出現當物體移動太快造成偵測不到與其他物體碰撞。
    • Continuous:連續檢測,
      • 對動態碰撞體(具有剛體),使用離散檢測
      • 對靜態碰撞體(沒有剛體),使用連續檢測
      • 對於所有其他剛體碰撞使用離散檢測
      • 較消耗物理效能
    • Continuous Dynamic:連續動態檢測
      • 對動態碰撞體(具有剛體)與靜態碰撞體(沒有剛體)都使用連續碰撞檢測
      • 對於所有其他剛體碰撞使用離散檢測
      • 用於快速移動的物體
    • Continuous Speculative:連續推測檢測
      • 對剛體和碰撞體使用推測性連續碰撞檢測,
      • 一般比Continuous Dynamic的成本低
  • Constraints:約束,對剛體運動的限制
    • Freeze Position:有選擇地停止剛體沿世界X, Y, 和 Z軸的移動
    • Freeze Rotation:有選擇地停止剛體圍繞局部X, Y, 和 Z軸的轉動

Collision Detection的效能消耗為Continuous Dynamic > Continuous Speculative > Continuous > Discrete

無剛體 Discrete Continuous Continuous Dynamic Continuous Speculative
無剛體 不檢測碰撞 Discrete Continuous Continuous Continuous Speculative
Discrete Discrete Discrete Discrete Discrete Continuous Speculative
Continuous Continuous Discrete Discrete Continuous Continuous Speculative
Continuous Dynamic Continuous Discrete Continuous Continuous Continuous Speculative
Continuous Speculative Continuous Speculative Continuous Speculative Continuous Speculative Continuous Speculative Continuous Speculative