Unity小游戏——武士和怪物的碰撞检测

简介: Unity小游戏——武士和怪物的碰撞检测

摘要:摁下鼠标后武士将挥刀迎击,如果能成功砍到,怪物将四处飞去。不过如果没有砍倒怪物却触到了它,游戏则结束。为了实现这种功能,需要检验武士和怪物之间的冲突,也就是所谓的碰撞检测处理。

在很多游戏中,碰撞检测是非常重要的一环,不过在程序处理方面往往是比较麻烦的。但是在Unity中,只需设定好形状就可以进行碰撞检测的计算


一、分别对各个怪物进行碰撞检测时的问题

首先我们尝试对武士采用立方体,对怪物采用球体来执行碰撞检测。角色之间的碰撞检测,经常采用这种粗略的几何形状来进行。这样做的好处是相较于严格的几何形状,计算量会少很多。而且对于大部分游戏而言,这样的做法都能得到比较逼真的结果。

一般来说,球体的计算量更小。因为游戏中会出现大量的怪物,所以我们选择了计算量尽可能小的球体作为检测形状。

设定好形状之后,就可以用Unity来执行碰撞检测的计算。然后再实现碰撞后武士的行为似乎就大功告成了。不过事实上等游戏运行起来以后,会发现还存在很多问题。

1、一个很大的问题就是,武士会绕开怪物前进的问题

1.跳起来越过

2.从一旁越过

这是因为怪物的碰撞检测形状比武士的小很多。在Unity的碰撞处理中,为了使对象在发生碰撞后仍可以按照原来的前进方向移动,对碰撞对象加入了滑动之类的处理。

让碰撞后的对象进行滑动,多数情况下都会使游戏玩起来更简单自然,不过在我们的这个游戏中却带来了危害。

2、另外还有一个问题是,攻击的难度将加大。

点击鼠标按键后武士开始挥舞砍刀。攻击检测将伴随着这个攻击动作进行。和怪物的碰撞检测相似,我们也是用球体来进行检测。

虽然用于攻击检测的球体尺寸够大,不过从武士的中心位置往内或者往外偏移的地方有可能仍位于攻击范围之外。这样就会出现看起来好像攻击成功了但其实并未成功的情况。

针对这个问题,试着改变碰撞检测的形状及其尺寸也是一种解决方法。不过怪物自身的尺寸本来就很小,如果加大的话又将出现另外一个极端,即“看起来没有击中,结果却集中了”的情况可能会增多。

于是就需要尝试其他的解决办法,如下。

二、把怪物编成小组

游戏中的怪物总是扎堆出现,同一批次的怪物彼此之间比较密集,另外武士总是沿着直线前进,因此即使把同一批怪物编成一个小组来处理好像也没有问题。

于是我们用OniGroup对象把怪物集合起来,将怪物作为它的子元素来处理。碰撞检测也改为对OniGroup对象整体进行。

怪物小组的碰撞家安测使用立方体,尺寸和武士的碰撞检测所用的立方体大抵相同。这样设置以后,武士就不能再越过怪物或者从一侧绕过怪物了。

另外,假设OniGroup检测大奥来自武士的攻击后,作为子元素的所有怪物都将受到攻击。这样一来,前面提到的因为怪物的位置稍有差异就导致攻击不成功的情况就不会再有了。

小结

Unity中允许直接使用模型的形状来进行碰撞检测。不过很多游戏中都采用粗略的形状,而且也能达到很好的效果。特别是那些尺寸比其他角色小很多的角色以及大量对象一起移动的情况下,把它们集中归为一个小组做碰撞检测是很好的办法。


相关文章
|
6月前
|
图形学
【制作100个unity游戏之28】花半天时间用unity复刻童年4399经典小游戏《黄金矿工》(附带项目源码)
【制作100个unity游戏之28】花半天时间用unity复刻童年4399经典小游戏《黄金矿工》(附带项目源码)
220 0
|
4月前
|
图形学 C#
超实用!深度解析Unity引擎,手把手教你从零开始构建精美的2D平面冒险游戏,涵盖资源导入、角色控制与动画、碰撞检测等核心技巧,打造沉浸式游戏体验完全指南
【8月更文挑战第31天】本文是 Unity 2D 游戏开发的全面指南,手把手教你从零开始构建精美的平面冒险游戏。首先,通过 Unity Hub 创建 2D 项目并导入游戏资源。接着,编写 `PlayerController` 脚本来实现角色移动,并添加动画以增强视觉效果。最后,通过 Collider 2D 组件实现碰撞检测等游戏机制。每一步均展示 Unity 在 2D 游戏开发中的强大功能。
221 6
|
4月前
|
图形学
小功能⭐️Unity解决物体移动速度过快不能检测到碰撞
小功能⭐️Unity解决物体移动速度过快不能检测到碰撞
|
图形学
Unity小游戏——迷你拼图
Unity小游戏——迷你拼图
265 1
|
图形学
Unity小游戏——使被砍中的怪物四处飞散
Unity小游戏——使被砍中的怪物四处飞散
|
图形学
unity小游戏——得分高低的判定
unity小游戏——得分高低的判定
|
7月前
|
图形学
【Unity3D开发小游戏】Unity3D零基础一步一步教你制作跑酷类游戏
【Unity3D开发小游戏】Unity3D零基础一步一步教你制作跑酷类游戏
|
4月前
|
图形学 缓存 算法
掌握这五大绝招,让您的Unity游戏瞬间加载完毕,从此告别漫长等待,大幅提升玩家首次体验的满意度与留存率!
【8月更文挑战第31天】游戏的加载时间是影响玩家初次体验的关键因素,特别是在移动设备上。本文介绍了几种常见的Unity游戏加载优化方法,包括资源的预加载与异步加载、使用AssetBundles管理动态资源、纹理和模型优化、合理利用缓存系统以及脚本优化。通过具体示例代码展示了如何实现异步加载场景,并提出了针对不同资源的优化策略。综合运用这些技术可以显著缩短加载时间,提升玩家满意度。
295 5
|
3月前
|
测试技术 C# 图形学
掌握Unity调试与测试的终极指南:从内置调试工具到自动化测试框架,全方位保障游戏品质不踩坑,打造流畅游戏体验的必备技能大揭秘!
【9月更文挑战第1天】在开发游戏时,Unity 引擎让创意变为现实。但软件开发中难免遇到 Bug,若不解决,将严重影响用户体验。调试与测试成为确保游戏质量的最后一道防线。本文介绍如何利用 Unity 的调试工具高效排查问题,并通过 Profiler 分析性能瓶颈。此外,Unity Test Framework 支持自动化测试,提高开发效率。结合单元测试与集成测试,确保游戏逻辑正确无误。对于在线游戏,还需进行压力测试以验证服务器稳定性。总之,调试与测试贯穿游戏开发全流程,确保最终作品既好玩又稳定。
165 4
|
3月前
|
前端开发 图形学 开发者
【独家揭秘】那些让你的游戏瞬间鲜活起来的Unity UI动画技巧:从零开始打造动态按钮,提升玩家交互体验的绝招大公开!
【9月更文挑战第1天】在游戏开发领域,Unity 是最受欢迎的游戏引擎之一,其强大的跨平台发布能力和丰富的功能集让开发者能够迅速打造出高质量的游戏。优秀的 UI 设计对于游戏至关重要,尤其是在手游市场,出色的 UI 能给玩家留下深刻的第一印象。Unity 的 UGUI 系统提供了一整套解决方案,包括 Canvas、Image 和 Button 等组件,支持添加各种动画效果。
168 3