(零基础快速搭建游戏原型)Unity 2D 平台游戏框架指南
概述2D Game Kit 是Unity官方的插件包之一,它能够使你不用编写代码,便能创造出属于自己的第一个(2D平台)游戏。
Unity 2D Game Kit
https://www.zhihu.com/video/1020834707180724224
这个暑假我阅读了其源代码,理解了大部分逻辑(剩下的均为Unity编辑器相关),因为我自认为该框架设计理念比较优秀,所以就想为其写点什么东西,正好可以巩固自己的所学,二来也是将自己所学的知识进行分享。
解析主要分为两大阶段:
第一阶段大致的内容均来自官方文档2D Game Kit - Unity,主要是对其的翻译再加上一些自己的理解(该阶段内容是对框架主要功能的概述,以及如何通过一些简单的操作来搭建自己的2D平台游戏)
第二阶段的内容则是我站在开发者的角度,一步一步的解析源代码及相关逻辑的实现,最终能够熟悉整个2D Game Kit框架,掌握许多游戏开发的知识。
第一阶段阶段教程适合:
1.不会写程序,但是想独立并快速搭建游戏原型的策划,美术。
2.初学者
该教程需要你掌握:
精通Unity下载和安装
暂时的规划
[一] 下载并导入Game Kit插件
[二] 新建一个场景
该框架允许你创建一个默认的场景,该场景包含Ellen(我们的游戏主角),一个小小的移动平台,生命值UI,以及主角移动和攻击的逻辑。
新建一个场景:
顶部菜单栏:点击Kit Tools->Create New Scene
此时会出现一个弹窗
输入新建场景名称
点击Create按钮后Unity会自动为你创建一个新的场景,并将其添加到Build Settings中。
同时Unity也会自动为你打开刚刚新建的场景
[三] 绘制一个新关卡
2D Game Kit 使用了Unity的Tilemap功能,如果玩过不少日式RPG游戏或对RPG Maker有所了解的同学对瓦片地图可能会比较熟悉。在这里你可将其理解为Unity对瓦片地图的实现。
那么,现在开始尝试绘制新关卡吧:
同样是顶部菜单栏
此时会弹出一个Tile Palette(瓦片地图绘制板)
我们已经为你创建了两种Tilesets(瓦片集合?)来绘制关卡,这些瓦片使用了Unity Tilemap 功能的Scriptable Tile系统,他们将自动为你选择关卡中各个位置瓦片的样式,我们提供了两种风格的瓦片风格:青草岩和外星结构
接下来你需要确保你在Tile Palette中选择正确的瓦片集合:
点击 Tileset Menu点击 Tileset_Gamekit然后选择你最喜欢的瓦片风格
现在我们就可以为关卡中绘制一些好玩的东西了:
在Tile Palette中选择一种瓦片风格在Scene View中进行操作通过鼠标左键点击或长按拖动在Scene View绘制关卡
如果你觉得不行,则可以通过Shift + 鼠标左键点击或长按拖动擦除瓦片
[四] 测试你的新关卡
你肯定已经迫不及待想测试一下你所创建的关卡了,是时候启动它了。
点击Play按钮
Ellen操作表:
移动:A/D
跳跃:空格
蹲下:S
射击:O
近战攻击:K
交互:E
穿越双向通行平台:S+空格
这里还有一个调试菜单,按下F12即可弹出,在这里可以激活你的远程和近战武器。
[五] 添加移动平台
当我们在Scene View下动手操作任何GameObjects时,确保自己没有处在paint mode,为了避免这种情况:关闭Tile Palette或者选择左上角的移动工具,你也可以使用快捷键W。
那么现在开始添加第一个移动平台吧:
导航到 Project 窗口进入Prefabs>Interactables文件夹左键选中并拖动 MovingPlatform 到 Scene View确保MovingPlatform在Hierarchy窗口内处于被选中状态按下快捷键W使用移动工具
通过移动工具,你可以将该移动平台移动到关卡中的任何位置。
当你选中MovingPlatform时,旁边会出现一条红色虚线,在虚线的末尾也会有一个移动工具标识,这条虚线表示当游戏开始时该移动平台的移动路径。
通过移动这个虚线末尾的标识,可以改变该平台的移动路径
如果想要预览平台的移动情况,需要通过以下几步操作:
导航到Inspector窗口在Moving Platform组件下,找到Preview Position滑动条拖动滑动条,看看Moving Platform的移动情况
现在可以尝试添加一些复杂的行为,例如使平台沿正方形路径循环移动。要完成这个操作我们需要添加节点,节点是Moving Platform组件内的附加导航点。
在Inspector窗口内找到Moving Platforme组件单击两次Add Node添加两个节点
以上操作增加了额外的两条虚线和标识,移动标识,使路径构成正方形。
细心的你也许会注意到,最后一个节点和第一个节点没有连通,所以此时开始游戏,平台移动到最后一个节点后会改变方向往回移动,以此循环。
此时你可以更改平台的循环方式:
在Moving Platform组件下寻找到Looping选项点开下拉菜单并且选择Loop模式
上述操作自动将节点前后连通,形成一个闭环路径
注意:预览滑动条并不会正确的预览完整循环,你需要点击Play按钮再进行观察
[六] 使用事件系统操控门的开关
在2D Game Kit中,可以通过事件创建一些特殊行为。我们将通过事件创建一个触发器:当主角踩到压力板时打开一扇门。
通过创建一扇门开始吧:
导航到Project Window,进入Prefabs > Interactables文件夹找到门的预制体并将其拖动到Scene View中,放在一个合适的位置来阻挡角色
现在我们创建压力板:
导航到Project Window,进入Prefabs > Interactables文件夹并寻找到PressurePad预制体将其放置在门前的地上
注意:假如你发现压力板阻挡了玩家的前进,那么试着将它的位置稍稍下移,使角色能够很轻松的触发压力板。
有些事件已经被定义好了,例如,当角色踩到压力板上时,压力板会发光并发出声音,现在将压力板和门关联起来吧。
进入Hierarchy视图,选择PressurePad对象在Inspector视图下找到Pressure Pad组件在On Pressed列表中,点击右下角的 '+' 按钮添加一个新的事件将Hirearchy视图中的Door门对象拖动到事件的None(Object)字段中在No Function下拉菜单中,选择Animator > Play(string)
在紧接着下拉菜单的下方文本框中,输入字符串:DoorOpening
点击Play运行,通过A/D键操控主角踩到压力板上方,门便会开启
所有的Animation Clips动画片段均储存在Project视图下的Art > Animations > Animation Clips文件夹内,想要通过事件触发不同的动画,上述文本框中输入的字符串必须与所期望的动画片段文件名相匹配。
如果你想通过射击触发开关来取代压力板,你可以上述通过相同的步骤去实现,不过在预设文件夹内选择ResusableSwitch作为触发对象。
[七] 敌人
我们在框架中预先设置了两种怪物:分别是Spitter(远程)与Chomper(近战)。你可以在Project窗口下的Prefabs > Enemies文件夹中找到他们
他们皆由Inspector窗口下的Enemy Behaviour组件控制,你可以通过调整该组件的一些参数来改变怪物的属性例如:移动速度,视野,生命值等。每个怪物都有自己的组件,不过他们的设置略有所不同。注意:除了可以通过直接输入具体数值外,你还可以通过滑动条来调整数值。
现在尝试将Chomper添加进你的场景中,调整他的移动速度和视野大小,别忘了在Play运行模式下你可以按下F12进入打开调试窗口激活武器。
在上面的这个场景中,Chomper被选中,我们调整了他的视野大小和方向,这样直到它转过身来之前都不会发现主角。
更多的Enemy Behaviour信息,请查看:留个坑
[八] 造成伤害
在这个部分,我们将一起来探索伤害系统,为了达成这个目标,我们需要在Spitter头上放置一个方块来砸死它,可怜的家伙。
首先绘制这样的一个地形,如下图所示:
到Prefabs > Enemies文件夹下拖一个Spitter到场景中将它放在悬崖下方且稍微靠近悬崖的位置选中Spitter之后,看到Enemy Behaviour Script脚本减少它的View Distance视野范围,这样它就不会对你进行攻击了
到Project窗口下的Prefabs > Interactables文件夹内拖一个PushableBox到场景中在Hierarchy窗口下选择PushableBox,然后在Inspector窗口中点击Add Component在搜索框内搜索Damage将Damager组件添加到PushableBox对象上
Damager可以赋予游戏对象造成伤害的能力(就像Spitter和Chomper一样),在组件文档中有更多的细节(此处再留一个坑)。
Damager由绿色的碰撞盒来标识,它指示该游戏对象能够造成伤害的区域,它现在没有正确的覆盖在箱子上,所以自然也不会正确的造成伤害。
试试移动这个碰撞盒吧,使其大小和位置与箱子贴合,你有两个选择:
选择并拖动碰撞盒四周的表示点,使其与箱子贴合
或者:
在 Inspector 窗口中找到 Damager Component 组件调整参数 Offset 和 Size
最后,要确保能对正确的对象造成伤害。我们在 Editor 编辑器中将所有游戏对象分成不同的Layer 层次,目的是为了轻松的寻找和区分对象。
选择 PushableBox 对象在 Inspector 窗口中找到 Damager 组件在 HittableLayers 下拉菜单中选择 Enemy Layer
现在 PushableBox 对象能够对Enemy层次上的所有对象造成伤害(比如我们可怜的Spitter),尝试着对其他敌人造成伤害吧,甚至是你自己。
[九] 装饰
在框架里我们也提供了装饰精灵decorative sprites,这些都被框架内置的游戏里所使用。
提示:如果你在内置的游戏中发现了特别中意的装饰,那么在 Project 窗口下搜索它们的名字即可
想要使你的游戏场景变得丰富多彩,那么就多多使用 Project 窗口 Art > Sprites > Environment 文件夹内的装饰资源吧,很多装饰以集合的方式储存,所以不要忘了展开小箭头。
[十] 传送
在这节内容中,你将知道主角如何在同一个关卡中的传送点之间进行传送。当然,也可以是不同关卡之间进行传送。
要在同一个关卡中设置传送点,我们需要设置一个 transition,为此我们要制作两个预设:
TransitionStartTransitionEnd
首先我们来设置 Start 传送点
进入Project窗口下的 Prefabs > SceneControl 文件夹找到预设 TransitionStart将 TransitionStart 拖入场景并放置在角色能够接触到碰撞体(绿框)的位置,这里我们就放在门的另一边
设置目的地:
再从 SceneControl 文件夹中拖一个 TransitionStart 到场景视图中在 Inspector 窗口下,将其重命名为 TransitionEnd
现在让我们将这两个传送点连接起来:
在 Hierarchy 窗口中,选中 TransitionStart 对象在 Inspector 窗口中,找到 TransitionPoint 组件将 Hierarchy 窗口中的对象 Ellen 拖动到 Transition Point 组件下的 Transitioning Game Object 槽将 Transition Type 设置为 Same Scene
上述操作确保了只有Ellen能够使用该传送点,且传送点类型为关卡内传送。
下面开始设置目的地:
将 Hierarchy 窗口中的TransitionEnd 对象拖动到 TransitionPoint 组件的DestinationTransform 槽设置 Transition When 为 On Trigger Enter
On Trigger Enter 表示当且仅当Ellen接触传送点的触发器时,才会执行传送,如果你想要追加设置为按下交互键执行传送,那么将 Transition When 设置为 Interact Pressed。
不同场景之间的传送:
为了让角色能够在不同场景间进行传送,我们需要设置两个预设:
TransitionStart 预设与上一部分的完全相同,它将角色传送到相应的目的地,它包含一个Transition Point 组件,该组件定义了Start点位所有的属性以及传送的目的地,将这个预设放置在你想要放置的地方吧。TransitionDestination 则是一个"接收"角色的预设,它包含一个 Transition Destination 组件,将其放置在你想要作为传送目的地的场景中。
设置 TransitionDestination:
首先我们来设置目的地,这样我们就可以在设置起点时获取到所有的信息了。导航到 Project 窗口的Prefabs > SceneControl > TransitionDestination ,将它放置在你想要设置为目的地的场景中。
TransitionDestinaton 预设包含一个 Scene Transition Destination 组件
首先,设置 Destination Tag 的字母,具体是哪个字母不重要,只要保证场景中标识为该字母的组件是唯一的。其次,告诉它将要接收的对象是什么类型的,在这里,我们将 Hierarchy 中的 Ellen 对象拖到Transitioning Game Object 槽中最后,保证该场景在你的 Build Settings 内,通过打开顶部菜单栏 File > Build Settings,点击 Add Open Scenes 可以完成这个步骤
设置 TransitionStart:
这些设置大多与前面那个部分相同,但是有一些小变化:
将 Transition Type 设置为 Different Level将 New Scene Name 设置为传送目的地所在的场景将 Transition Destination Tag 与 Transition Destination Component 组件的Transition Destination Tag 所匹配
示例:
让我们将角色传送到场景 Zone1 中吧,在你的 Transition Start 组件上,作出下列修改:
将 Transition Type 设置为 Different Level将 New Scene Name 设置为 Zone1将 Transition Destination 设置为 A
按下 Play 按钮启动游戏,操纵角色走到传送点的位置,然后你便能顺利进入到场景 Zone1。
[最后] 希望你玩的开心
这篇教程在开学之初仓促的写完了,留下了一些坑和需要完善的地方,后面我会慢慢更新。
第一次写文章,加之本人学艺不精,教程难免会显得非常不专业,在这里希望各位不吝赐教。 厉害 有空看看 支持,支持! 111111 之前打包web版本,光下载加载unity空包就好久,大触能讲一下2d 打包跟3d打包有什么体积缩减么?还有导出web版本有没有改进? 2D工程和3D工程本质上是没有什么区别的,如果是打包时的纹理格式或者针对不同平台图形质量上的设置,才会有一些影响,最终还是要实践才能确定。web端的话等我有时间试试吧。 期待你的第二阶段文章。 很好的初学者教程,多多把unity官方教程推广一下让更多人了解。 牛逼的专栏,牛逼的作者,牛逼的文章,初学者的福音!!!!我要打电话!!!!!!!!!!!!!!!!!
页:
[1]
2