unity物体碰撞阶段 unity 碰撞体

在游戏世界中,游戏物体之间的交互都是通过“碰撞接触”来进行交互的。例如,攻击怪物则是主角与怪物的碰撞,触发机关则是主角与机关的碰撞。在DirectX课程中,我们也大致介绍过有关碰撞检测的内容。游戏世界中的3D模型的形状是非常复杂的,我们不可能按照模型的原始形状进行两者之间的碰撞检测,而是将模型看做近似的立方体或者球体来进行碰撞检测,虽然这种形式的检测精度不是很高,但是对于一般的游戏体验来讲,已经足够了。

在Unity中碰撞体分为:盒型碰撞体、球形碰撞体和胶囊碰撞体,还有一个网格碰撞体。当然,我们还可以将任意数量的上述碰撞体添加到单个游戏对象以创建复合碰撞体。复合碰撞体可以更加贴近的模拟游戏对象的形状,同时保持较低的性能开销。复合碰撞体一般用于父子化的游戏对象,并且根游戏对象上应该只使用一个刚体组件。在某些情况下,如果复合碰撞体也不够准确。我们才可以使用网格碰撞体精确匹配游戏对象网格的形状。网格碰撞体需要更高的性能开销,因此请尽量不要在游戏中大量使用。此外,网格碰撞体之间无法进行碰撞检测,只能是简单的盒型或球形碰撞体与网格碰撞体进行碰撞检测。

接下来,我们创建一个新的场景“SampleScene2.unity”来演示碰撞体的使用。

20250825104929124-0ffeb84d7b502838412554bb9885e071

我们在一个平面上面添加两个球体,默认情况下,创建的球体会自动添加球形碰撞体。

20250825105100705-1de26cc5a8f7ef8bcdfef91bcf04625d

20250825105136342-image

如上图所示中的“Sphere Collider”球形碰撞组件,为了能够让我们左边的黄色球体Sphere2产生运动,我们需要添加一个刚体,如下所示:

20250825105222801-image

此时,我们的黄色球体Sphere2同时具备了碰撞体和刚体两个组件。接下来,我们给黄色球体施加一个力,让其能够向右运动去撞击紫色的球体Sphere1。

20250825105253289-image

我们增加了一个X轴方向的数值为2的力。接下来,我们就运行这个工程来查看效果:

20250825105318459-image

我们发现,当黄色球体接触到紫色球体的时候,就静止不动了。我们暂时不解释这个结果。我们上面提到过,球体是自动添加球形碰撞体的,也就是说,我们的紫色球体上面有一个球形碰撞体(没有刚体)。我们取消紫色球体上面的球形碰撞体,在重新运行这个工程。

20250825105347484-image

20250825105411516-image

我们发现,黄色球体会穿过紫色球体继续向右运动下去。从紫色球体的表现,我们可以看出碰撞体组件最明显的表现就是不会让对方游戏对象穿透(也叫穿模)。接下来,我们将黄色球体的碰撞体组件也取消掉(同时取消刚体Use Gravity属性,防止重力影响掉落平面以下),也就是说两个球体都没有碰撞体组件了。如果我们再次运行工程的话,就会发现黄球依然穿透紫球。那么,我们恢复紫球的碰撞体组件呢?我们再次运行工程,就会发现黄色再次穿透紫球了。最后的结论就是,两者都具备碰撞体组件的时候,才会发生碰撞检测。这个道理非常简单,熟悉我们DirectX课程的应该知道,碰撞检测的本质就是两个碰撞模型进行相互包含计算,因此碰撞双方都必须具备碰撞体,否则没办法进行检测计算。

接下来,我们就来介绍一些碰撞体组件的参数。

20250825105500956-image

首先是Edit Collider按钮,点击这个按钮,可以让我们可视化的调整碰撞体的尺寸。

20250825105531645-image

点击线框连接点,拖动就可以修改碰撞体的大小,同时在Inspector检视面板中看到

20250825105902162-image

 

上图中的中心点的Y值和半径Radius值就随之改变了。对于圆形来讲,只需要圆心和半径就能确定它的大小了。这一点应该很容易理解。当然我们还可以通知修改数值改变大小。

20250825105912168-image

Is Trigger是一个触发选项,后面我们会详细介绍它。

Material代表物理材质。当碰撞体相互作用时,它们的表面需要模拟所应代表的材质的属性。例如,一块冰将是光滑的,而橡胶球将提供大量摩擦力并且弹性很好。虽然碰撞时碰撞体的形状不会变形,但可以使用 Physics Materials(物理材质)配置碰撞体的摩擦力和弹力。

Center就是碰撞体的中心,默认X/Y/Z都是0,等效于于局部坐标系原点。

Radius是圆形碰撞体的半径大小,默认值是0.5。

如果是盒型碰撞体的话,这里应该是Size属性,其X/Y/Z代表盒性的长宽高。

20250825110001843-image

如果是胶囊碰撞体的话,这里应该是Radius和Height,以及Direction三个属性。其中Radius代表胶囊体的半径,Height代表胶囊体的高度,而Direction则是局部空间中纵向方向的轴,默认是Y轴。胶囊体通常用来模拟“人形”形状进行碰撞检测,因此多用于人物角色上。

20250825110033306-image

我们使用碰撞体的时候,最重要的注意点就是,让碰撞体的尺寸能够恰当的包裹住我们的模型。因为我们是在Unity上创建的球体,而Unity会根据球体的尺寸自动匹配添加球型碰撞体。因此,球体模型和球型碰撞体的尺寸是非常吻合的。但是,如果是我们自己手动导入的FBX格式的3D模型,Unity就不能保证碰撞体能够恰当的包裹住3D模型了。碰撞体能够恰当的包裹3D模型非常的重要,这个将直接决定我们游戏中模型之间的碰撞检测,因为碰撞体是不可见的,我们只能通过模型与模型的距离来检查是否发生碰撞。但是我们自己都很明白,模型与模型的距离并不代表碰撞体与碰撞体之间的距离。如果模型与碰撞体不能恰当的包裹,那么我们可能在视觉上产生很大的差异,影响游戏体验。

🎀 🌸

📜 重要提示:
如有解压密码:看下载页、看下载页、看下载页。
源码工具资源类具有可复制性: 建议具有一定思考和动手能力的用户购买。
请谨慎考虑: 小白用户和缺乏思考动手能力者不建议赞助。
虚拟商品购买须知: 虚拟类商品,一经打赏赞助,不支持退款。请谅解,谢谢合作!
邻兔跃官网:lt.lintuyue.com(如有解压密码看下载页说明)。

文章版权声明 1、本网站名称:邻兔跃lT
2、本站永久网址:https://lt.lintuyue.com/
3、本站内容主要来源于互联网优质资源整合、网友积极投稿以及部分原创内容,仅供内部学习研究软件设计思想和原理使用,学习研究后请自觉删除,请勿传播,因未及时删除所造成的任何后果责任自负,如有侵权,请联系站长进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容