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

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 framevoid 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.xdnf.cn/news/1543059.html

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

相关文章

R语言中的shiny框架

R语言中的shiny框架 Shiny 的基本概念基本用法示例常见用法示例1. 输入控件2. 输出控件3. 动态 UI4. 数据传递和反应式编程 高级功能1. 使用 shinyjs2. 使用 shinythemes Shiny 是一个 R 语言的框架&#xff0c;用于构建交互式的网页应用&#xff0c;可以让用户以最少的 HTML、…

uniapp出现 下拉框等组件被遮挡 的分析

目录 1. 问题所示2. 代码复现3. 解决方法3.1 下拉框被遮挡3.2 uni-collapse-item 无法下拉的问题 1. 问题所示 下拉框被遮挡的问题&#xff1a; uni-collapse-item组件无法下拉的问题&#xff1a; 2. 代码复现 博主的代码精简如下&#xff1a; <template><view>…

离职员工客户如何管理?解锁2024企业微信新功能

公司里员工来来去去很正常&#xff0c;但每次有人走&#xff0c;老板们都会头疼&#xff0c;因为客户信息得有人接着管。客户对公司来说太重要了&#xff0c;不能丢。2024年&#xff0c;企业微信出了个新招&#xff0c;就是员工离职后&#xff0c;客户信息可以轻松转给新来的员…

kalman滤波三:时序数据预测(一维kalman滤波)

文章目录 原理kalman滤波一&#xff1a;基础理论kalman滤波二&#xff1a;二维目标跟踪 一维kalman滤波状态变量测量值状态转移矩阵 示例代码&#xff1a;运行结果&#xff1a;真实场景示例 以下是一个测距的应用&#xff0c;在图像上计算目标离参考点的距离&#xff0c;测距的…

如何删除链表的中间节点和a/b处的节点?

文章目录 删除中间节点删除 a/b 处的节点 示例定义链表节点结构删除中间节点删除 a/b 处的节点 注意事项 Python 实现案例创建链表删除中间节点删除 a/b 处的节点测试代码示例代码完整版测试输出 在链表中删除中间节点或者特定位置&#xff08;如 a/b 处&#xff09;的节点涉及…

学习干货HVV必学远控工具及Webshell流量合集分析(建议收藏+附面试题)

0x01 前言 本篇文章为各位师傅总结了一些当下流行的Webshell远程工具及其中的流量分析&#xff0c;方便在平时监测、hvv、攻防演练中进行及时发现、阻拦回溯等、在某些比赛上可能也会有类似的流量分析题目&#xff0c;根据工具的一些流量特征进行说明&#xff0c;其中会附带一…

如何融合文本信息提高时序预训练模型?

今天小编给大家介绍两篇联合文本和时序数据进行预训练的文章。 UniTime: A Language-Empowered Unified Model for Cross-Domain Time Series Forecasting 文献地址&#xff1a;https://arxiv.org/pdf/2310.09751.pdf 代码地址&#xff1a;https://github.com/liuxu77/UniTim…

国产 AI 大模型成果展示,囊括 12 大金融应用场景!

前言 随着人工智能技术的飞速发展&#xff0c;国产AI大模型在医疗健康领域的应用日益广泛&#xff0c;正在逐步改变传统的医疗服务模式&#xff0c;提升医疗服务的质量和效率。以下是对国产AI大模型在医疗领域应用的典型案例盘点&#xff0c;覆盖了十大医疗应用场景。 01 智…

治愈系视频素材哪里找?非常优秀的治愈系素材分享

在快节奏的现代生活中&#xff0c;寻找心灵的慰藉成为了一个日益重要的话题。治愈系视频以其温暖人心的内容和独特的魅力&#xff0c;为观众提供了一种减压和放松的方式。要制作出触动人心的治愈系视频&#xff0c;首先需要挑选合适的视频素材。以下是几个优质的治愈系视频素材…

使用build_chain.sh离线搭建匹配的区块链,并通过命令配置各群组节点的MySQL数据库

