物理系统(一)

物理系统主要由以下几部分组成:Rigidbody(刚体)、Character Controller(角色控制器)、Collider(碰撞器)、Cloth(布料)、Joint(关节)

如图:

一、Rigibdody

● Mass: 质量

● Drag: 阻力(空气阻力)

● Angular Drag: 旋转阻力

● Use Gravity: 使用重力

● Is Kinematic: 是否运动学(若激活则物体不受物理引擎的作用)

● Interpolate: 插值(当刚体运动抖动时可使用)

  ▶ None: 没有

  ▶ Interpolate: 内插值(基于上一帧的变换来平滑本帧的变换)

  ▶ Extrapolate:  外插值(基于下一帧的预估)

● Collision Detection: 碰撞检测

  ▶ Discrete: 不连续

  ▶ Continuous: 连续

  ▶ Continuous Dynamic: 动态连续

● Constraints: 约束

 二、Collider

● Is Trigger: 启用触发器

● Material: 物理材质

● Center: 中心(碰撞器与游戏对象中心的相对位置)

● Size : 大小

●  Dynamaic Friction: 动态摩擦力。物体滑动时的摩擦力,通常为0到1之间。

● Static Friction: 静态摩擦力。

● Bounciness: 弹力。0时不反弹,1时的反弹不损耗能量

● Friction Combine: 摩擦力的组合方式。定义两个碰撞体的摩擦力如何相互作用

● Bounce Combine: 反弹组合

  ▶Average: 平均。使用两个摩擦力的均值

  ▶Minimum: 取最小值

  ▶Multiply: 相乘。两个摩擦力的乘积

  ▶Maximum: 取最大值

● Radius: 半径

● Height: 高度

● Direction: 方向

  网格碰撞器和其他有一些区别。首先网格碰撞器可以和其他碰撞器碰撞,但是两个网格碰撞器之间不会发生碰撞,要想产生碰撞需要勾选 Convex 。(网格碰撞器会占用更多的系统资源)

● Inflate Mesh: 网格膨胀

  Wheel Collider:车轮碰撞器,专门针对陆上交通工具而设计。

● Wheel Damping Rate: 车轮减震率

● Suspension Distance: 最大车轮悬挂伸缩距离,以自身坐标计算。悬挂总是通过自身Y轴伸展向下。

● Force App Point Distance:

● Suspension Spring: 悬挂弹簧

  ▶Spring: 弹力。该值越大可使悬挂越快达到目标位置

  ▶Damper: 阻尼

  ▶ Target Position: 目标位置

● Forward Friction: 车轮指向的摩擦力(向前)

  ▶Extremum Slip: 滑动极值

  ▶Extremum Value: 极限值

  ▶Asymptote Slip: 滑动渐进值

  ▶Asymptote Value: 渐进值

  ▶Stiffness: 刚性因子

● Sideways Friction: 车轮侧面摩擦力

  ▶Extremum Slip: 滑动极值

  ▶Extremum Value: 极限值

  ▶Asymptote Slip: 滑动渐进值

  ▶Asymptote Value: 渐进值

  ▶Stiffness: 刚性因子

●  Material: 物理材质

● Terrain Data: 地形

● Enable Tree Colliders: 

三、Character Controller

  角色控制器和刚体不能同时使用。如果你的角色需要受到重力,你就需要在脚本中模拟重力;如果你希望你的角色受到物理效果的影响,你最好使用刚体而不是角色控制器。

  在Unity物理引擎中有两种检测碰撞的方法,一种是刚体+碰撞器跟其他的碰撞器碰撞;另一种是 Character Controller与其他的碰撞器碰撞。

  两种方法的主要区别是 Character Controller 的方法与其他的物体碰撞后并不会对他们产生任何力的作用(这种方法一般用于摄像机浏览场景时,需要控制摄像机不穿透场景中的物体时使用),而刚体+碰撞器的方法则会对游戏场景中的物体产生力的作用

● Slope Limit: 爬坡限制

● Step Offset: 台阶高度

● Skin Width: 皮肤厚度,即两个碰撞器可以相互渗入的厚度(较大的值会导致颤抖,较小的值会导致角色卡住,一般设为 Radius 的10%)

● Min Move Distance:最小移动距离(如果小于该值则角色不会移动)

