Unity-2D游戏开发的陷阱

关于新手的Unity有很多文章,但是我不想重复自己,而是想分享我在开发第一款游戏中的经验,更具体地说,是谈论我偶然发现的东西。 亲爱的开发人员,这将给您所有人一个机会,以保护您自己免受日后计划外的工作和时间的浪费。 我希望Unity开发人员可以阅读这些材料,以改善他们的产品。

图片

注意 ,猫截图下16+

由于我们大多数人都是技术人员,因此我会把所有东西都放在架子上,一时流行,并尽量简明扼要地在没有水的情况下展示材料。

挑战赛


我想写一些新年的东西,简单易懂,易于管理。 经过与目标受众(我的孩子)的讨论,决定该游戏将如下所示:

  • 2D (因为在手机上玩2D游戏更方便)
  • 一个手指控制 (有时最多两个)
  • 消磨时间 (只是戳一下,以免伤脑筋)
  • 成就系统 (至少使继续有趣一点)
  • 卡通漫画
  • 优美的音乐
  • 没有网络
  • Android (易于安装测试apk文件)


这一切都导致了一个想法: 撒旦圣诞老人射出了干扰他包包的鹿

凡人克劳斯

然后一切开始...

1.第三方android库


问题:我花了两天时间来找到正确的SDK,JDK,NDK,并使Unity与它们一起使用。 在Unity之前的我的机器上,已经存在android studio的sdk,但是它不是从它们开始的,我不得不寻找其他东西,安装,尝试,再次搜索...两天...

改进建议:如果在安装Unity的过程中自动安装了必要的最新版本的sdk,并且如果有人需要降级或升级,那就很好了,那就让这个自己用笔配置。

图片

2.矢量图形


问题:开箱即用的Unity无法理解SVG 。 即使是像Paper.js这样的各种小型JS框架,也可以简单地与矢量巧妙地协同工作,而像Unity这样的大象却不能。

解决方案:我安装了一些看似SVG的beta软件包,但最终将其转换为栅格。 可以接受,但令人尴尬的Unity!

3. 2D平台


图片

问题:如您在屏幕截图中所见,土地上有雪球。 这也是MeshPolygon Collider 。 也就是说,它是一个与对象交互的表面,可以在编辑器中对其进行更改。 因此,在当前版本的Unity中,没有可用于模拟此情况的标准工具。

解决方案:
  1. 您可以使用Alpha绘制栅格(减号-编辑此孔非常不便)
  2. 您可以购买执行此操作的插件(减去-花钱)
  3. 您可以自己编写插件(减去-需要很长时间才能弄清楚,需要很长时间来编写)

我选择了一种漫长而又自由的方式;)如果有人需要这样的插件-编写,共享,告诉如何使用它,我不在乎:)

顺便说一下,我观看了新的Unity beta的演示,似乎这样的事情将立即出现! 谢谢你,朋友们!

是的,我要添加一个面板来快速创建2D图元,在其中圈出,在正方形处……否则,它们根本就不存在,或者,或者您必须进入资产渠道并寻找它。

4.旋转和四元数


问题:非常复杂的3d定位和旋转系统,在2D游戏中是不必要的。

解决方案:您只需要理解并接受它,因为2D游戏是坐标Z = 0的3D游戏。同志们,以2D模式简化此系统会很好;)

当我刚刚在另一个引擎中编写player.a = 45时,我花费了大量时间并几乎使我的大脑瘫痪,试图将对象相对于另一个对象沿正确的方向旋转到正确的角度 是的,当前版本中有许多显而易见的方法。

5.调试


问题:对于我们(初学者)来说,调试的可能性仅以使用print()方法将变量值输出到控制台的形式提供。 付钱的人很多。 如果我弄错了,请在这里纠正我,但是我无法以任何方式配置Visual Studio进行调试,尽管我发现一个视频表明您不需要配置任何内容,但它应该可以自行运行。 他得出结论,调试版提供付费版本。

