65.9K
CodeProject 正在变化。 阅读更多。
Home

探索 Unity 引擎支持的 2D 电子游戏开发

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2022年11月17日

Apache

12分钟阅读

viewsIcon

6583

Unity 引擎支持 2D 电子游戏开发

1. 引言

在巴西和全球玩家社区蓬勃发展的巨大增长的驱动下,对生产力更高的游戏开发工具和低成本引擎的追求,为当前游戏的开发提供了广泛的选择。

基于这一背景,本文是一系列文章(Macario, Silva and Silva, 2022)的一部分,旨在验证作为电子游戏开发促进机制的技术和实践。所有项目都具有实践性,始终保持教学性、实验性,并始终致力于为计算机科学和游戏制作社区做出贡献。

2. 背景

有多种工具可供选择以支持游戏开发过程,既包括 GPL(GNU 通用公共许可证)解决方案,也包括付费许可的产品。然而,这些工具并不总是易于使用。这通常会使人们难以理解游戏开发背景下的简单事件,而在这种情况下,支持工具会限制最终产品的游戏分发。

分析当前市场上的引擎,Unity以其组织良好的界面(有助于场景对象的操纵)、庞大的图形函数库和许多动画资源而脱颖而出,这些都极大地促进了游戏开发过程及其向绝大多数当前平台的发布。此外,Unity对任何开始数字游戏开发的人都是免费提供的,只要您的年收入不超过100,000美元,并且其使用是免费的。

本工作的重点是使用Unity工具及其便利性开发一款2D(二维)平台类型游戏,通过对游戏设计、角色创建、动画和C#语言编程进行综合性方法。采用线性开发方法,分为解决问题和使用资源的步骤,并使用手动绘图工具和图形编辑软件。

3. 方案和技术项目

拟议的原型展示了一个完整游戏的构建场景,包括角色、开端、目标、互动、动作、状态周期和奖励。这是为了为主研究中预期的验证提供基础,即通过对作为完整2D游戏构建促进者的工具使用的实践性回顾来做出贡献。另一方面,诸如分数控制、连续性、历史和用户集成等额外功能将被排除,因为它们与基本游戏开发工具没有直接关系。

为了开发游戏,使用C#编程语言来创建输入控件、碰撞、动画状态转换、控制物理以及关卡之间以及开始和结束游戏菜单(图1)的变化控制。

用于构建此项目的工具有

  • Unity引擎 2021:本项目使用的游戏开发引擎。
  • Visual Studio Code:与Unity一起用于开发C#语言脚本(指令)。
  • Adobe Photoshop 2021:图像编辑器,用于创建和操纵游戏的视觉元素。
  • GitHub:用于C#语言代码版本控制的系统。
  • Diagrams.net:多平台系统,用于制作流程图。

在开发初期,通过Unity Technologies本身提供的文档和教程,以及其社区提供的所有材料,对Unity中现有功能进行了深入研究。在此阶段,人们可以看到Unity游戏引擎是多么强大和友好,使用它可以开发出很少依赖外部工具的游戏,同时还需要对编程、编辑和动画制作有合理的理解。

图1展示了流程图,该流程图基本代表了游戏结构的运行,包括角色可能执行的、为完成拟议游戏而期望执行的操作。

图1. 游戏基本操作流程图

开始使用Unity创建拟议的游戏时,有必要了解其内部工作的一些基本方面。在创建使用该工具的游戏时,有一个需要考虑的结构。有必要理解如何处理游戏对象。Unity中的每个游戏都基于场景,而游戏对象是场景中的所有元素。进入场景时,这些元素会接收3D坐标,并且所有场景元素都可以使用每个游戏对象的Transform类中的这些坐标进行移动;该类负责控制场景中每个元素的定位、旋转和缩放。就像Transform类一样,一个Sprite Renderer(负责控制每个2D元素图像方面的类)也被应用于进入场景的每个对象。这些类通过继承Component类与场景中的元素进行交互,而Component类又与GameObject类交互,GameObject类继承自Object类,并从图形引擎的UnityEngine库实现,该库在Unity平台生成的脚本中自动定义,用于任何与图形引擎交互的代码。

