Unity中Rigidbody 刚体组件和Rigidbody类是什么?

news2024/11/14 22:32:41

Rigidbody 刚体组件

Rigidbody 是 Unity 中的一个组件,它可以让你的游戏对象像真实世界中的物体一样移动和碰撞。想象一下,你有一个小球,你希望它像真实世界中的球一样滚动、弹跳和碰撞,那么你就可以给这个小球添加一个 Rigidbody 组件。

为什么要用 Rigidbody?

当你给一个游戏对象添加 Rigidbody 组件后,Unity 的物理引擎就会接管这个对象的运动。即使你不写任何代码,这个对象也会受到重力的影响,向下掉落,并且当它碰到其他物体时会发生碰撞。

比如,你有一个小球和一个地板,如果你给小球添加了 Rigidbody 组件,小球就会掉到地板上,并且会弹起来。

如何控制 Rigidbody?

Rigidbody 还提供了一个编程接口(API),让你可以通过代码来控制对象的运动。比如,你可以通过施加力来让小球滚动,或者通过施加扭矩来让它旋转。

举个例子,如果你想让一辆汽车在游戏中移动,你可以通过编程来模拟车轮施加的力。有了这些信息,Unity 的物理引擎就可以处理汽车的其他运动,比如加速和碰撞。

什么时候使用 FixedUpdate?

在编写代码时,建议在 FixedUpdate 函数中应用力和更改 Rigidbody 的设置,而不是在 Update 函数中进行。这是因为物理更新是以固定的时间步长进行的,与帧更新不一致。FixedUpdate 在每次物理更新之前立即调用,因此在那里进行的任何更改都会直接处理。

常见问题:为什么物理看起来像慢动作?

初学者在使用 Rigidbody 时常见的一个问题是游戏物理看起来像是在“慢动作”中运行。这实际上是由于模型的比例问题。默认的重力设置假设一个世界单位对应一米的距离。在非物理游戏中,如果你的模型都是 100 个单位长,这不会有太大影响,但在使用物理时,它们将被视为非常大的对象。如果使用大比例的对象,它们会显得下落非常缓慢——物理引擎认为它们是非常大的物体在非常大的距离上落下。因此,请确保你的对象与现实生活中的比例大致相同(例如,一辆车大约应该是 4 个单位 = 4 米)。

 

关于这个组件对应的Rigibody类 

Rigidbody 类 的属性

  • angularDrag: 对象的角阻力。

  • angularVelocity: 刚体的角速度矢量,以每秒弧度为单位。

  • centerOfMass: 相对于变换原点的质心。

  • collisionDetectionMode: 刚体的碰撞检测模式。

  • constraints: 控制模拟此刚体时允许的自由度。

  • detectCollisions: 是否启用碰撞检测(默认情况下始终启用)。

  • drag: 对象的阻力。

  • freezeRotation: 控制物理是否会更改对象的旋转。

  • inertiaTensor: 此刚体的惯性张量,定义为在刚体质心位置和旋转的参考系中的对角矩阵。

  • inertiaTensorRotation: 惯性张量的旋转。

  • interpolation: 插值允许你平滑物理在固定帧率下运行的效果。

  • isKinematic: 控制物理是否影响刚体。

  • mass: 刚体的质量。

  • maxAngularVelocity: 刚体的最大角速度,以每秒弧度为单位(默认值为 7),范围为 {0, 无穷大}。

  • maxDepenetrationVelocity: 刚体在脱离穿透状态时的最大速度。

  • position: 刚体的位置。

  • rotation: 刚体的旋转。

  • sleepThreshold: 质量归一化的能量阈值,低于此阈值对象将进入睡眠状态。

  • solverIterations: 确定刚体关节和碰撞接触的解析精度。覆盖 Physics.defaultSolverIterations。必须为正数。

  • solverVelocityIterations: 影响刚体关节和碰撞接触的解析精度。覆盖 Physics.defaultSolverVelocityIterations。必须为正数。

  • useGravity: 控制重力是否影响此刚体。

  • velocity: 刚体的速度矢量。它表示刚体位置的变化率。

  • worldCenterOfMass: 刚体在世界空间中的质心(只读)。