解决方案:我只使用print() ...,并且我知道调试复杂的项目将是获得Unity付费版本的决定性因素。 公司的行销人员感到遗憾:(

解决了! 由于Leopotam的提示我为工作室安装了一个附加软件包,出现了“附加到Unity调试器”按钮。

6.点击并单击,滑动并移动


问题:尽管内置的用户输入系统很方便,但是处理普通的单个磁带,单击和轻扫的简单性还不够。 我想使用一种方法,该方法将为不同类型的设备返回单击/点击的坐标,例如,触摸和带有鼠标的桌面。

解决方案:我必须编写我的类层并包装必要的事件。

也许我会再对管理系统发表评论。 非常感谢Unity开发人员的通用输入,但是对于触摸设备,我也希望通用控件。 例如,向上滑动-绑定到“跳转”,可视化十字形和按钮,例如在操纵杆上等等。 您可以购买付费包装,也可以自己写,花时间骑自行车。

7.坐标混乱


问题:您无法将点击坐标分配给对象并在正确的位置看到它,这有点不明显。

解决方案:首先,您需要阅读文档,了解并使用各种方法来映射坐标:

WorldToScreenPoint()
ScreenToViewportPoint()
transform.TransformPoint()
和其他...

我将对此进行解释,因为场景中的距离是以像素以外的任意单位衡量的,此外,对象分别具有嵌套系统,其位置是相对于父对象的。

8.少量的UI控件


问题:包装盒中仅提供了最基本的元素,即使如此,您也必须进行一些修改。

解决方案:您可以满足于一点。 例如,我花了很多时间使动态列表滚动。 您可以购买炫酷的控件(减去-花钱)。

9.大的APK文件大小


问题:构建一个空项目时,其大小为21.9 MB (23,061,612字节)

解决方案:您需要节省所有费用。 我捏了一些mp3文件,压缩了的纹理,并试图在项目中不要包含多余的东西。 但是,当连接了其他程序包时,大小无情地增加了,争取达到一百。

Google Play要求开发人员发布<100Mb的应用程序。 (已经吞噬了22个)。 当然,有分散,动态加载资源的机制,但是我们是新来者,我们的目标是学习基础知识,实现我们的梦想,而不是与市场的限制作斗争。

10.西里尔字母


问题:组装了一个用于JS / HTML5平台的项目(用于测试)后,结果发现根本没有俄语文字。

解决方案:您需要下载字体文件,将其导入资产,然后在每个文本的设置中指定此导入的字体。

这有点奇怪。

11.物理表现


问题:当存在复杂的对撞机时,当使用连续模式进行碰撞检测时 ,当在一个场景中使用多个粒子系统时,简而言之,当使用了能给游戏带来效果和美感的所有东西时,游戏开始严重减速。

解决方案:仅使用原始的CircleRectangle对撞机, Collision Detection仅应为DiscreteParticle System中的粒子数应设置为可接受的最小值。 好吧,仍然,不要承认我的错误,不要在粒子系统内部使用碰撞。 当然,当血液从物体上流下来时,效果很漂亮,但是非常耗费资源。

图片

自然,这对于2D手机游戏都是如此。 但是我希望Unity开发,使用新的炫酷着色器来处理粒子,碰撞以及其他所有复杂而美观的事物。

结论


当然,还有其他陷阱,但这些都是琐事。 有意想不到的优势,例如:

  • 预制件
  • 良好的文档和社区
  • 使用精灵的Alpha通道自动创建多边形对撞机
  • 易于使用声音效果。
  • 在关键帧上非常方便的动画(添加了Anima2D和反向运动学)

但这是一个完全不同的故事...

至于任务的时间安排,我对第3点(开发用于建模平台的插件)非常着迷。 作为一名经验丰富的开发人员,我为自己评估了这个问题,并将其评级为:20、30、40(每天晚上/天休息,因为我忙于主要工作),其中20表示乐观,而40表示悲观。 如果不是第3点,那我将达到20-30,但最后我花了大约两个月的时间。 (不,我每天晚上都不上班,也就是说,我大约40点钟)。

如果有人感兴趣,我会说我必须自己绘制图形,这要归功于Inkscape程序。 我只选择了带有免费使用许可的音乐。

我不得不花几天的时间在Google Play上发布。

在整合广告上又花了两天的时间(您可能不会看到它,我只是想尝试一下,尽管这个玩具没有被认为是商业玩具)

是的,本来可以改善很多,但是我想在新年假期之前逗我的朋友们。

不要误会我的意思,这不是PR帖子。 最重要的是,我希望那些使用Unity引擎的人注意这些缺点,当然要消除它们(这是理想的)。 而且我也想帮助我的精神兄弟们不要跟我一样。

如果我在某些方面弄错了,请不要严格判断,在评论中分享您的技巧!

Source: https://habr.com/ru/post/zh-CN432946/


All Articles