用户与游戏集成的可能性,除了开始游戏(START)之外,基本上是操纵主角Rocni,根据她与游戏脚本定义的和控制的世界的可能交互(图2)。

图2. Rocni角色的基本交互

图2通过用例图,展示了主角角色通过玩家用户可用的命令与世界的可能交互。在这种情况下,通过两个屏幕组件,实际上是两个控制按钮,街机风格,玩家可以:指示Rocni角色奔跑、跳跃、与物体交互(收集)或攻击敌人。

还考虑了图形元素,主角Rocni由不同姿势的小忍者的一系列帧(图3)表示,当以每秒一定的频率显示时,这些帧会被动画化,从而创建角色每个状态的动画,该频率因执行的每个动作的速度而异,图3中可以看到其中一些帧。

图3. 主角Rocni可能的图片拍摄

角色的动画流程控制通过Animator组件完成,该组件通过脚本中定义的参数构成动画与场景事件之间的关系,该流程可在图4中看到。图4展示了可能的状态集及其转换规则。

为了管理角色与游戏宇宙的交互,然后控制其状态的集合和规则,项目依赖于一个基于完全用C#开发的算法的引擎,但仍然可以在Unity实现控制台中进行操作。该环境还允许以高度集成的方式进行调试和测试。

图4. Rocni状态机的集合和规则

语义上,这两个图表都代表了相同的状态生命周期。第一个图表侧重于游戏项目定义期间的讨论和规范,第二个图表是从对用于控制游戏角色状态流的脚本进行的Unity重构组件的读取中自动提取的。

对于输入控件、碰撞检测以及角色物理关系与其动画的连线,编写了C#脚本,从中可以验证使用的库以及部分变量和对象,其中Unity库是所有应用于游戏环境的物理的主要负责人。

4. 使用代码

场景元素的构建,使用了gameart2D(2022)网站上免费提供的艺术资源。这些艺术资源被引入游戏中时,会被转换为游戏对象,并构成玩家在游戏过程中可以看到的所有对象。

在图5中。游戏的开始菜单正在Android平台控制台上运行,可以看到它包含的各种元素,从其激活按钮到主角及其敌人,以及场景对象和背景。

图5. 第一个屏幕和开始菜单选项

可以看到原型的简单性,它故意将开发活动集中在游戏元素和交互的构建上,而不是处理和管理操作。

在图6中,游戏已经开始,玩家可以做出一些决定,主角Rocni要到达他的目标——忍者学校,他必须跳过平台,收集沿途的金币,并避免或消灭出现的“dinos”敌人,如果角色被“dino”抓住或未能跳过平台掉入河流,他将死亡,返回起点,并且金币计数将被重置,经过实际测试,可以没有重大困难地完成场景。

图6. 执行测试:(a)Rocni开始旅程,(b)互动和(c)跳跃

除了主角及其交互可能性之外,还可以通过图6识别出更传统的游戏场景中的几个相关元素,例如

  • 方向:路径;起点;和终点;
  • 交互:敌人;固定块,浮动块;固定收集对象;和移动收集对象;
  • 上下文:场景对象;场景背景;开始边界;和结束边界;
  • 命令:街机控制组件;暂停和停止选项。

这些元素和场景转换(水平和垂直)都是在Unity的支持下完全构建、操纵和测试的,无需探索任何其他技术资源(代码1)。顺便说一句,在Unity开发环境之外完成的唯一活动是捕获图像和样式库,这是为了加快速度并跳过元素构建步骤,因为它们不属于本项目分析的范围。

代码1. 用于呈现导入模块的源代码片段

//import modules, base to execute the core game

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
using System;

4.1. 缺点