【任务】 登陆Linux服务器&#xff0c;以MySQL分布式存储方式安装并部署如图所示的三群组、四机构、 七节点的星形组网拓扑区块链系统。其中&#xff0c;三群组名称分别为group1、group2和group3&#xff0c; 四个机构名称为agencyA、agencyB、agencyC、agencyD。p2p_port、cha…

粗绿激光模组使用优势有哪些

在当今高科技飞速发展的时代&#xff0c;激光技术以其精准、高效、稳定的特性&#xff0c;在众多领域中展现出了非凡的应用价值。其中&#xff0c;粗绿激光模组作为激光技术的重要分支&#xff0c;凭借其独特优势&#xff0c;在众多行业中脱颖而出&#xff0c;成为推动产业升级…

格密码(一)

什么是格&#xff1f; 可以简单地把“格”想象成一个用多个点组成的网格&#xff0c;这个网格可以存在于二维、三维甚至更高维的空间中。每个格点都是由一组基向量&#xff08;比如二维空间中的两个基向量&#xff09;通过整数倍的线性组合得到的。 二维格的例子&#xff1a;…

大坝可视化监控:实时安全保障

利用图扑可视化技术实时监控大坝结构和运行状态&#xff0c;及时识别潜在风险&#xff0c;提升管理效率&#xff0c;确保大坝安全稳定运行和资源的高效利用。

实时数据的处理一致性

实时数据一致性的定义以及面临的挑战‍‍‍‍‍ 数据一致性通常指的是数据在整个系统或多个系统中保持准确、可靠和同步的状态。在实时数据处理中&#xff0c;一致性包括但不限于数据的准确性、完整性、时效性和顺序性。 下图是典型的实时/流式数据处理的流程&#xff1a; 1、…

基于单片机多点无线温度监控系统设计

本设计STC89C52RC单片机作为主控芯片&#xff0c;能够远程监控多个位置的温度变化。使用一个主机来接收和监控三个从机收集到的温度信息&#xff0c;利用DS18B20温度传感器采集温度信息&#xff0c;采用GL24S无线通讯模块将数据传输给主机进行接收&#xff0c;信息显示在主机连…

SM2无证书及隐式证书公钥机制签名和加密过程详解(一)

前面介绍SM2无证书及隐式证书公钥机制下用户公私密钥对的Python实现&#xff08;具体参看SM2隐式证书用户公私钥生成python代码实现_sm2 python 密钥生成-CSDN博客&#xff09;&#xff0c;可以看到需由用户和KGC&#xff08;可信密钥生成中心&#xff09;共同参与才能计算得到…

钢表面缺陷识别

钢表面缺陷识别是指通过计算机视觉技术对钢材表面缺陷进行检测和分类的过程。这一技术在钢铁制造行业具有重要的工业价值&#xff0c;旨在提高产品质量、降低生产损失以及提升生产效率。钢表面缺陷可能包括裂纹、凹坑、气泡等&#xff0c;这些瑕疵会影响产品的性能和安全性&…

Transformer动画讲解

**Transformer工作原理**** **一、**** ******GPT的核心是Transformer******** *GPT* &#xff1a; **GPT&#xff08;Generative Pre-trained Transformer&#xff09;**** ****是一种基于单向Transformer解码器的预训练语言模型&#xff0c;它通过在大规模语料库上的无监督…

数字人会被封杀?不!看国家政策打破谣言

数字人会被封&#xff1f; 数字人发展没有前景&#xff1f; 数字人直播何去何从&#xff1f; 是不是大家入局数字人&#xff0c;都在纠结数字人使用和前景的问题&#xff1f;首先&#xff0c;大家放心&#xff0c;数字人广泛使用已经是大势所趋。下面给大家分享最新政策&…

多模态大模型应用开发技术学习

前篇提到多模态模型应用是未来的应用方向&#xff0c;本篇就聊聊技术学习方面的内容。 应用场景 多模态大模型技术的应用场景非常广泛&#xff0c;涵盖了从日常生活到专业领域的各个方面。以下是一些主要的应用场景&#xff1a; 办公自动化&#xff1a;多模态大模型可以用于…