1. 程式人生 > >unity物理引擎中之關節和布料

unity物理引擎中之關節和布料

關節

關節分類

  1. 鉸鏈關節
  2. 固定關節
  3. 彈性關節
  4. 角色關節
  5. 可配置關節

鉸鏈關節(Hinge Joint)
• 鉸鏈關節 將兩個剛體 (Rigidbody) 組合在一起,從而將其約束為如同通過鉸鏈連線一樣進行移動。它十分適合門,也可用於對鏈條、鐘擺等進行模擬效果。
鉸鏈關節元件屬性:

	屬性:	                            功能:
•連線體 (Connected Body): 對關節 (Joint) 所依賴的剛體 (Rigidbody) 的可選引用。如果未設定,則關節 (Joint) 連線到世界座標。
•錨點 (Anchor):   主體圍繞其搖擺的軸的位置。
•軸 (Axis):   主體圍繞其搖擺的軸的方向。
知識講解
•使用彈簧 (Use Spring):  啟用使用彈簧 屬性。
•彈簧 (Spring) :   物件為移動到位所施加的力。
•目標位置 (Target Position):  使剛體 (Rigidbody) 相對於其連線體達到特定角度。
•阻尼 (Damper):   此值越高,物件減慢的幅度越大。
•使用電機 (Use Motor): 啟用使用電機 (Use Motor) 時使用的電機 (Motor) 的屬性。
•目標速率 (Target Velocity): 物件嘗試達到的速度。
•力 (Force):     為達到該速度而應用的力。

鉸鏈關節元件屬性:

屬性:	功能:
•自由旋轉 (Free Spin): 如果啟用,則電機從不用於對旋轉制動,僅進行加速。
•使用限制 (Use Limits) :如果啟用,則鉸鏈角度會限制在最小 (Min) 和最大(Max) 值內。
•限制 (Limits): 啟用使用限制 (Use Limits)s 時使用的限制 (Limits) 的屬性。
•最小 (Min): 旋轉可以達到的最小角度。
•最大 (Max):旋轉可以達到的最大角度。
•最小反彈 (Min Bounce): 物件在命中最小停止時反彈的量。
•最大反彈 (Max Bounce): 物件在命中最大停止時反彈的量。
•折斷力 (Break Force): 為使此關節 (Joint) 折斷而需要應用的力。
•折斷扭矩 (Break Torque): 為使此關節 (Joint) 折斷而需要應用的扭矩
•啟動碰撞Enable Collision : 如果啟用,將啟用與繫結物體之間的碰撞效果

用鉸鏈關節制作開門效果

  1. 給門框新增剛體(並取消重力),給門新增鉸鏈關節。

  2. 將門框作為門的連線體。
    課堂練習

  3. 調節門鉸鏈關節的位置以及角度。
    在這裡插入圖片描述

  4. 此時可通過電機或者彈力設定開門效果。
    • 電機方式:啟用電機,設定目標速率跟力,並限制開門的角度。
    • 彈性方式:啟用彈性,設定彈力大小,並給一個目標位置角度。
    固定關節(Fixed Joint)
    •固定關節將物件移動限制為依賴於其他物件。這在某種程度上類似於父子化 ,不過是通過物理而不是變換層級結構來實現。使用它們的最佳情況是在具有要方便地相互分離的物件,或是連線兩個物件的移動而不進行父子化時。
    固定關節元件屬性:

屬性:				功能:
連線體 (Connected Body): 對關節 (Joint) 所依賴的剛體 (Rigidbody) 的可選引用。如果未設定,則關節 (Joint) 連線到世界座標。
知識講解
折斷力 (Break Force):	為使此關節 (Joint) 折斷而需要應用的力
。
折斷扭矩 (Break Torque): 為使此關節 (Joint) 折斷而需要應用的扭矩
。
啟動碰撞Enable Collision : 如果啟用,將啟用與繫結物體之間的碰撞效果。

彈性關節(Spring Joint)
• 彈簧關節 將兩個剛體 (Rigidbody) 組合在一起,從而將其約束為如同通過彈簧連線一樣進行移動效果。 
彈性關節元件屬性:

