Unity 3D 刚体(Rigidbody)|| Unity 3D 刚体实践案例

Unity 3D 中的 Rigidbody 可以为游戏对象赋予物理特性,使游戏对象在物理系统的控制下接受推力与扭力,从而实现现实世界中的物理学现象。

我们通常把在外力作用下,物体的形状和大小(尺寸)保持不变,而且内部各部分相对位置保持恒定(没有形变)的理想物理模型称为刚体。

刚体(Rigidbody)是物理引擎中最基本的组件。通过该组件可以给物体添加一些常见的物理属性,如质量、摩擦力、碰撞参数等。

Unity 3D 提供了多个实现接口,开发者可以通过更改这些参数来控制物体的各种物理状态。

刚体在各种物理状态影响下运动,刚体的属性包含:

  • Mass(质量)

  • Drag(阻力)

  • Angular Drag(角阻力)

  • Use Gravity(是否使用重力)

  • Is Kinematic(是否受物理影响)

  • Collision Detection(碰撞检测)

刚体添加方法

在 Unity 3D 中创建并选择一个游戏对象,执行菜单栏中的 Component → Physics → Rigidbody 命令为游戏对象添加刚体组件。

Unity 3D 刚体(Rigidbody)|| Unity 3D 刚体实践案例_第1张图片

刚体选项参数

游戏对象一旦被赋予刚体属性后,其 Inspector 属性面板会显示相应的属性参数与功能选项,具体内容如下表所示。

Unity 3D 刚体(Rigidbody)|| Unity 3D 刚体实践案例_第2张图片

参数 含义 描述
Mass 质量 物体的质量(任意单位)。建议一个物体的质量不要与其他物体 相差100倍。
Drag 阻力 当受力移动时物体受到的空气阻力。0表示没有空气阻力,极 大时使物体立即停止运动。
Angular Drag 角阻力 当受扭力旋转时物体受到的空气阻力。0表示没有空气阻力, 极大时使物体立即停止旋转。
Use Gravity 使用重力 该物体是否受重力影响,若激活,则物体受重力影响。
Is Kinematic 是否是运动学 游戏对象是否遵循运动学物理定律,若激活,该物体不再受物理 引擎驱动,而只能通过变换来操作。适用于模拟运动的平台或 者模拟由铰链关节连接的刚体。
Interpolate 插值 物体运动插值模式。当发现刚体运动时抖动,可以尝试下面的 选项:None(无),不应用插值;Interpolate(内插值),基于上一巾贞 变换来平滑本帧变换;Extrapolate(外插值),基于下一帧变换来 平滑本帧变换。
Collision Detection 碰撞检测 碰撞检测模式。用于避免高速物体穿过其他物体却未触发碰 撞。碰撞模式包括Discrete (不连续)、Continuous (连续)、 Continuous Dynamic (动态连续〉3种。其中,Discrete模式用来 检测与场景中其他碰撞器或其他物体的碰撞;Continuous模式 用来检测与动态碰撞器(刚体)的碰撞;Continuous Dynamic模式用来检测与连续模式和连续动态模式的物体的碰撞,适用于 高速物体。
Constraints 约束 对刚体运动的约束。其中,Freeze Position(冻结位置)表7TC刚体 在世界中沿所选HZ轴的移动将无效,Freeze Rotation(冻结 旋转)表示刚体在世界中沿所选的XYZ轴的旋转将无效。

Unity 3D 刚体实践案例 

刚体使物体符合现实中物理学定律进行运动,任何物体想要受重力影响,都必须包含一个刚体组件。

利用刚体类游戏组件,遵循万有引力定律,在重力作用下,物体会自由落下。

刚体组件还会影响到物体发生碰撞时产生的效果,使物体的运动遵循惯性定律,使其发生碰撞时在运动冲量作用下产生速度。

本案例旨在利用刚体测试重力效果以及碰撞后的交互效果。

案例设计

本案例在 Unity 3D 内创建一个简单的三维场景,场景内放有 Cube 和 PlanePlane 用于充当地面,Cube 用于刚体重力测试。

Unity 3D 刚体(Rigidbody)|| Unity 3D 刚体实践案例_第3张图片

案例实施

  1. 新建项目,将场景命名为 Rigidbody

  1. 创建游戏对象。

执行 GameObject → 3D Object → Plane 命令,此时在 Scene 视图中出现了一个平面,在右侧的 Inspector 面板中设置平面位置(0,0,-5)。

Unity 3D 刚体(Rigidbody)|| Unity 3D 刚体实践案例_第4张图片

  1. 创建游戏对象。

在菜单栏中执行 GameObject → 3D Object → Cube 命令,在右侧的 Inspector 面板中设置立方体的位置(0,5,0),按 F2 键可将其重新命名。

Unity 3D 刚体(Rigidbody)|| Unity 3D 刚体实践案例_第5张图片

  1. 美化场景。

采用纹理贴图的方法将地面和立方体都贴上纹理。

首先,将资源图片放置在项目的根目录 Assets 下,Unity 3D 会自动加载资源。

然后分别选中立方体和平面,将对应的资源图片分别拖到立方体和平面上即可。

Unity 3D 刚体(Rigidbody)|| Unity 3D 刚体实践案例_第6张图片

  1. 为立方体添加刚体属性。

选中立方体,然后执行菜单栏中的 Component→ Physics → Rigidbody 命令,当右侧的 Inspector 面板中出现了 Rigidbody 属性面板时,即为立方体添加了刚体属性。

Unity 3D 刚体(Rigidbody)|| Unity 3D 刚体实践案例_第7张图片

  1. 进行初步测试。

置于半空中的立方体由于受到重力作用做自由落体运动,掉落到平面上。

  1. 复制游戏对象。

在 Hierarchy 视图中,选中 Cube1 后按 Ctrl+D 键复制立方体 Cube2 并将其摆放于场景中,在 Inspector 面板中设置新复制的立方体的位置属性(0.4,0.5,0),按此方法再复制一个立方体 Cube3 斜放于 Cube2 上,设置 Cube3 的位置为(0,1.5,0)。

  1. 执行菜单栏的 Component → Physics → Rigidbody 命令为每一个立方体添加刚体属性。

  1. 再次测试。

最上方立方体进行自由落体运动,撞击到地面,盒子发生倒塌。

  1. 创建 JavaScript 脚本文件,输入下列代码:

 
  
  1. var speed=10;
  2. function OnMouseDrag(){
  3. transform.position+=Vector3.right*Time.deltaTime*Input.GetAxis("MouseX")*speed;
  4. transform.position+=Vector3.up*Time.deltaTime*Input.GetAxis("Mouse Y")*speed;
  5. }

  1. 将脚本分别连接到 3 个立方体上。

  1. 进行最终测试。

本案例世间目标达成。

Unity 3D 刚体(Rigidbody)|| Unity 3D 刚体实践案例_第8张图片

你可能感兴趣的:(unity教程,unity,3d,游戏引擎)