unity 使用自定义物理引擎(Unity物理引擎篇刚体)

我们在unity里面建了一个正方体cube , 要如何使这个cube可以跟现实中的物体一样受重力呢 ? 这就需要用到Rigidbody(刚体)组件了 .

单击cube , 在右边的Inspector面板添加Rigidbody组件

unity 使用自定义物理引擎(Unity物理引擎篇刚体)(1)

请点击输入图片描述

添加完Rigidbody组件后,cube1就可以受重力影响了,运行unity时,cube1会因为受到重力往下落.

unity 使用自定义物理引擎(Unity物理引擎篇刚体)(2)

请点击输入图片描述

下面为大家介绍 Rigidbody 组件常用参数 :

1. Mass : 物体的质量 . 官方建议物体质量最好不要大于其他物体的100倍或者小于其他物体的 1/100 ;

2. Drag : 空气阻力 . 数值越大,表示物体所受阻力越大,物体越难移动 ;

3. Angular Drag : 角阻力,也就是物体旋转受到的阻力 ,数值越大物体越难旋转 ;

4. Use Gravity : 是否开启重力 , 开启的话,游戏物体会受重力影响 ;

5. Is Kinematic : 是否开启动力学 . 如果开启的话 , 游戏物体将不再受物理引擎的影响 , 只能通过 Transform 来改变物体的位置,旋转等 ;

unity 使用自定义物理引擎(Unity物理引擎篇刚体)(3)

请点击输入图片描述

如图 cube1(红色 , 勾选了 Is Kinematic ) , cube2 (绿色 , 没勾选 Is Kinematic ) 原本处于同一高度, 运行状态下 , cube2由于没有勾选 Is Kinematic 选项 , 受到重力影响会下落 ;

6. Interpolate : 插值 . 用来控制刚体运动的抖动情况 , 因为物理运算和画面更新不同步造成的. Interpolate是枚举类型 , 有以下三个选项 .

(1) . None : 没有插值

(2) . Interpolate : 内插值 . 基于前一帧的 Transform 来平滑此次的 Transform

(3) . Extrapolate : 外插值 . 基于下一帧的 Transform 来平滑此次的 Transform

unity 使用自定义物理引擎(Unity物理引擎篇刚体)(4)

请点击输入图片描述

如图 cube1 (None) , cube2 (Interpolate) , cube3 (Extrapolate) .

游戏运行时 :

cube1 : 出现抖动 ;

cube2 : 平滑落下 , 但是比 cube1 后落地;

cube3 : 平滑落下 , 但和 cube1 同时落地;

由此可以看出 , Interpolate 和 Extrapolate 的区别就在于使用的算法不一样 , Extrapolate在物理上会比较准确 ;

7. Collision Detection : 碰撞检测 . 用于控制避免高速运动的物体穿过其他的物体而并没有发生碰撞 , 也是一个枚举类型 , 有以下三个选项

(1) . Discrete : 离散碰撞检测 . 与场景中其他所有的碰撞体进行碰撞检测 , 为默认值 ;

(2) . Continuous : 连续碰撞检测 . 适用于需要与连续动态碰撞检测的对象相碰撞的对象. 很耗费性能 ,一般不用 ;

(3) . Continuous Dynamic : 连续动态碰撞检测 . 适用于检测快速运动的游戏对象 ;

unity 使用自定义物理引擎(Unity物理引擎篇刚体)(5)

请点击输入图片描述

如图 cube1 (Discrete) , cube2 (Continuous) , cube3 (Continuous Dynamic) 置于 1000米的高度 .

游戏运行时 :

cube1 : 高速下落 , 穿过地面 ;

cube2 : 落在地面静止 ;

cube3 : 落在地面静止 ;

由此看出 : cube1 在高速运动时已经完全穿透 , cube2防止穿透静态对象 , cube3 防止穿透包含 Continuous 和 Continuous Dynamic 选项的物体 .

8. Constraints : 约束 . 用来冻结物体 x ,y ,z 轴的移动和旋转 .

unity 使用自定义物理引擎(Unity物理引擎篇刚体)(6)

请点击输入图片描述

​(1) . Freeze Position : 冻结位置 . x , y , z 轴方向上 , 勾选状态的话 , 在该轴上的移动无效 ;

(2) . Freeze Rotation : 冻结旋转 . x , y , z 轴方向上 , 勾选状态的话 , 在该轴上的旋转无效 ;

好了 , 今天的刚体组件就介绍到这里 ,大家有什么问题可以在评论区留言 , 我会为大家解答 .

游戏物体添加了刚体组件以后 , 就可以模拟碰撞了吗 ? 答案是 No ... , 两个或多个游戏物体发生碰撞,只靠刚体是不够的 , 明天为大家带来另一个不可获取的组件详解 . ​

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页