问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Unity3D Rigidbody API详解

创作时间:
作者:
@小白创作中心

Unity3D Rigidbody API详解

引用
CSDN
1.
https://m.blog.csdn.net/qq_42603590/article/details/144502466

Unity中的Rigidbody组件是一个用于物理模拟的组件,它赋予游戏对象物理特性,使其能够在物理环境中移动并与其他对象发生碰撞。Rigidbody组件通过模拟重力、碰撞、摩擦等物理行为,使得游戏对象的行为更加真实和自然。

Rigidbody组件解析

Rigidbody的基本属性和功能:

  • 质量(Mass):物体的质量,影响物体的运动和碰撞效果。
  • 阻力(Drag):模拟空气阻力或摩擦,值越高,物体运动时减速越快。
  • 角阻力(Angular Drag):影响物体旋转的阻力。
  • 使用重力(Use Gravity):如果启用,物体将受到重力影响。
  • 运动学(Is Kinematic):如果启用,物体将不会受到物理引擎的力或碰撞影响,通常用于手动控制对象移动。
  • 插值(Interpolate):控制刚体运动的抖动情况,有三种选择:None、Interpolate、Extrapolate。
  • 碰撞检测(Collision Detection):控制避免高速运动的对象穿过其他对象而不检测碰撞,有三种选择:Discrete、Continuous、Continuous Dynamic。

使用方法

2-1、AddForce

AddForce(Vector3 force, ForceMode mode = ForceMode.Force)

功能:对刚体施加一个力,使刚体产生加速度并开始运动。力的大小和方向由Vector3参数指定,ForceMode参数决定了力的施加方式。

参数解释:

  • force:一个三维向量,表示力的大小和方向。例如,new Vector3(0, 10, 0)表示在 y 轴正方向施加一个大小为 10 的力。
  • mode:力的模式,有以下几种选择:
  • ForceMode.Force(默认):按照牛顿第二定律(F = ma)施加力,力会持续作用,产生连续的加速度。
  • ForceMode.Acceleration:直接设置刚体的加速度,忽略物体的质量。
  • ForceMode.Impulse:施加一个瞬间的冲量,使刚体获得瞬间的速度变化。这类似于一个瞬间的撞击力,通常用于模拟碰撞等瞬间的力作用。
  • ForceMode.VelocityChange:直接改变刚体的速度,忽略物体的质量和力的持续时间。

代码示例:

using UnityEngine;

public class AddForceExample : MonoBehaviour
{
    public Rigidbody rb;

    void Start()
    {
        // 在刚体的z轴正方向施加一个大小为10的力(持续力)
        rb.AddForce(new Vector3(0, 0, 10));
    }
}

在这个示例中,使用AddForce在 z 轴正方向施加一个大小为 10 的持续力,使物体开始向 z 轴正方向加速运动。

2-2、AddTorque

AddTorque(Vector3 torque, ForceMode mode = ForceMode.Force)

功能:对刚体施加一个扭矩,使刚体绕轴旋转。扭矩的大小和方向由Vector3参数指定,ForceMode参数和AddForce中的类似,决定扭矩的施加方式。

参数解释:

  • torque:一个三维向量,表示扭矩的大小和方向。例如,new Vector3(0, 0, 5)表示绕 z 轴施加一个大小为 5 的扭矩。
  • mode:扭矩的模式,和AddForce中的ForceMode相同,包括ForceMode.Force、ForceMode.Acceleration、ForceMode.Impulse和ForceMode.VelocityChange。

代码示例:

using UnityEngine;

public class AddTorqueExample : MonoBehaviour
{
    public Rigidbody rb;

    void Start()
    {
        // 绕x轴施加一个大小为10的扭矩(持续扭矩)
        rb.AddTorque(new Vector3(10, 0, 0));
    }
}

使用AddTorque绕 x 轴施加一个大小为 10 的持续扭矩,使物体开始绕 x 轴旋转。

