Unity3D - 用更通俗的方式来教你理解刚体和碰撞体
Posted EZhex1991
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity3D - 用更通俗的方式来教你理解刚体和碰撞体相关的知识,希望对你有一定的参考价值。
对于刚接触Unity3D的新手,部分人会在3D的物理组件的理解中弄混刚体(rigidbody)和碰撞体(collider)这两者。网络上很多相关文章,个人认为逻辑条理清晰,但推荐给别人后仍然会有人说没有很大帮助。究其原因,应该是大部分文章是以unity中组件的特性和用法为基础去解释两者,对读者的unity基础有一定要求。最近向别人解释时突然想出一个以人对现实世界的理解为基础的解释方法,在此记录分享给大家。
首先,为了更好地解释这两个组件对物体的模拟,我们从一些更容易理解的组件来看看一个物体的构成:
Transform:
在Unity3D中,一个空的GameObject是只有Transform信息的,记录该物体的 位置信息。
Renderer:
当一个GameObject拥有了Renderer(以及它所依赖的MeshFilter和Material等),它就会显示在我们的场景当中,表现的就是该物体有 视觉信息。
这时想象你站在该物体的附近,如果你面向该物体的位置(Transform),你就可以看到该物体在你眼前(Renderer)。但如果这时你情不自禁想伸手去摸,你是不会打到前排观众的头造成纠纷的。
Collider:
我们给当前的GameObject再加上一个Collider组件(或者新建一个Cube,该GameObject会包含Transform、MeshFilter、Collider、MeshRenderer这四个组件),这时该物体就有了 空间占位信息。
这时你再伸手去摸,你会发现你可以触碰到该物体了。但是在现实中,一个物体是会受到重力影响向下落的,或者这是一张放在桌上的钞票,你会发现你无法将它拿起并放入口袋。
Rigidbody:
我们再给该物体加上Rigidbody组件,这时该物体就有了质量、速度、移动方向等 质能信息,并可以响应外界的物理影响。
这时的钞票,你就可以看到它、碰到它、捡起它了。
综上,在“Collider”和“Rigidbody”的区分中引入第三者“Renderer”,它们就构成了模拟一个物体所需要三个基础特性:看不看得见-Renderer,摸不摸得着-Collider,挪不挪得动-Rigidbody。
当然,这三者均不是必要的,下面我们来探讨一下不同东西的不同构成:
- “我上面有人”——该说法理解起来不难,你“上面”有人(别污)?我既看不见又摸不着,还不能把它从你上面踢下来。那么这就是一个看不见(没有Renderer)、摸不着(没有Collider)、挪不动(没有Rigidbody)的物体。
- “我左眼看到鬼”——这个就简单了,你看到了鬼,但是你摸不着它也挪不动它,鬼又是可以飘的,所以它是一个有Renderer、没有Collider、没有Rigidbody的物体。
- “钉子户”——这个是送分题,你看得见,摸的着,但是你只能靠拆迁(Transform.position)才能挪动,所以它是一个有Renderer,有Collider,没有Rigidbody的物体。
本来想找个有Renderer,有Rigidbody,没有Collider的现实例子,但是好像不可能??
“你瞅啥”,“瞅你咋地”,“你给我起开”,“呵就你个小身板还撞我”——这就有点难了,很明显,两个人互相“瞅”不顺眼,所以有Renderer,“你给我起开”说明是被挡了道,所以有Collider,但是其中一个“挪不动”另一个,那是不是就代表它没有Rigidbody呢?其实不然,在Rigidbody里会有个IsKinematic(运动学物体),怎么理解呢,就是你可以用代码给它施力(Rigidbody.AddForce),但是它是不会响应别的物理碰撞的-“呵就你个小身板还撞我”。所以,这是两个有Renderer,有Collider,有Rigidbody的东西,只是其中一个勾选了IsKinematic而已。
以上就是从现实世界理解的Renderer、Collider和Rigidbody,日后有时间会补充OnCollider和OnTrigger这两个MonoBehaviour的Message和这两个组件的关系。
以上是关于Unity3D - 用更通俗的方式来教你理解刚体和碰撞体的主要内容,如果未能解决你的问题,请参考以下文章