1 前言

​ 刚体(Rigidbody)是运动学(Kinematic)中的一个概念,指在运动中和受力作用后,形状和大小不变,而且内部各点的相对位置不变的物体。在 Unity3D 中,刚体组件赋予了游戏对象一些运动学上的属性,主要包括 Mass(质量)、Drag(阻力)、Angular Drag(角阻力)、Use Gravity(是否使用重力)、Is Kinematic(是否受物理影响)、Collision Detection(碰撞检测)、 Velocity(速度)、Force(受力)、Explosion Force(爆炸力)。没有刚体(RigidBody)组件,游戏对象之间可以相互穿透,不会产生碰撞。

1)获取刚体组件

Rigidbody rig = GetComponent<Rigidbody>();

2)刚体组件面板属性

  • Mass:物体的质量(默认以千克为单位)
  • Drag:物体受到的空气阻力大小
  • Angular Drag:物体旋转时,受到的旋转阻力大小转
  • Use Gravity:如果启用,物体将受到重力的影响
  • Is Kinematic:如果启用,物体将不会由物理引擎驱动,只能由其 Transform 组件操作
  • Interpolate:物体运动位置的插值器
  • Collision Detection:碰撞检测类型,当看到物体由于运动太快而穿墙时,可以增强碰撞检测频率,选择 Continuous 选项
  • Constraints:对刚体运动和旋转的限制,限制物体运动时在某个坐标轴上的分量保持不变
  • velocity:物体运动矢量速度
  • angularVelocity:物体运动角速度

3)刚体组件方法

// 刚体受到的推力
public void AddForce(Vector3 force)
// 刚体受到的爆炸力,explosionForce:爆炸力大小,explosionPosition:爆炸点,explosionRadius:爆炸半径
public void AddExplosionForce(float explosionForce, Vector3 explosionPosition, float explosionRadius)

2 应用

2.1 应用一

1)创建游戏对象

​ 创建 Cube 和 Plane 游戏对象,如下:

2)给 Cube 游戏对象添加刚体组件

​ 选中 Cube 游戏对象,点击 Add Component 按钮,搜索 Rigidbody,添加刚体组件。

3)添加 RigidbodyController 脚本

​ RigidbodyController.cs

using UnityEngine;

public class RigidbodyController : MonoBehaviour {
private Rigidbody rig; void Start () {
rig = GetComponent<Rigidbody>();
} void Update () {
float hor = Input.GetAxis("Horizontal");
float ver = Input.GetAxis("Vertical");
float up = Mathf.Sqrt(hor * hor + ver * ver);
if (up > 0.1) {
rig.velocity = new Vector3(hor, up, ver);
}
}
}

4)运行效果

​ 通过上下左右箭头键,控制立方体向四周的上空抬起,松开按键后,立方体由于受到重力作用掉落下来。

2.2 应用二

​ 1)添加 RigidbodyController 脚本

​ 在应用一的基础上,将 RigidbodyController 脚本修改如下:

​ RigidbodyController.cs

using UnityEngine;

public class RigidbodyController : MonoBehaviour {
private Rigidbody rig; void Start () {
rig = GetComponent<Rigidbody>();
} void Update () {
float hor = Input.GetAxis("Horizontal");
float ver = Input.GetAxis("Vertical");
float up = Mathf.Sqrt(hor * hor + ver * ver);
if (up > 0.1) {
rig.AddForce(new Vector3(hor, 0, ver) * 10); // 添加推力
}
}
}

2)运行效果

​ 通过上下左右箭头键,控制立方体受到来自四周的推力。

2.3 应用三

1)创建游戏对象

​ 在应用一的基础上,创建 4 个 Cube 游戏对象,position 分别为:(0, 1, 2)、(0, 1, -2)、(-2, 1, 0)、(2, 1, 0),如下:

​ 给 4 个 Cube 游戏对象都添加 Rigidbody 组件和 RigidbodyController 脚本组件。

2)添加 RigidbodyController 脚本

using UnityEngine;

public class RigidbodyController : MonoBehaviour {
private Rigidbody rig; void Start () {
rig = GetComponent<Rigidbody>();
} void Update () {
if (Input.GetKeyDown(KeyCode.Space)) {
// 在(0,0,0)坐标处添加10米范围内的300N的爆炸力
rig.AddExplosionForce(300, Vector3.zero, 10);
}
}
}

3)运行效果

​ 按空格键,4 个立方体受到来自中心的爆炸力。

​ 声明:本文转自【Unity3D】刚体组件Rigidbody