在初始测试期间,当执行某些动画转换时,它们会异步发生,这与Animator组件中规定的参数一致,在进行一些更改和测试以验证每个事件的触发器后;发现它们正在正确发生,这导致更仔细地检查创建的转换,因为Unity平台最初是为了开发3D游戏而设计的,动画无法立即执行,因此有退出时间、过渡持续时间和过渡偏移的字段,这些字段默认设置为使过渡在3D动画中更加自然。然而,在处理2D动画时,这些设置会导致动画状态的异步,如报告的那样,为了解决报告的问题,有必要取消勾选退出时间字段并重置过渡字段。

发现的另一个问题是,起初游戏只为Windows构建,但随着开发,将其适配到Android也变得很有趣,考虑到其便携性和普及性,但是包含键盘和游戏手柄输入的输入控件现在需要能够捕获触摸屏输入。在对导致意外行为(如延迟或角色意外飞出场景定义空间)的输入指令进行了多次更改后;将Input System组件添加到项目中,该Unity组件非常实用地为多个平台添加了输入功能,但到目前为止,它不是游戏引擎的默认安装,而是需要在Window > Package Manager > Input System中单独安装其包,然后单击Install。通过将其添加到输入控件中,可以为Windows和Android构建游戏,并同时使用游戏手柄、键盘和触摸屏,这大大增加了输入的可用性。

5. 结论

最终原型具有数字游戏的基本要素,与20世纪90年代中期发布的平台游戏(如Super Mario、Sonic、Bionic Commando等经典游戏)保持着怀旧的联系。尽管被认为已完成,但该产品无法进入电子游戏市场与其他游戏竞争。这需要更多的时间和资源,包括更多的关卡、小游戏、更多的物品、能力提升(增加技能的物品)、内部微交易系统,或许还有在线多人游戏系统。随着该项目的结束,可以看出,无论数字游戏开发工具多么完善,开发过程仍然充满挑战,因为要完成一个最低限度令人满意的项目需要积累各种技能;程序员、平面设计师和动画师在这类项目中联系紧密,这表明了为什么数字游戏通常由团队开发,并且根据游戏的类型,这些团队可能拥有200多名协作者。

源代码库

参考文献

  1. Unity (2022)。“Unity官方网站”[在线]。可访问 https://unity.com/pt。访问于2022年。
  2. Unity (2022.b)。“教程”[在线]。可访问 https://unity3d.com/pt/learn/tutorials。访问于2022年。
  3. Unity文档 (2022.a)。“Unity功能介绍”[在线]。可访问 https://docs.unity3d.org.cn/Manual/index.html。访问于2022年。
  4. Unity文档 (2022.b)。“脚本概念”[在线]。可访问 https://docs.unity3d.org.cn/Manual/ScriptingConcepts.html。访问于2022年。
  5. Unity文档 (2022.c)。“2D开发”[在线]。可访问 https://docs.unity3d.org.cn/Manual/Unity2D.html。访问于2022年。
  6. Visual Studio Code (2022)。“Visual Studio Code官方网站”[在线]。可访问 https://vscode.js.cn/docs。访问于2022年。
  7. ClaudioSP (2022)。“GitHub上提供的项目源代码”[在线]。可访问 https://github.com/ClaudioSP/Unity_Project2D_01/tree/master。访问于2022年。
  8. Gameart2d (2022)。“2D游戏免费无版税艺术资产”[在线]。可访问 https://www.gameart2d.com。访问于2022年。
  9. Bensound (2022)。“各种制作免费无版税音乐”[在线]。可访问 https://www.bensound.com/royalty-free-music。访问于2022年。
  10. Microsoft (2022)。“Microsoft C#语言指南”[在线]。可访问 https://docs.microsoft.com/pt-br/dotnet/csharp.。访问于2022年。
  11. Macario, V., Silva, A. M. e Silva, J. C., (2022)。“基于JavaScript技术的Raycast引擎开发”Codeproject,为那些编码的人!技术报告发布平台[在线]。可访问 https://codeproject.org.cn/Articles/5347118/Development-of-a-JavaScript-Based-Raycast-Engine. 访问于2022年。

历史

  • 2022年11月10日 - 文档创建
  • 2022年11月13日 - 文字修订
  • 2022年11月16日 - 修订和验证
  • 2022年11月17日 - 文档提交
© . All rights reserved.