unity高级项目实战课件03灵魂狩猎者

上传人:今*** 文档编号:105687129 上传时间:2019-10-13 格式:PPT 页数:67 大小:5.75MB
返回 下载 相关 举报
unity高级项目实战课件03灵魂狩猎者_第1页
第1页 / 共67页
unity高级项目实战课件03灵魂狩猎者_第2页
第2页 / 共67页
unity高级项目实战课件03灵魂狩猎者_第3页
第3页 / 共67页
unity高级项目实战课件03灵魂狩猎者_第4页
第4页 / 共67页
unity高级项目实战课件03灵魂狩猎者_第5页
第5页 / 共67页
点击查看更多>>
资源描述

《unity高级项目实战课件03灵魂狩猎者》由会员分享,可在线阅读,更多相关《unity高级项目实战课件03灵魂狩猎者(67页珍藏版)》请在金锄头文库上搜索。

1、将所有的宝石都收集起来以逃避幽灵的追捕。,灵魂狩猎者(吃豆),1,1.玩法介绍,将所有的宝石都收集起来 收集到所有的宝石就能过关。,2,通过光标键移动! 避免被幽灵捕获! 如果被幽灵捕获,游戏将失败。 拾起剑反击幽灵! 拾起剑后可以对幽灵进行一次攻击。,3,1.玩法介绍,不要错过宝箱! 获取偶尔出现的宝箱能得到奖励。,4,1.玩法介绍,2.适时进退和逆转的机会,吃豆游戏是自电视游戏(最近很少听到他的名词了)的黎明就存在的游戏类型。这类游戏要求玩家在迷官中拾取迷宫中的一些特殊道具。因为规则简单并且能在很短的时间内就玩一局所以非常适合作为手机游戏。 吃豆乍一看是一个非常简单,但反复探索后就会发现其

2、内部有很多复杂的东西。 在大部分吃豆游戏中,游戏的舞台背景都是由狭窄的通道构成的迷宫。因此玩家如果不假思索地随意移动,很快就会被怪物夹击。这类游戏还有个特征就是玩家不具备攻击能力,要通过观察敌人的移动,巧妙地诱导敌人,从而避免自己受到夹击。从某种程度上来说,这是一种需要玩家用脑的游戏。 本章所列举的“地牢吞噬者”就是这类吃豆游戏的一种。 “地牢吞噬者”中允许玩家在拾起剑后对幽灵进行一次攻击。该反击手段和其他吃豆游戏类似,不过我们这个游戏中不限制反击手段的有效时间。这样一来,只要提前把剑握在手上,即使是那些不太擅长判断对手运动情况的玩家也不用担心了。 游戏的关键词是适时进退和逆转的机会。,5,脚

3、本说明(部分),6,7,2.2本章小节,平滑的网格移动 地图数据 动画的小技巧 幽灵的AI,8,3.平滑的网格移动,3.1关联文件 PlayerController.cs GridMove.cs,9,3.2概要,在“地牢吞噬者”中,作为游戏舞台的迷宫的道路非常狭窄,只允许1个角色通过。因为砖块也是按规则排列的,所以角色只能往上下左右四个方向移动。虽然角色按照玩家输人的方向移动是动作类游戏的一个重要特点,不过在这种狭窄的地形中操作性却变差了。 请读者想象一下角色穿过T字路口的情形。如果玩家未在适当的时候按下按键,角色将碰到墙壁(图) 将角色设置为只能以网格为单位进行移动可能也是一种解决办法,不过

4、我们还是希望角色能够平滑地移动。 下面我们将讲解如何开发出让角色在狭窄的通道内也能按照玩家意愿行走的程序。,10,3.3能够改变方向的时机,在“地牢吞噬者”中,作为障碍物的砖块被整齐地排列在了格子上,这种格子也称为网格(grid)。 由于砖块被排列在了网格上,且通道非常狭窄,因此骑士能够移动的方向就受到了限制。特别是在骑士拐弯时,玩家必须精确地把握时机,否则骑士将碰到墙壁。 既然移动方向受到了限制,那么我们就令骑士不能朝向不能移动的方向(图)。在某些游戏中,墙上可能会设有开关,或者允许玩家推开障碍物,不过“地牢吞噬者”中没有这些特性。即使骑士一直朝着墙壁前进不停下来,也不会对游戏造成什么影响。

