【Uinty】物理基礎

a.Rigidbody組件spring

b.Collider組件ide

c.Physics Material物理材料函數

d.Ragdoll布偶系統動畫

e.Joint關節組件this

【1】Rigidbody組件spa

Mass:質量,一般與體積無關。code

Drag:阻力。xml

Angular Drag:角阻力,數值意義上與阻力相同。應用環境例子:改變物體旋轉滾落的角速度。對象

Use Gravity:是否受重力影響。(能夠才Edit-Project setting-physics中設置)blog

Is Kinematic:是否應用運動學。一旦使用,物體將會失去物理特性。一般經過腳本調用這個參數來切換動畫。例如:奔跑的人物死亡,調用參數,人物中止,切換死亡動畫。

Interpolate:若是你的剛體運動有抖動,嘗試一下修改這個參數,None表示沒有插值,Interpolate表示根據上一幀的位置來作平滑插值,Extrapolate表示根據預測的下一幀的位置來作平滑插值。

Freeza Position:選中該選項,剛體將不受外力向某個方向發生位移變化。

Freeze Rotation:選中該選項,剛體將不會由於外力或者扭力而發生旋轉,只能經過腳本的旋轉函數來進行操做。

【2】Collider組件

根據形狀的不一樣分爲Box Collider ,Capsule Collider,Sphere Collider,Mesh Collider,Terrian Collider.

以Mesh Collider網格碰撞器爲例。

網格碰撞器用於複雜的模型,即沒法用矩形、膠囊、圓等簡單模型時用網格碰撞器來實現。

凸體 Convex:若是啓用,則此網格碰撞體 (Mesh Collider) 會與其餘網格碰撞體 Mesh Collider)碰撞。凸體網格碰撞體Convex Mesh Collider限制爲 255 個三角形。

觸發器 Is Trigger:若是啓用,此碰撞體Collider 則用於觸發事件。(若是既要檢測到物體的接觸又不想讓碰撞檢測影響物體移動或要檢測一個物件是否通過空間中的某個區域這時就能夠用到觸發器)

材質 Material:引用可肯定此碰撞體Collider與其餘碰撞體Collider的交互方式對應的物理材質 Physics Material。

Cooking Options:物理引擎對網格處理加工選項。

【3】Physics Material物理材料

Dynamic Friction:動力摩擦力,對象在運動時的摩擦力,取值範圍0~1。

Static Friction:靜態摩擦力,對象被放置在表面時的摩擦力,取值範圍0~1,取值接近0時可模擬冰的效果。

Bounciness:彈力或彈性,取值0-1,0表示不發生彈跳,即物體的動能徹底損失;1表示物體發生沒有動能損失的反彈效果。

a.Average:使用兩個摩擦力的平均值

b.Min:使用兩個摩擦力的最小值

c.Mix:使用兩個摩擦力的最大值

d.Multiply:使用兩個摩擦力的乘積

Bounce Combine:反彈組合,同摩擦力組合的選項相似。

【4】Ragdoll布偶系統

布偶系統是Unity提供的另外一種死亡肢體動做,去動畫更加逼真。

右鍵界面create—>3D Object—>Ragdoll,打開Create ragdoll界面。

依次添加3D模型中的各個節點,而後點擊create。

經過腳本設置其各個子節點的collider(true)和IsKinematic(true)能夠實現死亡畫面的切換。

這裏要注意的是,主體的Collider、Animator、NavMeshAgent等組件可能會與布偶系統中的Collider相互影響,須要在腳本設置中同時關閉主體的Collider、Animator、NavMeshAgent和IsKinematic(false),而且激活布偶系統的collider(true)和IsKinematic(true)。

注意事項:

模型必須以T字姿態站立,才能確保ragdoll的動做不會出現任何的錯誤。

布娃娃系統對資源消耗比較大。

是否勾選Enable Projection。

【5】Joint關節組件

關節組件能夠添加至多個遊戲對象中,而添加關節的遊戲對象將經過關節鏈接在一塊兒而且感受連帶的物理效果。

hinge joint 鏈條關節:將兩個物體以鏈條的形式綁在一塊兒,當力量大於鏈條的固定力矩時,兩個物體就會產生相互的拉力。

fixed joint 固定關節:將兩個物體永遠以相對的位置固定在一塊兒,即便發生物理改變,它們之間的相對位置也將不變。

spring joint 彈簧關節:將兩個物體以彈簧的形式綁定在一塊兒,擠壓它們會獲得向外的力,拉伸它們將獲得向裏的力。

character joint 角色關節:能夠模擬角色的骨骼關節。

configurable joint 自定義關節:能夠模擬任意關節的效果。

以固定關節爲例:

connectedBody:鏈接到的物體(必須是rigidbody)

breakForce:物體鏈接斷裂所須要的力

breakTorque:物體鏈接斷開所須要的扭力

------------------------------------------------------------------------

 public Animator anim;
    public Rigidbody charRigidbody;
    public CapsuleCollider capsuleCollider;
    public NavMeshAgent navMeshAgent;

    private Rigidbody[] rigidbodies;
    private Collider[] colliders;


    // Use this for initialization
    void Awake ()
    {
        rigidbodies = GetComponentsInChildren<Rigidbody>();
        colliders = GetComponentsInChildren<Collider>();

        SetCollidersEnabled(false);
        SetRigidBodiesKinematic(true);
    }

    void Update()
    {
        if(Input.GetMouseButtonDown(1))
        {
            ActivateRagdoll();
        }
    }
    
    private void SetCollidersEnabled(bool enabled)
    {
        foreach (Collider collider in colliders)
        {
            collider.enabled = enabled;
        }
    }

    private void SetRigidBodiesKinematic(bool kinematic)
    {
        foreach (Rigidbody rb in rigidbodies)
        {
            rb.isKinematic = kinematic;
        }
    }

    private void ActivateRagdoll()
    {
        capsuleCollider.enabled = false;
        charRigidbody.isKinematic = true;
        anim.enabled = false;
        navMeshAgent.enabled = false;

        SetCollidersEnabled(true);
        SetRigidBodiesKinematic(false);
    }
相關文章
相關標籤/搜索