1. 程式人生 > >關於Unity中關節的使用(一)

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

blog call pan spine cti 加速 wid cal 技術分享

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

鉸鏈關節

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 給出一個力矩的極限,當關節受到力矩超過此值時關節損壞;

技術分享

創建一個空節點hinge_joint

創建一個圓柱體Cylinicer為它的子節點

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

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

給圓柱體Cylinicer增加Hinge Joint組件,裏面的Connected Body屬性設置為Cube

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

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 () { } }

固定關節

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上,雜重力的作用下兩個物體像單擺一樣運動。

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