Unity_物理引擎Physics

发布于 2020-05-06  26 次阅读


前言

复习一下unity的物理系统,一段时间不用就容易忘。

正文

Rigidbody(刚体)

  • Mass 质量
  • Drag 空气阻力
  • AngularDrag 角阻力
  • Use Gravity 是否启用重力
  • Is Kinematic 是否是运动学
  • Interpolate 插值
    • none 不启用
    • Interpolate(内插值)
    • Extrapolate(外插值)
  • Collision Detection 碰撞检测
    • Discrete 不连续(碰撞器和碰撞器之间)
    • Continueous 连续(碰撞器与刚体)
    • Continuous Dynamic 动态连续(适用于告诉物体)
  • Constraints 约束
    • 坐标
    • 旋转

Collider(碰撞体)

  • Box Collider
    • Edit Collider 可编辑大小
    • IsTrigger 是否触发
    • Material 存放物理材质
    • Center 中心偏移值
    • Size 大小偏移值
  • Sphere Collider
    • Radius 半径
  • Capsule Collider
    • Height 高度
    • Direction 方向
  • Mesh Collider
    • Convex 凸起 (勾选会有碰撞)
  • Wheel Collider 车轮碰撞器

    • Wheel Damping Rate 车轮减震率
    • Suspension Distance 悬挂距离
    • Force App Point Distance
    • Suspension Spring 悬挂弹簧
    • Forward Friction 向前摩擦力
    • Sideways Firction 侧向摩擦力
    private void OnCollisionEnter(Collision collision)
    {
    }
    private void OnCollisionStay(Collision collision)
    {
    }
    private void OnCollisionExit(Collision collision)
    {
    }

Trigger(触发器)

private void OnTriggerEnter(Collider other)
{
}
private void OnTriggerStay(Collider other)
{
}
private void OnTriggerExit(Collider other)
{
} 

Physic Material(物理材质)

右键-》Create-》Physic Material。
Bounciness是弹球属性,可以做一个小弹球。

Force

GetComponent().AddForce();

Character Controller(角色控制器)

  • Slope Limit 坡度
  • Step Offset 台阶高度
  • Skin Width 皮肤厚度
  • Min Move Distance 最小移动距离

Joint(关节)

  • Hinge Joint 铰链关节
    将两个模型固定在一起,但是可以像钟摆那样动。

  • Fixed Joint 固定关节

  • Spring Joint 弹簧关节
    就跟正常的弹簧一样

  • Character Joint 角色关节
    人物关节

  • Configurable Joint 可配置关节

Cloth (布料)

勾选mesh上的点,点击运行可以随意变成一块布

Ray(射线)

if (Input.GetMouseButton(0))
{ 
    //从摄像机到单击处发出射线
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    if (Physics.Raycast(ray, out RaycastHit hitInfo))
    {
        //画出射线, 只有在Scene视图中才能看到
        Debug.DrawLine(ray.origin, hitInfo.point,Color.red);
        GameObject gameObj = hitInfo.collider.gameObject;
        Debug.Log("click object name is" + gameObj.name);
        //当射线碰撞目标的标签是Pickup时, 执行拾取操作
        if (gameObj.tag == "Pickup")
        {
            Debug.Log("pick up!");
        }
    }
}

不积跬步,无以至千里;不积小流,无以成江海。