Rigidbody类  的公共方法

  • AddExplosionForce: 对刚体施加一个模拟爆炸效果的力。

  • AddForce: 对刚体施加一个力。

  • AddForceAtPosition: 在指定位置施加力。这将同时施加扭矩和力。

  • AddRelativeForce: 相对于刚体的坐标系施加力。

  • AddRelativeTorque: 相对于刚体的坐标系施加扭矩。

  • AddTorque: 对刚体施加扭矩。

  • ClosestPointOnBounds: 附加碰撞体的包围盒上最接近的点。

  • GetPointVelocity: 刚体在世界空间中某点的速度。

  • GetRelativePointVelocity: 相对于刚体在某点的速度。

  • IsSleeping: 刚体是否处于睡眠状态?

  • MovePosition: 将运动学刚体移动到指定位置。

  • MoveRotation: 将刚体旋转到指定旋转。

  • ResetCenterOfMass: 重置刚体的质心。

  • ResetInertiaTensor: 重置惯性张量的值和旋转。

  • SetDensity: 基于附加的碰撞体假设恒定密度来设置质量。

  • Sleep: 强制刚体至少睡眠一帧。

  • SweepTest: 测试刚体在场景中移动时是否会与任何物体发生碰撞。

  • SweepTestAll: 类似于 SweepTest,但返回所有碰撞点。

  • WakeUp: 强制刚体唤醒。

消息

  • OnCollisionEnter: 当此碰撞体/刚体开始接触另一个刚体/碰撞体时调用。

  • OnCollisionExit: 当此碰撞体/刚体停止接触另一个刚体/碰撞体时调用。

  • OnCollisionStay: 对于每个接触的碰撞体/刚体,每帧调用一次。

继承成员

  • gameObject: 附加此组件的游戏对象。组件总是附加到游戏对象上。

  • tag: 此游戏对象的标签。

  • transform: 附加到此游戏对象的变换组件。

  • hideFlags: 对象是否应该隐藏,随场景保存或可由用户修改?

  • name: 对象的名称。

公共方法

  • BroadcastMessage: 在此游戏对象或其任何子对象上的每个 MonoBehaviour 上调用名为 methodName 的方法。

  • CompareTag: 检查游戏对象的标签是否与定义的标签匹配。

  • GetComponent: 获取附加到同一游戏对象上的指定类型的组件引用。

  • GetComponentInChildren: 获取附加到同一游戏对象或其子对象上的指定类型的组件引用。

  • GetComponentInParent: 获取附加到同一游戏对象或其父对象上的指定类型的组件引用。

  • GetComponents: 获取附加到同一游戏对象上的所有指定类型的组件引用。

  • GetComponentsInChildren: 获取附加到同一游戏对象及其子对象上的所有指定类型的组件引用。

  • GetComponentsInParent: 获取附加到同一游戏对象及其父对象上的所有指定类型的组件引用。

  • SendMessage: 在此游戏对象上的每个 MonoBehaviour 上调用名为 methodName 的方法。

  • SendMessageUpwards: 在此游戏对象及其所有祖先上的每个 MonoBehaviour 上调用名为 methodName 的方法。

  • TryGetComponent: 获取指定类型的组件(如果存在)。

  • GetInstanceID: 获取对象的实例 ID。

  • ToString: 返回对象的名称。

静态方法

  • Destroy: 移除游戏对象、组件或资源。

  • DestroyImmediate: 立即销毁对象。强烈建议使用 Destroy 代替。

  • DontDestroyOnLoad: 在加载新场景时不销毁目标对象。

  • FindAnyObjectByType: 检索任何活动加载的指定类型的对象。

  • FindFirstObjectByType: 检索第一个活动加载的指定类型的对象。

  • FindObjectOfType: 返回第一个活动加载的指定类型的对象。

  • FindObjectsByType: 检索所有加载的指定类型的对象列表。

  • FindObjectsOfType: 获取所有加载的指定类型的对象列表。

  • Instantiate: 克隆对象并返回克隆体。

运算符

  • bool: 对象是否存在?

  • operator !=: 比较两个对象是否引用不同的对象。

  • operator ==: 比较两个对象引用是否引用同一个对象。

重点讲一下添加力AddForce()函数:

AddForce: 对刚体施加一个力

AddForce 是 Unity 中 Rigidbody 组件的一个方法,用于对刚体施加一个力。这个力可以是持续的,也可以是瞬间的,取决于你使用的方法和参数。