2-3、velocity

功能:获取或设置刚体的速度。这是一个属性,用于直接访问和修改刚体的线速度。

代码示例:

using UnityEngine;

public class VelocityExample : MonoBehaviour
{
    public Rigidbody rb;

    void Start()
    {
        // 设置刚体的速度为在x轴正方向速度为5,y和z轴速度为0
        rb.velocity = new Vector3(5, 0, 0);
    }

    void Update()
    {
        // 获取刚体的速度并打印
        Vector3 currentVelocity = rb.velocity;
        Debug.Log("Current velocity: " + currentVelocity);
    }
}

在Start函数中设置了刚体的速度,然后在Update函数中获取并打印当前速度,这样可以在运行时查看刚体速度的变化情况。

2-4、angularVelocity

功能:获取或设置刚体的角速度。这也是一个属性,用于直接访问和修改刚体的旋转速度。

代码示例:

using UnityEngine;

public class AngularVelocityExample : MonoBehaviour
{
    public Rigidbody rb;

    void Start()
    {
        // 设置刚体的角速度为绕y轴旋转速度为2,x和z轴旋转速度为0
        rb.angularVelocity = new Vector3(0, 2, 0);
    }

    void Update()
    {
        // 获取刚体的角速度并打印
        Vector3 currentAngularVelocity = rb.angularVelocity;
        Debug.Log("Current angular velocity: " + currentAngularVelocity);
    }
}

在Start函数中设置了刚体的角速度,然后在Update函数中获取并打印当前角速度,用于观察刚体旋转速度的变化。

2-5、useGravity

功能:一个布尔属性,用于控制刚体是否受重力影响。当设置为true(默认)时,刚体将受到重力作用;当设置为false时,刚体不受重力影响。

代码示例:

using UnityEngine;

public class UseGravityExample : MonoBehaviour
{
    public Rigidbody rb;

    void Start()
    {
        // 关闭刚体的重力影响
        rb.useGravity = false;
    }
}

在Start函数中通过将useGravity属性设置为false,使刚体不受重力作用,这在一些特殊的游戏场景(如太空飞行模拟等)中非常有用。

2-6、mass

功能:获取或设置刚体的质量。质量会影响刚体在受到力作用时的加速度(根据牛顿第二定律F = ma)。

代码示例:

using UnityEngine;

public class MassExample : MonoBehaviour
{
    public Rigidbody rb;

    void Start()
    {
        // 设置刚体的质量为2
        rb.mass = 2;
    }
}

在Start函数中设置了刚体的质量为 2,这会改变刚体在受到相同力作用时的加速度。例如,如果施加一个大小为 10 的力,质量为 1 时加速度为 10,质量为 2 时加速度为 5。

2-7、drag

功能:获取或设置刚体的空气阻力系数。空气阻力会使刚体在运动过程中逐渐减速,阻力大小与速度和阻力系数有关。

代码示例:

using UnityEngine;

public class DragExample : MonoBehaviour
{
    public Rigidbody rb;

    void Start()
    {
        // 设置刚体的空气阻力系数为0.5
        rb.drag = 0.5;
    }
}

在Start函数中设置了刚体的空气阻力系数为 0.5。当刚体运动时,会受到一定的空气阻力作用,速度会逐渐降低。

2-8、angularDrag

功能:获取或设置刚体的角阻力系数。角阻力会使刚体的旋转速度逐渐降低,类似于线性运动中的空气阻力。

代码示例:

using UnityEngine;

public class AngularDragExample : MonoBehaviour
{
    public Rigidbody rb;

    void Start()
    {
        // 设置刚体的角阻力系数为0.3
        rb.angularDrag = 0.3;
    }
}

Start函数中设置了刚体的角阻力系数为 0.3。当刚体旋转时,旋转速度会因为角阻力而逐渐减慢。

壁纸分享


© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号