5、,11,3.2概要,将角色设置为只能以网格为单位进行移动可能也是一种解决办法,不过我们还是希望角色能够平滑地移动。 下面我们将讲解如何开发出让角色在狭窄的通道内也能按照玩家意愿行走的程序。,12,3.2概要,13,3.2概要,按下按键后角色并不会立即改变方向,而是首先探测是否可以沿该方向前进。如果无法前进,则保持原方向继续运动,直到到达拐角处才改变方向。像这样,提前按下方向键就可以使角色平稳地经过拐角。不过,在任何时候都可以向后改变方向。 现在角色可以在狭窄的迷宫内平稳地移动了。其实“地牢吞噬者”中还做了一些别的处理,使骑士只能在通过网格的时候才能改变方向。,14,3.4穿过网格的时机,这里我

6、们来考虑一下“穿过网格的时机”。 在“地牢吞噬者”中整个地图被纵横切成了若干个小网格,并通过在一部分网格中排列砖块从而制作出了迷宫。而且为了简化处理,这里将砖块的尺寸设为了1。这样,网格位置的XZ坐标就是1.0, 2.0, 3.0 这样的整数。 请参考图。角色的坐标将以5.1, 5.3,5.5这样0的小数逐渐变大。这个值从5.9变化到6.1时,它的整数值将从5变化到6也就是穿过网格边界的时机。,15,3.4穿过网格的时机,下面,让我们看看控制骑士移动的代码。,16,3.4穿过网格的时机,(a)用现在的位置加上移动方向的向量求出下次移动的位置。 (b)分别对现在的位置和下次移动的位置取整并对结果

7、进行比较。 (C)向对象发送消息并执行OnGrid方法。 在穿过网格边界的瞬间,除了使角色改变方向,还做了拾取宝石的处理。通常这种情况下会使用碰撞器(collider)来进行判断,不过因为“地牢吞噬者”中的宝石都被放置在了网格上,所以我们可以理解为“穿过了网格边界二拾取了宝石,。这样不但简化了处理,而且处理速度方面也比使用碰撞器更有优势。 下面是在穿过网格的瞬间被执行的PlayerController.OnGrid方法。,17,3.4穿过网格的时机,向后改变方向可以随时进行,这部分处理被写在了PlayController.Update一。rural方法中。通过GridMove.IsRevers

8、eDirection方法比较用户输人的方向和目前正在行走的方向,如果二者相反,则将角色朝向旋转180度。,18,19,3.4穿过网格的时机,3.5小结,现在读者应该已经完全了解“地牢吞噬者”的操作设计了吧。即使是那些角色的移动范围很广的游戏,有时也会加人这样的“操作辅助”。角色的操作性对任何游戏来说都是非常重要的。读者如果感觉自己制作的游戏中对角色的操作很困难,不要仅仅调整角色对按键的响应,还可以试着添加适当的操作辅助,说不定操作性就会得到很大的改善呢。,20,4地图数据,4.1关联文件 Map.cs,21,4.2概要,“地牢吞噬者”中每一关的的迷宫地形都不相同。项目文件中收录的版本中一共有5

9、个关卡。现在我们将讲解这些关卡数据的制作方法。 可以使用文本编辑器来制作地图。当然也可以使用Unity自带的Mono Develop。根据游戏的具体情况,有时会制作专门的编辑器,有时则用Unity编辑器来制作。因为这个游戏的数据结构比较简单,数据量也不太大,所以我们决定将地图数据做成文本文件的格式。 采用文本文件格式有以下几个优点: 便于理解数据结构(容易查看) 便于修改 在刚开始制作游戏 的阶段,这是非常重要的。 可能有些读者干劲十足, 想要制作关卡编辑器,不 过这里我们还是先来熟悉 一下使用文本编辑器这种 快速简单的制作方法吧。,22,4.3文本文件的格式,现在我们来确定地图数据的格式。

10、首先,游戏中登场的对象种类如下表所示(图3.5)。左起第二栏中的内容是文本文件中将使用的文字。,23,4.3文本文件的格式,(1)骑士拾取的宝石。将宝石全部收集完毕则过关。 (2)砖块。排列砖块以生成迷宫。砖块除了被用作显示迷宫的模型外,还需要具备碰撞检测的功能。 (3)骑士的开始位置。关卡开始时骑士所在的地方。每个关卡中都必须有一个开始位置。 (4)幽灵。从1到4,每个数值分别代表一种性格的幽灵。 (5)剑。拾起剑后能够进行一次反击。 (6)宝箱。获取宝箱后将获得得分奖励。游戏开始后,每经过一定的时间将出现一次。 (7)空白区域。用于制作外墙的周围以及被墙壁包围起来的空间。 各个文字之间用逗