基本语法

public void AddForce(Vector3 force, ForceMode mode = ForceMode.Force);
  • force: 这是一个 Vector3 类型的参数,表示施加的力的方向和大小。Vector3 有三个分量:xy 和 z,分别表示力在三个轴上的分量。

  • mode: 这是一个可选参数,表示施加力的模式。默认情况下是 ForceMode.Force

ForceMode 参数

ForceMode 是一个枚举类型,有四种模式:

  1. ForceMode.Force: 持续施加力,考虑质量。

  2. ForceMode.Acceleration: 持续施加加速度,忽略质量。

  3. ForceMode.Impulse: 瞬间施加冲量,考虑质量。

  4. ForceMode.VelocityChange: 瞬间改变速度,忽略质量。

示例

假设你有一个小球,你想让它向前移动。你可以使用 AddForce 方法来实现这一点。

using UnityEngine;

public class MoveBall : MonoBehaviour
{
    public Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        // 施加一个向前的力
        rb.AddForce(Vector3.forward * 10, ForceMode.Force);
    }
}

在这个例子中:

  • Vector3.forward 表示向前的方向。

  • 10 是力的大小。

  • ForceMode.Force 表示这是一个持续的力,考虑质量。

详细解释
  1. ForceMode.Force:

    • 解释: 当你使用 ForceMode.Force 时,力会持续作用在刚体上,直到你停止施加力。力的效果会根据刚体的质量进行缩放。质量越大,施加相同力的情况下,刚体的加速度越小。

    • 示例: 如果你想模拟一个物体受到持续推力的效果,比如汽车引擎的推力,你可以使用 ForceMode.Force

  2. ForceMode.Acceleration:

    • 解释: 当你使用 ForceMode.Acceleration 时,施加的力不会考虑刚体的质量。这意味着无论刚体的质量是多少,施加的力都会产生相同的加速度。

    • 示例: 如果你想模拟一个物体受到恒定加速度的效果,而不考虑其质量,比如重力加速度,你可以使用 ForceMode.Acceleration

  3. ForceMode.Impulse:

    • 解释: 当你使用 ForceMode.Impulse 时,施加的力会在瞬间作用在刚体上,产生一个瞬间的冲量。冲量的效果会根据刚体的质量进行缩放。质量越大,施加相同冲量的情况下,刚体的速度变化越小。

    • 示例: 如果你想模拟一个物体受到瞬间冲击的效果,比如子弹击中物体,你可以使用 ForceMode.Impulse

  4. ForceMode.VelocityChange:

    • 解释: 当你使用 ForceMode.VelocityChange 时,施加的力会在瞬间改变刚体的速度,而不考虑刚体的质量。这意味着无论刚体的质量是多少,施加的力都会产生相同的速度变化。

    • 示例: 如果你想模拟一个物体瞬间获得速度的效果,比如火箭发射时的瞬间加速,你可以使用 ForceMode.VelocityChange

总结
  • ForceMode.Force: 持续施加力,考虑质量。

  • ForceMode.Acceleration: 持续施加加速度,忽略质量。

  • ForceMode.Impulse: 瞬间施加冲量,考虑质量。

  • ForceMode.VelocityChange: 瞬间改变速度,忽略质量。

选择哪种模式取决于你想要模拟的物理效果。例如,如果你想模拟一个物体受到持续推力的效果,可以使用 ForceMode.Force;如果你想模拟一个物体瞬间获得速度的效果,可以使用 ForceMode.VelocityChange

