【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);
    }
相关文章
相关标签/搜索