★ 角色控制器有专门的碰撞检测方法 OnControllerColliderHit。
★角色控制器不能将钢体推开,如果要做这件事可以使用 OnControllerColliderHit。
★在使用 Move 方法移动时,collisionFlags 属性能指明是哪个部分发生了碰撞

    /// <summary>
    /// 这个方法调用角色控制器,控制角色移动并模拟重力
    /// </summary>
    float speed = 6f;
    float jumpSpeed = 8f;
    float gravity = 20f;
    private Vector3 moveDirection = Vector3.zero;
    void Update()
    {
        CharacterController controller = GetComponent<CharacterController>();
        //如果角色控制器接触地面
        //通过轴重新计算 moveDirection
        if (controller.isGrounded)
        {
            moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
            moveDirection = transform.TransformDirection(moveDirection);
            moveDirection *= speed;
            //跳跃
            if (Input.GetButton("Jump"))
            {
                moveDirection.y = jumpSpeed;
            }
        }
        //模拟重力
        moveDirection.y -= gravity * Time.deltaTime;
        //移动控制,调用Move方法
     //Move:方法通过一个增量参数控制角色移动 SimpleMove:方法通过一个速度参数控制角色移动。
controller.Move(moveDirection * Time.deltaTime); } /// <summary> /// 这个方法用来推开角色控制器碰到的所有刚体 /// </summary> public float pushPower = 2.0F; void OnControllerColliderHit(ControllerColliderHit hit) { Rigidbody body = hit.collider.attachedRigidbody; //没有刚体,返回0 if (body == null || body.isKinematic) return; //我们不想推动在我们下边的物体。moveDirection(当碰撞发生时,角色控制器的方向) if (hit.moveDirection.y < -0.3F) return; //根据移动方向计算推的方向 //我们只把物体推向一旁,而不是往上或往下 Vector3 pushDir = new Vector3(hit.moveDirection.x, 0, hit.moveDirection.z); //速度=推动方向*推动速度 body.velocity = pushDir * pushPower; }

 

四、Cloth

Cloth组件专门为人物服装设计,同时配合 Skinned Mesh Renderer 使用

● Cast Shadows: 投射阴影

● Receive Shadows: 接受阴影

● Motion Vectors: 运动矢量

● Materials: 材质列表

  ▶Size: “Material”的数量

  ▶Element 0:

● Light Probes: 光探头

  ▶Blend Probes: 混合探头

  ▶Use Proxy Volume:

● Reflection Probes: 反射探头

  ▶Blend Probes: 混合探头

  ▶Blend Probes And Skybox:

  ▶Simple:

● Anchor Override: 锚定覆盖

● Lightmap Parameters:

● Quality: 质量。影响单个点的最大骨骼数量

● Update When Offscreen: 画面外更新

● Skinned Motion Vectors: 蒙皮运动矢量

● Mesh: 用于蒙皮的网格

● Root Bone: 根节点

● Bounds: 渲染器的边界框

  ▶Center:

  ▶Extents:

● Stretching Stiffnes: 拉伸刚度。用于设置布料的抗拉伸程度,0-1之间,数值越大越不容易拉伸。

● Bending Stiffness: 弯曲刚度。用于设置布料的抗弯曲程度,0-1之间,数值越大越不容易拉伸。

● Use Tethers: 应用约束。

● Use Gravity: 使用重力

● Damping: 阻尼

● External Acceleration: 外部加速度

● Random Acceleration: 随机加速度

● World Velocity Scale: 定义角色在世界空间移动对布料顶点的影响(基于空气阻力)

● World Acceleration Scale: 角色加速度对布料顶点的影响

● Friction: 布料摩擦

● Collision Mass Scale: 碰撞质量

● Use Continuous Collision: 使用连续碰撞

● Use Virtual Paticles: 使用虚拟粒子。每个三角形添加一个虚拟粒子提供碰撞稳定性

● Solver Frequency: 每秒解算器迭代次数

● Sleep Threshold : 睡眠阙值

● Capsule Colliders:

● Sphere Colliders:

五、Joint(关节)

● Connected Body: 连接体,为刚体指定的关节连接物,如不设定,则与世界相连

● Anchor: 锚点,用于定义关节中心,也就是物件将被拖去的点。

● Axis: 坐标轴,摇摆方向的坐标,基于本地坐标系

● Auto Configure Connected Anchor:

● Connected Anchor: 

● Use Spting: 是否使用弹簧

● Spring: 弹簧

  ▶Spring: 弹簧力

  ▶Damper: 阻尼

  ▶Target Position: 弹簧的目标角度。弹簧拉向这个角度

● Use Motor: 是否使用马达

● Motor: 马达

  ▶Target Velocity: 目标速率

  ▶Force: 力

  ▶Free Spin: 自由转动

● Use Limits: 是否有限制

● Limis: 限制

  ▶Min: 最小。能达到的最小角度

  ▶Max: 最大

  ▶Bounciness: 最小弹跳

  ▶Bounce Min Velocity: 最大弹跳

  ▶Contact Distance: 接触距离

● Break Force: 破坏力。破坏关节的力的大小。(Infinity:默认无穷大)

● Break Torque: 破坏扭矩。破坏关节的扭力的大小

● Enable Collision:

● Enable Preprocessing:

● Fixed Joint: 固定关节。当你想要两个没有父子关系的物体一起运动,可是又希望他能受力而分开时使用

● Break Force: 破坏力。破坏关节的力的大小

● Break Torque: 破坏扭矩。破坏关节的扭力的大小

● Spring Joint: 弹簧

● Min Distance/Max Distance:弹簧在这两个之间是正常状态,不激活弹簧或者说不受力。(一般为0)

 

posted @ 2017-08-21 21:37  LiuChangwei  阅读(1255)  评论(0编辑  收藏  举报