来自视觉和工业设计的背景,我一直渴望探索如何以编程方式创建视觉效果,可视化数据,虚拟现实,2D / 3D游戏以及其他体验。
一周前,我终于有了飞跃,自开始编程之旅以来,第一次开始探索Unity。 我为自己设定的任务是为黑客马拉松开发2D自上而下的游戏。 我每天都对使用JavaScript,React和Redux感到更加自信,因此,这是一个进入,学习和实践新事物的好时机。 我不仅学习了如何完全按照我的想象进行构建,而且还开发了一款功能强大的游戏“ Get Out Da’House”来展示它, 并且在此过程中我获得了很多乐趣!
- SpriteKit物理
- CD Projekt Red:黑客赎回了被盗的游戏数据
- Echo VR —补丁v19.0注释
- 发表评论:Katzenjammer — Wie Kitty Jumpr在AppStore中不断了解
- 探索游戏开发
这不是Unity的“操作方法”教程,已有许多资源可用。 相反,这是对我所面临的一些挑战以及我在一个漫长的周末中使用Unity引擎和C#学习到的主要知识的一瞥。
为什么选择Unity?
尽管有多种游戏设计选项,例如Unreal,Godot和本机库(例如Three.js,Babylon.js,PlayCanvas和Phaser),但我希望Unity成为我对游戏设计的首次介绍。 可以通过编程完成的所有可能性给我留下了深刻的印象,并且在稳定学习javascript之后,我想尝试另一种OOP语言。 使用Unity,我将能够使用C#做到这一点,并且由于C#的普及,我知道当我陷入困境时,它将有很多资源和支持来提供帮助。
这个概念
游戏的目的是通过在时间用完之前将所有家具移出房屋来得分。 每件物品的值随大小和重量而变化。 使用Unity,我可以设置值,权重并大致估计在房间中移动的每件物品的“阻力”。 这些元素(值,重量,阻力)增加了中心任务的难度,从而鼓励玩家制定要先移动或最后移动的项目的策略。 等等,时钟快结束了吗? 您可以将家具扔出窗户,但要注意,这会给您带来损失。 如果您在时间用尽之前获得了足够的分数,那么恭喜您,您将进入下一层,一居室公寓,依此类推。
随着概念的充实,我继续前进,并开始逐步地将我的学习放到一起。 我的计划是从一个小部分开始,然后扩展。 如果我可以创建一件家具,给它一个值,创建它的“物理”属性,选择它,然后在地板上相应地移动它,旋转它,然后将其移出房间,那么我将处于很好的状态来创建家具其余的部分。
编程的第一步是建立Unity,创建一个新项目,确保我选择了2D首选项和计算机中的正确本地路径,以使事情井井有条。 打开Unity后,下一步就是创建场景。
现场
我从Unity中学到的第一件事是资产的使用:
维基百科列出了以下定义:“游戏资产是进入游戏的“事物”。 资产的一些示例包括艺术品(包括纹理和3D模型),音效和音乐,文本,对话以及呈现给用户的任何其他内容。
简而言之,包括场景在内,几乎所有事物都是资产。 在我的Assets文件夹中,创建了Scene文件夹,并在其中创建了场景的名称。
Unity拥有广泛的资产商店,提供免费和付费选项。 但是由于时间很紧迫,所以我决定创建自己的副本会更快,因此,使用一点Adobe Illustrator和Photoshop,我就可以创建游戏的第一层:一个空的工作室公寓,用于放置我的背景和多件作品家具,包括平板电视,当然还有一点盆栽植物-每个工作室都需要一个。
您将资产作为精灵导入到Unity中-我将我的资源导入为具有高分辨率屏幕的.png文件。 导入后,您可以将它们移入层次结构以成为gameObject。
对于我的第一个gameObject,我继续将工作室场景作为背景移动到层次结构中,并对其进行适当缩放以适合我的游戏领域。 当您将精灵直接添加到层次结构时,它将自动创建其中包含Transform和SpriteRenderer组件的gameObject。 除了这些,我还添加了几个BoxCollider 2D来说明墙壁,因此移动时我的作品不会在场景中飞过。 在工作室gameObject内,我放置了门窗游戏对象。
我继续将其他子画面也移到了层次结构中-移动这些子画面意味着以Collider 2D和Rigidbody 2D组件的形式添加物理学。 在这一点上,我还学习了对图层进行排序的方法,在这些图层中,您可以根据要渲染的游戏对象的顺序在不同的图层中创建和放置游戏对象。 请注意,最底下的层将渲染最后一层,我发现该层对我的2D游戏特别有用。
下一步:游戏机制。
移动游戏对象
在深入研究使用C#编写脚本并创建组件(如React!❤)之前,我想仔细考虑一下自己的逻辑,并研究所需的总体情况。 要将每件家具或游戏对象移出房屋,我将a)选择并拖动,或b)选择,旋转并拖动。 我的第一个实例是咖啡桌,像gameObject这样的胶囊,需要旋转才能扔出门😄。
首先,我创建了一个gameController gameObject,并在其中放置了我的第一个C#脚本Controller,它将处理游戏的大部分动态,运动,速度,旋转,UI文本,时间和得分。
而且有效! 我们有功能! 以Javascript为基础确实有助于学习C#的基础知识。

但是,当一切都与咖啡桌配合良好时,我决定向其他gameObjects添加功能,我很快意识到将逻辑拆分为单独的组件将使我的游戏更易于管理和扩展。
因此,我创建了四个不同的组件:控制器,家具,MouseSelect和音频。
控制器组件包括:
运动-水平,垂直和旋转

加分

并且,设置得分的文字

MouseSelect组件仅包含使用鼠标单击选择哪个gameObject的逻辑。

家具部分包括家具如何“退出”和“进入”场景。 在考虑如何旋转并将大块物品移出房屋时,进入场景是一个较后的考虑。

常规尺寸的零件会在y轴上旋转,但是对大型零件(例如床)要做什么,该零件无法穿过门甚至窗户。


在我的Furniture组件中,我为默认的sprite和备用的sprite添加了公共变量,因此它们将显示在编辑器中,并且还包括了changeingTheSprite函数。

这个功能可以让我在默认子画面(床)和备用子画面(bedUp)之间切换。 有效! 我可以切换,但是,即使备用精灵的大小明显适合穿过门,我也无法通过它。 经过进一步检查后,我发现我还需要更改其对撞机的形状以使其匹配。 一旦完成,就成功了!
新旋转的床移出房屋,在此过程中得分最高。 我将相同的逻辑和功能应用于地毯。 这样所有的碎片都可以通过门或窗户移动,旋转和扔出房屋。
有趣的游戏是什么呢? 我的最后一个组件是音频。 我将音乐作为资产导入到Unity中,并添加了在游戏开始时播放音乐剪辑的功能。
那是我在Unity的周末,希望您能与您一起玩得开心!