[专栏精选]Unity刚体详解

本文节选自洪流学堂公众号专栏《郑洪智的Unity2018课》,未经允许不可转载。

洪流学堂公众号回复专栏,查看更多专栏文章。


洪流学堂,让你快人几步。你好,我是郑洪智。

从这节课开始,我会尝试用一种新的写作风格,也希望大家能够多提意见。

背景补充

小新今年数学专业马上大三了,却一直没有找到自己的职业方向,不知道以后要干什么,唯一的爱好就是玩游戏,特别想自己能开发一款成功的游戏。小新趁着暑假去找各种实习兼职,一个偶然的机会收到了一个游戏公司的面试通知。小新欣喜若狂,前去面试,聊到游戏时,小新能滔滔不绝聊出很多东西,但是问到开发游戏的时候,却哑口无言,无法回答面试官的问题。面试官问了很多游戏开发、Unity引擎的问题,小新就下定决心,一定要好好学习一下游戏开发,特别是Unity引擎。小新找到了自己的师兄大智,这位师兄有8年Unity开发经验,想向师兄请教一下学习的方向。没想到师兄特别热情,是一个技术布道者,喜欢研究传播技术,从此小新跟着大智开启了他的Unity学习之旅。

大智告诉小新,叫我“大智”就好了,以后不要叫师兄了哈。

Rigidbody 刚体

“大智,昨天我学习了物理系统,知道了碰撞体,那物理系统里面还有别的东西么?”
“你呀,太天真了,Collider只是物理系统的一部分。你看昨天学的Collider,他们都只是一个静态的碰撞体。我们昨天学习过物理系统很重要的是模拟物体的受力情况,物体根据物理规则运动呀。”
“那通过代码修改物体的位置不就能运动起来了么?”
“通过代码直接修改物体的位置并没有通过受力的方式改变物体,所以这种方式并没有应用到物理系统,要想让物体通过受力运动,我们首先要了解一下Rigidbody组件。物体只有添加了Rigidbody组件,才会对受力作出反应。小新,你现在先去看看Unity的文档,看看Rigidbody组件到底是什么吧!”
“收到,我马上就去看!”

小新马上打开Unity文档,找到了Rigidbody的介绍文档https://docs.unity3d.com/Manual/RigidbodiesOverview.html

Rigidbody组件可以让一个物体受到物理影响。比如添加Rigidbody组建后,物体会立马对重力作出反应。如果物体上还添加了Collider,物体在受到碰撞时也会移动。

“大智,我知道了!Rigidbody可以让物体对受力做出反应,但是我有点和Collider搞不清楚了。”
“这两个是初学者不太容易搞清楚的概念。Collider只是给物体加上了碰撞,让物体拥有了实体,而不是一个可以穿过去‘全息投影’。而Rigidbody是让物体拥有了动态受力的功能。所以我们一般称只有Collider没有Rigidbody的物体叫静态Collider。一般刚体物体上也会有Collider,因为需要和别的物体发生碰撞。如果没有Collider,即使刚体也不会和其他物体碰撞。”
“那是不是不应该给场景里所有的物体添加Rigidbody组件?”
“非常对,场景里有一些物体是基本不会动的,比如说一栋大楼,一块大石头等等,他们只需要阻挡别的物体别穿过他们就行了,所以它们只需要添加Collider就行。因为添加了Rigidbody组件后会带来很多的物理计算,所以只需要给会移动的物体添加Rigidbody就行。
“我明白了!我说呢怎么给所有物体添加了Rigidbody后卡的跑不起来呢,我去把我的吃鸡场景重新设置一下,嘿嘿!”
“你呀你呀,真是个急性子!顺便好好看一下刚体组件的各个参数!”
“知道啦!”

Rigidbody组件

小新认真看了Rigidbody组件的文档,并做了笔记:

  • Mass 刚体的质量,单位是千克(kg)
  • Drag 空气阻力,0代表没有空气阻力,无限大的值代表物体会立即停下来(惯性消失)。
  • Angular Drag 物体受到一个扭力旋转时的阻力,0代表没有阻力,但是需要注意的是无限大的值并不能让物体立即停止旋转。
  • Use Gravity 是否受重力影响
  • Is Kinematic 选中时,物体不会受到物理物理引擎的影响,只能通过修改Transform移动物体。
  • Interpolate 插值,如果发现刚体移动有卡顿,可以尝试选择此选项。
    • None 不使用插值
    • Interpolate 根据上一帧的Transform进行平滑
    • Extrapolate 根据估算的下一帧的Transform进行平滑
  • Collision Detection 碰撞检测的方式,当你的刚体快速运动时,可能会出现穿透的现象,可以设置这个选项。
    • Discrete 离散检测,性能较高,默认值
    • Continuous 连续检测。使用此选项时,物体与其他动态Collider(刚体)使用离散检测;与其他静态Collider使用连续检测。如果其他刚体设置为了Continuous Dynamic,会使用连续检测和这个刚体进行碰撞检测。这个选项非常影响性能,如果没有快速运动物体的碰撞检测问题,保持Discrete设置
  • Continuous Dynamic 动态连续检测。如果其他物体是Continuous或Continuous Dynamic,与这个物体碰撞时会使用连续检测。也会和静态Collider使用连续检测。对于其他的collider(标记为Discrete的Rigidbody)使用离散检测。。用于快速移动的物体。
  • Constraints 约束刚体的运动
    • Freeze Position 选中后刚体不会在对应的轴上移动
  • Freeze Rotation 选中后刚体不会在对应的轴上旋转

小新看完之后,还是有一些地方不太清楚,又来骚扰大智。
“大智,刚体的Is Kinematic我明白了是什么,这个有什么用呢?加上刚体不就是为了受力么,为什么还要提供一个这个属性,关掉受力呢?”
“有些情况,我们不想让物体受力,但是仍然能够和其他物体发生碰撞,影响其他物体。比如这个物体上有动画,在播放动画的时候,我们想让动画来控制物体的位置。”
“明白了,但是感觉还是需要用到的时候再去理解。那这个Collision Detection该什么时候设置呢?是不是类似子弹这种情况?”
“说的很对,Collision Detection就是针对快速移动的小物体,比如说子弹,但是通常游戏射击并不用实体的子弹,因为子弹多的时候性能太差了,我可以给你推荐一个文章来看看:https://zhuanlan.zhihu.com/p/22105641
“谢谢智哥,我也发现了用刚体的话性能太差了,我去看看”

碰撞汇总

“大智,我发现有些情况两个物体发生了碰撞,但是并没有调用脚本中的代码,这是怎么回事?”
“哈哈,这时候我就要祭出大招了,给你两个表格,对照着看看是否会发生碰撞哈。”

OnCollision消息
OnTrigger消息

“太好了,有了这两个表格,能不能获取到消息就很清晰了!”

总结

“我来简单总结一下,今天这个Rigidbody组件是物理系统中非常重要的组件,运动的物体都靠它,遇到问题多去查Unity的文档,里面解释的很清楚。”
“好,我已经掌握的差不多了,下一步就是在我的吃鸡游戏里运用一下,嘿嘿”

今日思考题

“既然你说到了运用,我要给你布置一个小作业,用代码控制一个刚体在不平整的地形上运动,试试看!”
“收到!我去也!”
“收获别忘了分享出来!也别忘了分享给你学Unity的朋友,也许能够帮到他。”

洪流学堂公众号回复专栏,查看更多专栏文章。



《郑洪智的Unity2018课》,倾尽我8年的开发经验,结合最新的Unity2018,带你从入门到精通。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272

推荐阅读更多精彩内容