【Unity】11.2 刚体(Rigidbody)
分类:Unity、C#、VS2015
创建日期:2016-05-02
一、简介
Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可接受外力与扭矩力,使游戏对象像在真实世界中那样进行运动。
任何游戏对象,只有对其添加了刚体组件,该对象才能受重力的影响。
通过脚本为游戏对象添加的作用力,以及通过NVIDlA物理引擎与其他的游戏对象发生互动的运算,都需要为游戏对象添加刚体组件。
二、如何为对象添加刚体
在Unity 5.x中为某个游戏对象添加刚体组件的办法是:选中要添加刚体的游戏对象-->【Component】-->【Physics】-->【Rigidbody】,这样就为该对象添加了刚体。
添加刚体和碰撞体后,选择该对象,就会看到其周围被一层绿色的框线包围:
添加刚体和碰撞体的目的主要用于将该对象和其他对象之间进行碰撞检测。碰撞体既可以用胶囊体来实现,也可以用其他碰撞体组件来实现。
三、相关属性
与刚体相关的属性如下。
1、Mass (质量)
对象的质量(任意单位)。不应使质量比其他刚体 (Rigidbody) 的质量大或小100 倍。
2、Drag (阻力)
在由于施加力而移动时空气阻力对对象的影响程度。0 表示无空气阻力,空气阻力为无穷大将会使对象立即停止移动。
3、Angular Drag (角阻力)
对某个对象施加扭矩而导致该对象旋转时,空气阻力对该对象的影响程度。0 表示无空气阻力。注意:不能仅仅通过将其“角阻力”(Angular Drag) 设置为无穷大使对象停止旋转。
4、Use Gravity (是否使用重力)
如果启用,则对象将受重力影响。
5、Is Kinematic (是否开启运动学)
如果启用,则该对象不会由物理引擎驱动,而是只能通过对其施加变换 (Transform)进行处理。对于手机等移动平台,或者对附加了铰链关节 (HingeJoint) 的刚体 (Rigidbody) 进行动画处理时,为对象开启运动学十分有用。
6、Interpolate (插值处理)
该项用于控制刚体运动的抖动情况。仅当在刚体 (Rigidbody) 移动中发现不平稳时,才尝试下面这些选项之一:
None:不应用插值。
Interpolate:内插。变换(Transform) 基于上一帧的变换 (Transform) 进行平滑处理。
Extrapolate:外插。变换 (Transform) 基于下一帧的估计变换 (Transform) 进行平滑处理。
7、Collision Detection (碰撞检测)
该属性用于控制避免高速运动的游戏对象穿过其他的对象而未发生碰撞。选项有:
(1)Discrete(离散)
对场景中的所有其他碰撞体 (Collider) 全部使用离散 (Discreet) 碰撞检测。该项为默认值。
(2)Continuous (连续)
对刚体 (Rigidbody) 进行碰撞测试时,对带有刚体的动态碰撞体 (Collider) 使用离散 (Discreet) 碰撞检测;对不带刚体的静态网格碰撞体 (static Mesh Collider)使用连续 (Continuous) 碰撞检测。
(3)Continuous Dynamic (连续动态)
该选项可用于快速移动的对象。
对设置为“连续”(Continuous) 和“连续动态”(Continuous Dynamic) 碰撞的对象使用连续 (Continuous) 碰撞检测。它对不带刚体的静态网格碰撞体也使用连续 (Continuous) 碰撞检测。对于所有其他碰撞体 (Collider),使用离散 (Discreet) 碰撞检测。
注意:连续动态(Continuous Dynamic) 检测需要与之碰撞的对象对物理性能的影响非常大,如果对快速对象的碰撞没有问题,应该将其设置为“离散”(Discreet)而不是连续动态。
8、Constraints (约束)
对刚体 (Rigidbody) 运动的限制。
(1)Freeze Position (冻结位置)
选择性地在世界坐标 X、Y 和 Z 轴上停止刚体 (Rigidbody) 移动。即:刚体对象在世界坐标系中的X、Y、4由方向上(勾选状态)的移动将无效。
(2)Freeze Rotation (冻结旋转)
选择性地停止刚体 (Rigidbody) 围绕世界坐标 X、Y 和 Z 轴的旋转。即:刚体对象在世界坐标系中的X、Y、4由方向上(勾选状态)的旋转将无效。
三、注意事项
1、Rigidbody和Transform只能二选一
刚体(Rigidbody)会使游戏对象在物理引擎的控制下运动,例如可以以真实的碰撞形式来开门或计算其他的行为。通过在刚体上添加作用力来操作游戏对象,这与直接调整Transform组件相比在视觉及感受上都有很大的不同。通常情况下,没有必要在操作—个对象刚体的同时也操作其Transform,只需要二选其一即可。
操作游戏对象的Rigidbody与操作该对象的Transform最大的不同就是刚体有作用力,而且刚体可以接受外力和扭矩,但是Transform无法达到该效果。Transform可以移动和旋转游戏对象,这与使用物理的方式并不相同。
对—个刚体添加外力或扭矩实际上也会改变该对象Transform组件的移动和旋转,这也就是这两者只需要选其一的原因。使用物理方式操作对象的同时又改变它的Transform会导致碰撞及其他相关的计算出现问题。
刚体在受物理引擎作用之前必须要明确地将其添加给一个游戏对象,之后该对象就会受到重力和通过脚本添加的作用力的影响,但根据实际情况可能还需要为其添加碰撞体或关节等以便达到预期的行为效果。
2、父子化 (Parenting)
当对象处于物理控制之下时,其移动方式与其变换父级的移动方式半独立。如果移动任何父级,则会随它们一起拉动刚体 (Rigidbody) 的子级。但是,刚体 (Rigidbody) 仍会由于重力的作用而下落并对碰撞事件作出反应。
3、脚本处理
要控制刚体 (Rigidbody),主要使用脚本添加力或扭矩。可通过对对象的刚体 (Rigidbody) 调用 AddForce() 和 AddTorque() 来实现此目的。
记住:不应在使用物理时直接改变对象的变换 (Transform)。
4、动画
有些情况下,如需要创建布娃娃效果的时候,需要在动画和物理系统间切换对象的控制权。因此当刚体被标记为动力学(isKinematic)模式时,就不会受到如碰撞、作用力或其他物理效果的影响,这就意味着需要直接操作该对象的Transform组件属性来控制该对象了。动力学刚体(Kinematic Rigidbody)会影响其他的对象,但其自身并不受到物理系统的影响。例如,那些绑定到动力学(Kinematic)对象上的关节(Joint)会约束其他绑定到该对象上的刚体(Rigidbody),动力学刚体(Kinematic Rigidbody)在碰撞时会影晌其他的刚体。
【Unity】11.2 刚体(Rigidbody)的更多相关文章
- 关于Unity中的刚体和碰撞器的相关用法(二)
在关于Unity中的刚体和碰撞器的相关用法(一)的基础上 有一个plane平面,一个ball球体,都挂了碰撞器,ball挂了刚体Rigidbody,写了一个脚本ball挂载在球体上,球体从空中落下装机 ...
- Unity3d刚体Rigidbody与碰撞检测Collider
做了一个碰撞的小Demo,用一个球去撞击一堵墙,结果在球和墙都设置了刚体和碰撞体的情况下,球穿过了墙.移动球的位置,球有时能穿过墙,有时会被墙阻挡. 对于球穿过了墙,这个问题,在网上找了一下答案,基本 ...
- unity3d中 刚体(Rigidbody) 碰撞体(Collider) 触发器(Is Trigger)
刚体(Rigidbody)的官方(摘自Unity3d的官方指导书<Unity4.x从入门到精通>)解释如下: Rigidbody(刚体)组件可使游戏对象在物理系统的控制下来运动,刚体可 ...
- 关于Unity中使用刚体制作简单跑酷案例
一.步骤 1.创建一个Canvas 2.对Canvas进行初始化,记得把Game视图的分辨率调成和Canvas里面设置的一样的分辨率960X640 3.创建一个Image的UI节点作为Canvas的子 ...
- component及刚体rigidbody用法
关于getcomponent函数,rigidbody(2d)的嵌套关系及用法 1.getcomponent函数 在unity中脚本可以看成是可定义的组件,我们经常要访问同一对象或不同对象中的脚本,可以 ...
- 关于Unity中的刚体和碰撞器的相关用法(一)
1.创建一个3D工程 2.构造项目文件目录 3.保存场景为game_scene到文件夹scenes中 4.创建一个Plane平面类型的GameObject节点和一个Sphere球体类型的GameObj ...
- 为什么带网格(mesh)的模型添加了刚体Rigidbody和MeshCollider,还是会从地板穿过去?
两个Gameobject 放置在空中, 一个是Cube,一个是茄子模型 Cube的Collider 是Box Collider , 茄汁的Collider 是mesh collider, 他们都添加了 ...
- unity, 不要试图用rigidbody.Sleep()停止rigidbody
如果想让rigidbody pause,用rigidbody.Sleep()是完全错误的办法.因为有很多情况都可能使一个处在sleep的rigidbody唤醒,所以调用rigidbody.Sleep( ...
- 【Unity】11.6 恒定力 (Constant Force)
分类:Unity.C#.VS2015 创建日期:2016-05-02 一.简介 恒定力 (Constant Force) 是用于向刚体 (Rigidbody) 添加恒定力的快速实用工具,适用于类似火箭 ...
随机推荐
- 《Android源代码设计模式解析与实战》读书笔记(十七)
第十七章.中介者模式 中介者模式也称为调解者模式或调停者模式,是一种行为型模式. 1.定义 中介者模式包装了一系列对象相互作用的方式.使得这些对象不必相互明显作用.从而使它们能够松散耦合.当某些对象之 ...
- V-rep学习笔记:机器人模型创建4—定义模型
完成之前的操作后终于来到最后一步——定义模型,即将之前创建的几何体.关节等元素按层级关系组织成为一个整体. 将最后一个连杆robot_link_dyn6拖放到相应的关节(robot_joint6)下, ...
- 给本地服务器配置py文件的下载功能
打开以下网址 http://localhost/Myservers/test/weibo.py //本地服务器,下载Myservers目录下的test目录中的weibo.py文件 错误提示: HTTP ...
- java 增量运算符
//java 增量运算符 public class Test16{ public static void main(String args[]) { int x1=10; x1+=3; //x1=x1 ...
- [转]URL汉字编码问题(及乱码解决)
一.问题的由来 URL就是网址,只要上网,就一定会用到. 一般来说,URL只能使用英文字母.阿拉伯数字和某些标点符号,不能使用其他文字和符号.比如,世界上有英文字母的网址 “http://www.ab ...
- 【转】Jenkins怎么启动和停止服务
笔者没有把Jenkins配置到tomcat中,每次都是用命令行来启动Jenkins.但是遇到一个问题:Jenkins一直是开着的,想关闭也关闭不了.百度了一些资料,均不靠谱(必须吐槽一下百度).于是进 ...
- NFS 网络文件系统测试笔记
NFS(Network Files System),网络文件系统是1980年由SUN发展出来在UNIX&Linux系统间实现磁盘文件共享的一种方法.它是一种文件系统协议:支持应用程序在客户端通 ...
- 在CLion项目中指定不同版本的链接库
在项目中, 需要使用到libevent-2.1.x, 但是Ubuntu16.04自带的libevent版本为2.0.5, 需要另外编译安装新版的libevent, 安装过程很简单 -stable.ta ...
- CTF SQL注入知识点
理解常用的登录判断 select * from user where username='admin' and password='123' 数据库元信息 infomation_schema 懂PHP ...
- 联想Thinkpad笔记本自带win10改win7图文教程
一.准备工作: 1.备份转移硬盘所有文件 2.改装win7将删除所有分区,要恢复预装的win10系统需到售后 3.4G空间以上U盘,制作U盘PE启动盘 4.操作系统:联想Lenovo笔记本专用GHOS ...