课堂保龄球游戏代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BaoLQManager : MonoBehaviour
{
    // 业务逻辑1:把保龄球扔出去
    //  业务逻辑2:保龄球 走直线把前面的柱子撞倒
    //业务逻辑3:如果撞倒一个就+一分
    //业务逻辑4:如果撞到以后-间隔2秒消失


    //程序逻辑1:把球和被撞柱子存到代码变量里

    //程序逻辑2:Rigibody类 给球添加一个力-   // 业务逻辑1:把保龄球扔出去

    //程序逻辑3:Collider类-碰撞检测,如果有人碰到我,我就让变量+1加分

  

    public Rigidbody BaoLqRIGI;//获取保龄球的刚体组件


    public float ForceStrength = 100f;



    void Start()
    {
     

    }

    // Update is called once per frame
    void Update()
    {

    }
    void FixedUpdate()
    {
        if (Input.GetMouseButtonDown(0) || Input.GetKeyDown(KeyCode.Space))
        {
            BaoLqRIGI.AddForce(new Vector3(0, 0, 1 * ForceStrength * Time.deltaTime), ForceMode.Impulse);
          //给保龄球添加一个爆发力
        }
    
}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2161692.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript中的日期和时间

日期和时间 JS语言核心包括Date()构造函数&#xff0c;用来创建表示日期和时间的对象。提供了简单的API. 代码实现&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>3.1.5 日期和时间</title></hea…

3D模型在UI设计中应用越来越多,给UI带来了什么?

当前3D模型在UI设计中应用很多&#xff0c;极大地拓展了UI设计的发挥空间&#xff0c;也拓宽了UI的应用领域&#xff0c;本文分享下UI中引入3D模型到底能带来什么价值. 3D模型在UI设计中的应用可以给用户界面带来以下几个方面的好处&#xff1a; 更真实的视觉体验&#xff1a;…

【2024W36】肖恩技术周刊(第 14 期):什么是完美副业?

周刊内容: 对一周内阅读的资讯或技术内容精品&#xff08;个人向&#xff09;进行总结&#xff0c;分类大致包含“业界资讯”、“技术博客”、“开源项目”和“工具分享”等。为减少阅读负担提高记忆留存率&#xff0c;每类下内容数一般不超过3条。 更新时间: 星期天 历史收录:…

2016年国赛高教杯数学建模C题电池剩余放电时间预测解题全过程文档及程序

2016年国赛高教杯数学建模 C题 电池剩余放电时间预测 铅酸电池作为电源被广泛用于工业、军事、日常生活中。在铅酸电池以恒定电流强度放电过程中&#xff0c;电压随放电时间单调下降&#xff0c;直到额定的最低保护电压&#xff08;Um&#xff0c;本题中为9V&#xff09;。从充…

TAPD多类别需求管理

本文档将介绍&#xff1a;什么是 TAPD 多类别需求管理&#xff0c;以及如何配置或创建新的需求类别。 一、概述 在研发管理过程中&#xff0c;团队经常会遇到规模扩张、不同特性团队间研发模式差异化大等问题。以上问题导致团队中的需求无法进行统一管理。为解决上述情况&…

54 螺旋矩阵

解题思路&#xff1a; \qquad 这道题可以直接用模拟解决&#xff0c;顺时针螺旋可以分解为依次沿“右-下-左-上”四个方向的移动&#xff0c;每次碰到“边界”时改变方向&#xff0c;边界是不可到达或已经到达过的地方&#xff0c;会随着指针移动不断收缩。 vector<int>…

Adobe Illustrator吸管工具提取的颜色与原色之间存在色差

问题原因&#xff1a; 被提取颜色的对象是外部链接图片&#xff0c;对其提取的颜色会与AI中看到的颜色不同 如下图所示&#xff0c;中间的矩形与外部矩形的内部颜色存在色差 解决办法&#xff1a; 方法一&#xff1a;将该外部图片利用屏幕截图的形式&#xff0c;粘贴到AI中。…

【Linux】fork入门级使用

目录 一、前置准备 1、进程的基本概念 2、进程标识符PID、PPID 1&#xff09;pid介绍 2&#xff09;获取pid和ppid 二、fork函数 1、fork的基本介绍 1&#xff09;fork&#xff08;&#xff09;&#xff1a; 创建子进程 2&#xff09;对于函数具体的描述 3&#xff09…

深入探索卷积神经网络(CNN)

深入探索卷积神经网络&#xff08;CNN&#xff09; 前言图像的数字表示灰度图像RGB图像 卷积神经网络&#xff08;CNN&#xff09;的架构基本组件卷积操作填充&#xff08;Padding&#xff09;步幅&#xff08;Strides&#xff09; 多通道图像的卷积池化层全连接层 CNN与全连接…

应急响应--来不来得及走流程...

免责声明&#xff1a;本文仅做分享&#xff01; 应急响应详解 概述 应急响应是现代信息安全管理中的重要一环。随着网络威胁的日益复杂化&#xff0c;企业和组织必须具备快速响应安全事件的能力&#xff0c;以最大限度地减少数据泄露、业务中断以及经济损失。本文将从应急响应…

华为全联接大会2024 | 一文回顾华为云开发者联盟重磅干货

目录 华为开发者空间预置更多工具资源&#xff0c;带来丰富场景案例 携手鲲鹏、鸿蒙、昇腾等根生态&#xff0c;使能开发者创新 学习体验、内容体系全面升级&#xff0c;助力开发者高效学习根技术 参与丰富线上体验活动&#xff0c;赢取精美礼品 在刚刚结束的华为全联接大会…

香港科技大学广州|金融科技学域博士招生宣讲会——武汉大学、华中科技大学

&#x1f514;&#x1f514;&#x1f514;明日宣讲&#x1f514;&#x1f514;&#x1f514; &#x1f490;香港科技大学广州&#xff5c;金融科技学域博士招生宣讲会 &#x1f4cd;武汉大学专场 &#x1f559;时间&#xff1a;2024年9月24日&#xff08;星期二&#xff09;1…

Vue3:provide-inject实现组件通信

目录 一.作用 1.跨层级通信 2.避免重复声明 3.封装通用服务 二.性质 1.非响应式 2.不可选项 3.高级用法 三.使用 1.爷组件 2.父组件 3.子组件 四.代码 1.爷组件代码 2.父组件代码 3.子组件代码 五.效果 Vue3中的provide-inject机制是用于在组件树中进行依赖注…

python异步处理

python中的异步处理属于比较高级的用法了&#xff0c;用来节省时间非常有用。传统的运行轨迹是阻塞的&#xff0c;就是一行代码必须完成了&#xff0c;然后才能运行下一行代码。异步运行就是我们现在有多个任务task1&#xff08;2s&#xff09;和task2&#xff08;3s&#xff0…

Linux快速安装ClickHouse

ClickHouse官方文档(有中文别忘了勾选) 什么是ClickHouse&#xff1f; | ClickHouse Docs 在线安装 1.安装yum-utils yum-utils是一个与 yum 集成的实用程序集合&#xff0c;可以通过多种方式扩展其本机功能 yum install -y yum-utils 2.增加ClickHouse官方镜像源 yum-c…

某易易盾验证码逆向

注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路 如有侵犯,请联系作者下架,本文网址如下,使用base64解码获得: aHR0cHM6Ly9kdW4uMTYzLmNvbS90cmlhbC9qaWdzYXc= ———————————————— 我们来看一下接口请求,这里关注的重点就…

力扣516-最长回文子序列(Java详细题解)

题目链接&#xff1a;力扣516-最长回文子序列 前情提要&#xff1a; 因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。 dp五部曲。 1.确定dp数组和i下标的含义。 2.确定递推公式。 3.dp初始化。 4.确定dp的遍历顺序。 5.如果没有ac打印dp数组 利于debug。 每…

后端开发工程师转行大模型领域:全面学习路线指南,非常详细收藏我这一篇就够了

随着人工智能技术的迅猛发展&#xff0c;特别是大模型&#xff08;如GPT-3、BERT等&#xff09;在自然语言处理、计算机视觉等多个领域的广泛应用&#xff0c;越来越多的技术人员开始考虑转型至这一充满挑战与机遇的新领域。对于已经在后端开发领域积累了丰富经验的工程师来说&…

如何解决软件企业文件传输难题?这款FTP替代工具一定适合你!

在信息技术飞速发展的今天&#xff0c;软件企业的数据传输需求不断攀升。传统的FTP&#xff08;文件传输协议&#xff09;虽然一度是企业数据交换的中坚力量&#xff0c;但其在多个方面的局限性逐渐成为企业发展的障碍。接下来&#xff0c;我们将探讨FTP的不足&#xff0c;并介…

值得入手的宠物空气净化器——希喂、352、IAM三款产品真实测评

在快节奏的现代生活中&#xff0c;养宠成为很多人的精神寄托&#xff0c;回到家中与猫咪玩耍是一天中最放松的时刻。但这美好的生活也存在着一些烦恼——宠物毛发清理与异味。宠物空气净化器作为一种新兴的清理工具&#xff0c;以其高效、全面的特点&#xff0c;受到了越来越多…