【Unity3D】刚体组件Rigidbody的更多相关文章

  1. 14.刚体组件Rigidbody

    刚体组件是物理类组件,添加有刚体组件的物体,会像现实生活中的物体一样有重力.会下落.能碰撞. 给物体添加刚体: 选中游戏物体->菜单Component->Physics->Rigid ...

  2. Unity3D 中3D刚体组件的力

    一般一个物体除了手动添加刚体受到重力作用外,还可以给该刚体添加一个其他的力. 这里就要涉及到一个恒定力(Constant Force)组件 首先要去掉物体的重力(因为重力是刚体组件中默认的一个向下的力 ...

  3. Unity3D学习笔记——Rigdbody刚体组件

    Rigdbody刚体组件:必须和碰撞体(Colliders)一起使用,否则会发生穿过的现象.碰撞体(Colliders)不是必须和刚体一起使用. 刚体的作用:使游戏物体能获得重力,接受外界的受力和扭力 ...

  4. unity碰撞组件、刚体组件

    游戏导入标准资源包“Character Controllers”后可以为游戏对象添加 character(角色控制器)组件: 添加角色控制器组建以后可以控制游戏对象移动: 角色控制器组件因为与碰撞组件 ...

  5. 【Unity】11.2 刚体(Rigidbody)

    分类:Unity.C#.VS2015 创建日期:2016-05-02 一.简介 Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可接受外力与扭矩力,使游戏对象像在真实世界中那样 ...

  6. unity3d 通过添加rigidBody来指明物体是动态的,以避免cache开销

    unity3d 通过添加rigidBody来指明物体是动态的,以避免cache开销. 如果不添加rigidBody,则unity会认为它是静态的,会对物理计算进行cache,但如果此物体实际上tran ...

  7. [原]Unity3D深入浅出 - 物理引擎之刚体部件(Rigidbody)

    在虚拟世界中,任何物体都是没有活力的,要想变的真实,Rigidbody是必不可少的组件,下面介绍Rigidbody的各个属性: Mass:质量 Drag:阻力,对象在运动时遇到的空气阻力,0表示没有空 ...

  8. Unity3d刚体Rigidbody与碰撞检测Collider

    做了一个碰撞的小Demo,用一个球去撞击一堵墙,结果在球和墙都设置了刚体和碰撞体的情况下,球穿过了墙.移动球的位置,球有时能穿过墙,有时会被墙阻挡. 对于球穿过了墙,这个问题,在网上找了一下答案,基本 ...

  9. Unity3D中组件事件函数的运行顺序

    事件函数的运行顺序 Unity 脚本中有很多按预设顺序以脚本身份执行的事件函数. 其执行顺序例如以下: 载入第一个场景 启动场景时调用这些函数(为场景中的每一个对象调用一次). Awake: 始终在调 ...

  10. Unity3D刚体不同力的测试(ForceMode,AddForce,RelativeAddForce)

    摘自圣典的一段翻译: ForceAdd a continuous force to the rigidbody, using its mass.添加一个可持续力到刚体,使用它的质量.Accelerat ...

随机推荐

  1. Git Clone一个GitHub仓库时,发生报错

    1.问题 1.使用HTTP方式:Git: fatal: unable to access ' https://github. com/Light-City/CPlusPlusThings. git/' ...

  2. [转帖]【linux命令学习】— sar 命令学习

    https://blog.csdn.net/u013332124/article/details/101075521 一.命令使用介绍 sar命令全称 System Activity Report,它 ...

  3. TiKV占用内存超过的解决过程

    TiKV占用内存超过的解决过程 背景 为了后去TiDB的极限数据. 晚上在每台服务器上面增加了多个TiKV的节点. 主要方式为: 每个NVME的硬盘增加两个TiKV的进程. 这样每个服务器两个磁盘, ...

  4. [转帖]金仓数据库KingbaseES V8R6索引坏块故障处理

    案例说明: 在执行表数据查询时,出现下图所示错误,索引故障导致表无法访问,后重建索引问题解决.本案例复现了此类故障解决过程. 适用版本: KingbaseES V8R3/R6 一.创建测试环境 # 表 ...

  5. [转帖]Kafka 性能优化与问题深究

    Kafka 性能优化与问题深究 一.Kafka深入探究 1.1 kafka整体介绍 1. 1.1 Kafka 如何做到高吞吐.低延迟的呢? Kafka是一个分布式高吞吐量的消息系统,这里提下 Kafk ...

  6. 我在京东做研发 | 揭秘支撑京东万人规模技术人员协作的行云DevOps平台

    随着业务变化的速度越来越快各类IT系统的建设也越来越复杂大规模研发团队的管理问题日益突出如何提升研发效能成为时下各类技术团队面临的重要挑战 京东云DevOps专家将带您深入研发一线揭秘支撑京东集团万人 ...

  7. git中git cherry-pick的使用

    git中git cherry-pick的使用 A分支是从远端的开发分支dev拉取的 B分支是从远端的测试分支rel拉取的 现在我们遇见一个问题. 我们在A分支修改了代码.并且推送到了远端的dev分支. ...

  8. vue3中context.emit遇见的坑

    场景描述 今天遇见一个问题 ,子组件向上抛出去的事件. 被执行了两次,原因是 context.emit('click', item.id) 你的事件名是click 将click更改为其他事件名称,就可 ...

  9. 获取文件的后缀名(转为数组) 字符串和变量的拼接 HTML中字符串和变量的拼接

    1文件上传时,获取文件的后缀名### var cont="2010-23.23.xls" console.log(cont.split("."));//spli ...

  10. CTF&爬虫:掌握这些特征,一秒识别密文加密方式

    关注微信公众号:K哥爬虫,持续分享爬虫进阶.JS/安卓逆向等技术干货! 前言 爬虫工程师在做加密参数逆向的时候,经常会遇到各种各样的加密算法.编码.混淆,每个算法都有其对应的特征,对于一些较小的网站, ...