屬性:			功能:
連線體 (Connected Body):對關節所依賴的剛體 (Rigidbody) 的可選引用
。
錨點 (Anchor): 物件區域性座標空間中定義關節中心的位置(靜止時)。這不是將物件拉向的位置。
知識講解
彈簧 (Spring): 彈簧的強度。
阻尼 (Damper): 彈簧在處於活動狀態時縮減的量。
最小距離 (Min Distance): 大於此值的距離不會使彈簧啟用。最大距離 (Max Distance): 小於此值的距離不會使彈簧啟用。
折斷力 (Break Force): 為使此關節折斷而需要應用的力。
折斷扭矩 (Break Torque): 為使此關節 折斷而需要應用的扭矩。
啟動碰撞Enable Collision : 如果啟用,將啟用與繫結物體之間的碰撞效果

給剛體新增力

rigidbody.AddForce(Vector3.forward*500);
//世界座標前方(Z軸)方向新增一個500的力。
rigidbody.AddForce(transform.forward*500);
//自己的座標前方(Z軸)方向新增一個500的力。

布料

Unity4中, 需要對SkinnedMeshRenderer使用SkinnedCloth, 或者對Cloth Renderer使用Interactive Cloth, 很麻煩, 在Unity5中, Cloth合二為一了.
Cloth只能必須和Skinned Mesh Renderer搭配使用, 但是這不代表使用簡單的物體時還必須在Max中匯出一個帶有蒙皮資訊的FBX, 其實可以新建一個GameObject然後賦予Cloth元件, 這會自動新增Skinned Mesh Renderer元件, 然後在Skinned Mesh Renderer元件中賦予基本體的Mesh上去並且設定正確的材質也完全可以.
布料可以接受外部影響,但完全不會將影響賦予外部剛體, 換句話說, 布料系統的物理模擬是單向的.

ClothConstraint布料約束
在這裡插入圖片描述

MaxDistance可以設定每個頂點最大可移動距離,最常用的用法是將不能動的頂點的Max Distance設定為0.
Surface Penetration表面嵌入控制,控制的是頂點最大可以嵌入到Mesh裡面的程度. 在布料網格頂點比較稀疏的情況下可以明顯對比出差別.
在這裡插入圖片描述

Visualization這裡能夠選擇當前在Scene檢視中預覽Max Distance還是Surface Penetration. (這兩者二選一), 還能選擇是否讓操作影響視口背面的頂點ManipulateBackfaces.
Select編輯模式要先通過框選, 或者Shift+點選來多選, 來選中頂點, 然後勾選Max Distance或者Surface Penetration前面的複選框, 代表我現在要改變選中的頂點的值了。然後再在後面的數值裡面輸入想要的數值就可以了, 要想將當前有數值的頂點設定為Unconstrained, 只需要選中那些帶有數值的頂點然後將對應複選框取消勾選即可。

布料屬性介紹

Stretching Stiffness—拉扯硬度.

Bending Stiffness—彎曲硬度.

Use Tethers—預設開啟, 繩索屬性,兩個固定點之間的屬性

Use Gravity—是否使用世界重力.

Damping—阻尼會應用於每個布料頂點. 要想打造看上去抖動更小的布料, 可以調整這個屬性.

External Acceleration—恆定加速度(模擬風效)

Random Acceleration—隨機加速度.(模擬風效)

World Velocity Scale與World Acceleration Scale共同組成布料運動時的物理模擬造成的影響比例.

Friction—當布料碰到在這個列表中存在的Collider時所產生的摩擦力, 這隻會影響布料的模擬. 上面說過了布料的物理模擬是單向的.

Collision Mass Scale— 碰撞質量

Use Continuous Collision—使用Continuous Collision, 增加消耗, 減少直接穿透碰撞的機率.

Use Virtual Particles—新增一個虛擬粒子碰撞每個三角形來提高穩定性。

Solver Frequency—顯然是一個優化引數, 預設120很高了, 可以試著調低一些.

Sleep Threshold—靜止閾值.

出於效能的考慮, 可以對Cloth產生影響的Collider只有兩種, SphereCollider以及CapsuleCollider, 但是SphereCollider可以賦予兩個為一組(當然了還可以只賦予一個, 第二個保持null), 那麼通過組合這兩個SphereCollider可以出現第三種, Unity會將這組的兩個SphereCollider進行相連, 那麼就可以有圓錐形的Collider