欢迎光临散文网 会员登陆 & 注册

如何在Unity中开发一个类FEZ的游戏(二)

2021-11-18 16:03 作者:皮皮关做游戏  | 我要投稿

By Greg Matsura


(译者 @Kohlrabic )

原文地址:

http://gregandaduck.blogspot.com/2014/12/normal-0-false-false-false-en-us-x-none.html

在这节教程中,我们将会从设置精灵图角色开始。

来认识一下我们的2D角色,Gato。我在下面提供了这个小家伙的精灵图:

保存这个精灵图以供使用

将这张图片添加到你的工程并如下修改importsetting。设置SpriteMode 为Multiple ,Unity将会识别我们的图片为一个包含多个精灵图的类型。每张精灵图由16x16的像素构成,所以我们在 Pixels Per Unit 选项中填入16。

具体设置如下图所示:

在左上角点击编辑精灵图按钮,点击下拉菜单中的Slice 选项,确保 Type 选项被设置为 Automatic 模式(如果图片背景没有变成透明就是图片格式选错了,改成自动就ok了)。

点击 Slice ,Unity 会自动识别精灵图点击Apply并关闭窗口。Unity 会自动将精灵图裁剪,并依次以 _x的后缀进行命名。

创建一个空物体并命名为 Player 。将FezSpriteSheet_0 精灵图拖拽到我们的空物体上并将它的位置设置为(0,0,0)。

将FezSpriteSheet_0 重命名为 Sprite。

给Sprite 添加 Animator 组件,取消 Apply Root Motion 的选项,选中Sprite ,打开 Animation 窗口。

选择下拉菜单选择 Create a New Clip 。将新的片段命名为 Idle。并将_0,_1,_2 精灵图添加进时间线内。

现在我们创建一个新的片段并命名为 Walk Right。并将精灵图_3,_4,_5,_6添加进时间线内。

最后创建一个新的片段命名为 Walk Left。将精灵图_7到_10添加到时间线内。

下一步设置 Animator 使我们的动画在正确的时机播放。在Animator中创建一个整数参数(Integer),命名为Horizontal 。如图正确地连接各种状态。右键状态框即可在各种状态间连线。

如图,关闭Atomic ,这个选项代表动画过渡,我们不需要这种效果所以关闭它。在Condition 设置中,我们在下拉菜单中选择刚刚创建的Horizontal参数。向左走的动画我们设置它的值为-1,向右走的值设置为1。同理,静止的值设置为0。

通过Horizontal参数来达到动画的切换

此时如果我们按下Play , Gato将会为我们献上一段小小的舞蹈。


现在出现了一点问题,我们的游戏场景漆黑一片,整个画面没有层次感,Gato看起来像是悬浮在空中一样。于是我们需要做一点小小的美化工作。我们接下来要在游戏中添加光源。在场景中添加一个方向光源,将它设置为Player的子物体。将光源的Transform参数重置,位置设为(0,0,-15),这样它就不会叠加在我们的Gato身上了(思考一下这里我们为什么将光源设置为玩家的子物体?)。

接下来我们就要帮我们的Gato添加移动的脚本了:

这段代码将会监视A和D键,来控制我们的横向运动。初始状态Unity将横向定义为了方向键。通过每帧监视按键的动作,我们可以知道玩家是否按下了这些按键,并且会影响我们之前设置的Horizontal的数值。空格键也被监视着,每当我们按下空格键,一个协程将会开始。通过协程,将会等待0.35秒将我们的flag重置为false。这个flag用来判定当前是否允许玩家向前移动。一个玩家控制器就是用来在世界范围内通过简单的移动函数来让角色在世界坐标系中移动。将控制器添加到Player 上。如图设置好脚本的选项。你可以随意调节移动速度,重力和起跳高度,来改变玩家的移动特性。将玩家的高度设置为1,半径设置为0.5。

根据需求来调节参数

现在我们已经能够在2D维度下进行移动了,我们需要调整几个选项来进一步提高我们游戏的画面表现力。首先,我们来对相机做出一些提升。在3D游戏中我们一般使用透视相机,但是对于我们想要的2D场景效果不是那么可取了。改变相机的投影模式(projection)为Orthographic ,正交相机将会忽略3D场景的深度值,屏幕上显示的物体仿佛都在一个平面上。我们需要摄像机跟随我们的玩家,最简单的方法就是将摄像机设置为Player的子物体。

接下来为场景添加一个天空盒,使我们的游戏拥有一个好看的背景。右键Assets文件夹,导航至Import Package ,然后选择Skyboxes。Unity将会自动为我们安装一些assets 以供使用。

在引擎上方导航栏选择Edit→Render Settings 。选择一个你喜欢的天空盒添加到SkyboxMaterial栏目中。

现在我们的天空盒就绪了。接下来我们来解决几个小的细节问题。在我的项目中,小猫依旧没有正常地着地,如果你也有同样的问题,你或许需要将它正确地设置在地面上。如下图调整精灵图y轴坐标使小猫正确着地(译者音:另一种方法是手动将精灵图的中心点设置在中心位置即可)。

现在游戏慢慢有了雏形,我们已经搭建好了一个简单的2D平台。但是,现在如果我们从平台上掉落的话,我们将会无限下落。为了解决这一问题我们将会写一段简单的代码,当我们的Gato掉落到一定深度时,使它返回到第一个平台上面。脚本如下:

这段代码的功能是通过collider实现的 ,将目标位置设置collider,将它的IsTrigger选项打开。此时当一个携带有该脚本的物体与它相接触时,另一个物体将会被传送到设置好的返回点。

理解了具体的实现方法以后,在你的场景下方添加一个Plane。去除它的Mesh Collider组件,为它添加一个Box Collider 。将这个Box Collider的IsTrigger 选项打开。为Plane添加ReturnPlayer脚本。最后我们需要创建一个空物体作为返回位置的标记。将空物体拖拽到脚本的Return Point 处。

如果小猫返回效果不正确,你或许需要重新设置合适的重生点。

这节课程的内容就是这样了!下一节我们将会添加FEZ中最重要的视角旋转功能并总结这个项目。


如何在Unity中开发一个类FEZ的游戏(二)的评论 (共 条)

分享到微博请遵守国家法律