關於Unity中關節的使用(一)

1: 剛體的形狀大小在物理世界裏面是不變的,但是不少時候,咱們須要多個剛體來配合使用;
2: 關節: 鏈接剛體與剛體的對應的物理模擬;
3: 關節類型: 鉸鏈關節,彈簧關節, 固定關節, 角色關節,可配置關節html

 

鉸鏈關節spring

1: 將兩個剛體束縛在一塊兒,在二者之間產生鉸鏈效果;
2: 鉸鏈關節屬性
connect Body:目標鏈接的剛體;
Anchor 本體錨點,鏈接目標旋轉時圍繞的中心點;
Connect Anchor 鏈接目標的錨點,本體旋轉時圍繞的中心點;自動計算出來的。
Axis 錨點和目標錨點的方向,指定了本體和鏈接目標的旋轉方向;繞哪一個軸旋轉
Auto Configure Connected Anchor: 勾選時,僅給出錨點的座標,系統將自動計算出目標錨點座標;
Using Spring: 是否使用彈簧;
Sprint 彈力;
Damper: 阻尼,物體移動受到阻礙的大小,越大物體越慢;
Target Postion: 目標位置,彈簧旋轉的目標角度;
Use Moto 使用電機,規定關節腫是否使用電機;
TargetVelocity: 目標速率,對象試圖達到的速度,會以此速度與目標速度進行加速和減速;
Force 此屬性是達到目標速率的力;
Free Spine 規定了收控制對象的旋轉是否會破壞,若啓用,馬達將永遠不會破壞旋轉,只會加速;
Use Limits規定了關節在旋轉的時候是否受限;
Min 規定了剛體旋轉的達到的最小角度
Max 規定了剛體旋轉的達到的最大角度
Min Bonus 規定了剛體旋轉的達到的最小彈跳值
Max Bonus 規定了剛體旋轉的達到的最小彈跳值
Break Force 給出一個力的限值,當關節受到的力超過這個,關節損壞;
Break Torque 給出一個力矩的極限,當關節受到力矩超過此值時關節損壞;this

 

 

建立一個空節點hinge_jointspa

建立一個圓柱體Cylinicer爲它的子節點3d

建立一個立方體Cube爲它的子節點,爲了區分,給它一個材質,顏色爲紅色code

給圓柱體Cylinicer和立方體Cube都增長剛體組件Rigidbody,都去掉重力,設置圓柱體Cylinicer的Constraint約束Freeze PositionX,Y,Z,RotationX,Y,Zhtm

給圓柱體Cylinicer增長Hinge Joint組件,裏面的Connected Body屬性設置爲Cube 對象

建立一個腳本test_hinge_joint掛載到Cube上,要給它一個力blog

複製代碼
using UnityEngine; using System.Collections; public class test_hinge_joint : MonoBehaviour { Rigidbody body; // Use this for initialization void Start () { this.body = this.GetComponent<Rigidbody>(); this.body.AddForce(new Vector3(0, 0, 100));//給一個z軸方向的力  } // Update is called once per frame void Update () { } }
複製代碼

 

 

固定關節ci

1: 將兩個剛體束縛在一塊兒, 相對位置保持不變,永遠不會變化;
2: 固定關節屬性
connect Body:目標鏈接的剛體;
Break Force 給出一個力的限值,當關節受到的力超過這個,關節損壞;
Break Torque 給出一個力矩的極限,當關節受到力矩超過此值時關節損壞;
Enable collision 容許碰撞檢測;
Enable Preprocess 容許進行預處理;

 

建立一個空節點fixed_joint

建立一個球體Sphere1爲它的子節點,建立一個球體Sphere2爲它的子節點,爲了區分,給Sphere2一個材質,顏色爲紅色

給球體Sphere1和Sphere2都增長剛體組件Rigidbody,都去掉重力

給球體Sphere1增長fixed_joint組件,裏面的Connected Body屬性設置爲Sphere2

建立一個腳本test_fix_joint掛載到Sphere2上,要給它一個力

複製代碼
using UnityEngine; using System.Collections; public class test_fix_joint : MonoBehaviour { Rigidbody body; // Use this for initialization void Start() { this.body = this.GetComponent<Rigidbody>(); this.body.AddForce(new Vector3(0, 0, 100));//給它一個z軸方向的力  } // Update is called once per frame void Update () { } }
複製代碼

二者開始旋轉,可是彼此之間的位置距離都沒有變化,你到哪裏我到哪裏

若是固定二者或其中一個的Freeze RotationX,Y,Z,那麼二者會朝着Z軸方向直線運動

 

 

彈簧關節

1: 將兩個剛體束縛在一塊兒, 相對位置保持不變,永遠不會變化;
2: 彈簧關節屬性
connect Body:目標鏈接的剛體;
Anchor 本體錨點,鏈接目標旋轉時圍繞的中心點;
Connect Anchor 鏈接目標的錨點,本體選擇時圍繞的中心點;
Axis 錨點和目標錨點的方向,指定了本體和鏈接目標的旋轉方向;
Auto Configure Connected Anchor: 勾選時,僅給出錨點的座標,系統將自動計算出目標錨點座標;
Sprint 彈力;
Damper: 阻尼,物體移動受到阻礙的大小,越大物體越慢;
Min distance 彈簧兩端最小距離
Max distance 彈簧兩端最大距離
Break Force 給出一個力的限值,當關節受到的力超過這個,關節損壞;
Break Torque 給出一個力矩的極限,當關節受到力矩超過此值時關節損壞;
Enable collision 容許碰撞檢測;
Enable Preprocess 容許進行預處理;

 

建立一個空節點spring_joint

建立一個正方體Cube爲它的子節點,建立一個球體Sphere爲它的子節點,爲了區分,給Sphere一個材質,顏色爲紅色

給正方體Cube和球體Sphere都增長剛體組件Rigidbody,都去掉重力,設置正方體Cube的Constraint約束Freeze PositionX,Y,Z,RotationX,Y,Z,設置球體Sphere的Constraint約束Freeze RotationX,Y,Z。

給球體Cube增長spring_joint組件,裏面的Connected Body屬性設置爲Sphere

建立一個腳本test_spring_joint掛載到Sphere上,要給它一個力

複製代碼
using UnityEngine; using System.Collections; public class test_spring_joint : MonoBehaviour { Rigidbody body; // Use this for initialization void Start() { this.body = this.GetComponent<Rigidbody>(); this.body.AddForce(new Vector3(200, 0, 0));//給球體一個x軸方向的力,它會像彈簧同樣在正方體面前彈來彈去  } // Update is called once per frame void Update () { } }
複製代碼

 

 

可配置關節

建立一個空節點config_joint

建立一個正方體Cube爲它的子節點,建立一個球體Sphere爲它的子節點,爲了區分,給Sphere一個材質,顏色爲紅色

給正方體Cube和球體Sphere都增長剛體組件Rigidbody,都保留重力,設置正方體Cube的Constraint約束Freeze PositionX,Y,Z,設置球體Sphere的Constraint約束Freeze PositionX,Y,Z。

給球體Cube增長config_joint組件,修改X Motion, Y Motion, Z Motion 爲Locked,裏面的Connected Body屬性設置爲Sphere,

建立一個腳本test_spring_joint掛載到Sphere上,雜重力的做用下兩個物體像單擺同樣運動。

 

來自:http://www.cnblogs.com/HangZhe/p/7214731.html

相關文章
相關標籤/搜索