11、号(,)隔开,这种用逗号把文字分隔开的文件格式叫作CSV ( Comma Separated Values。很多读者应该都听过这个名词。因为程序中CSV的处理比较简单,所以常常被用在游戏中。可以直接使用Excel一种表格计算软件)进行编辑也是它的一个优点。,24,4.3文本文件的格式,将地图数据的文本文件作为文本资源(TextAsset)添加到预设中(图3.6 )。利用这种方式,脚本就可以像处理贴图纹理和声音一样轻松地处理文本数据。 既然现在已经能够通过脚本读取文本文件了,那么接下来就让我们根据文本的内容制作地图模型吧。 文本资源的对象中含有一个叫作text的成员,其中存储着文本文件的内容。不

12、过由于整个文本文件的内容都存在这个,string对象中,因此就导致了这个字符串特别长。如果直接这样处理会很麻烦,所以我们按照行单位和字符单位对其进行分割(图3 )。,25,26,27,28,4.3文本文件的格式,(a)对文本文件整体以行为一单位进行分割。只要在Split方法中将换行符指定为分割符,就能够得到被分割开的各行文本的string数组。 (b)文件中表示对象的字符已经被逗号分隔开了。此处继续用逗号分隔开文本并将其放入string数组中。这样全体文本就被分解为了处理的最小单位。这个最小单位我们称之为Token,这里Token=1个字符。 (c)第一行中记录了地图的横向和纵向长度。分别取得

13、横向和纵向的尺寸,创建用于存储地图数据的数组。 到这里地图数据的读取就完成了。接下来我们将按照该数据生成地图模型。 例如,我们先来看看Man.CreateMap方法中创建砖块、玩家和幽灵的代码。,29,30,31,4.3文本文件的格式,(a)根据文本资源生成的地图数据m_ mapData.data是一个二维数组,可以直接使用XZ的坐标值作为数组的索引来访问数据。 ( a1)“墙”部分用于生成墙的对象 (a2)“骑士”部分用于在游戏启动时生成对象,这里提前记录下坐标。( a3)的“宝箱”部分也做同样处理。 ( a4)地图数据为数字时生成幽灵。生成的幽灵的性格因数字而异:因为各种性格的幽灵只能生成

14、一只,所以这里需要一记住每种幽灵的初始位置在用作数组的索引时,不要忘记把字符转换为整数.,32,4.4扩展编辑器的功能,到现在为止,我们已经能够通过文本文件制作出地图的形状。编辑好文本文件后启动程序,就能够在设计好的地图上进行游戏。在Unity中,虽然从编辑好数据到启动游戏并不会花太多时间,但如果能够直接在编辑器上确认地图的形状,制作时就会更有针对性。 幸运的是Unity提供了定制编辑器的功能,它允许用户自行扩展编辑器(图) 。下面我们就来试试通过这个功能在编辑器上制作地图。,33,虽然该脚本是用于拓展编辑器功能的.不过除了小部分固定的规则外.基本上和游戏中的其他脚本没什么区别。 请在层级视图

15、中选择Map对象。打开检视面板中的Map项,会发现在最下方有Create Map Model按钮。这个按钮就是通过定制编辑器追加的功能。 点击这个按钮将生成地图。可以通过Default Map参数来改变要生成的地图数据。 点击这个按钮将生成地图:可以通过。efault Map参数来改变要生成的地图数据。 脚本Script/Editor/MapModelCreator.cs把按钮添加到了检视面板中。请将定制编辑器使用的脚本放在Editor文件夹下。 生成地图的处理过程和游戏中的脚本逻辑大体相同。脚本的写法有很多固定的规则,写起来并不是什么困难的事。,35,4.4扩展编辑器的功能,代码中出现了一些

16、不常见的词语,下面我们将逐个说明。 (a)游戏中使用的类都继承于MonoBehaviour类,但定制编辑器使用的类则继承于Editor类。因为这个Editor类位于UnityEditor名称空间内,所以必须使用using关键字来声明使用了UnityEditor名称空间。,36,4.4扩展编辑器的功能,(b)这里表明了在脚本中定义的MapModelCreator类是Map类的定制编辑器。将Map组件添加到选中的对象后,Unity编辑器将根据需要调用MapModelCreator类中的方法。 (c)开始定义MapModelCreator类。继承Editor类生成定制编辑器使用的类。 (d)override表示再次定义了Editor类的方法。OnlnspectorGUI是用于绘制检视面板的。切的方法。把这个方法换成自己创建的代码,就可以在编辑器上创建自己的UI。 (e)被用于执行标准编辑器的显示功能。我们试着将这一行注释掉看看。检视面板上将不再显示Map类的public成员(图)。像这样,通过注释掉相关代码并查看执行结果的变化,就可以调查某个函数的功能。,37,4.5小

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号