SRPG游戏开发(二)第一章 FE4部分技术简述

论坛 期权论坛 脚本     
匿名技术用户   2020-12-21 12:42   128   0

返回目录

第一章 FE4部分技术简述

本章节主要记录在开发FE4时,分析Rom的内容。我们从进入游戏后所见的顺序进行简述,详细的内容到开发时再谈论。

不再阐述的常用系统

这个部分的系统在所有游戏中都会出现,故不再详细阐述,编写代码时将从简。如果想要详细了解,可以搜索相关资料,非常的多。

  • 视图系统(View/UI);
  • 消息事件系统(Message/Event);

关于剧情(Game Director)

FE4在开始新游戏时,会进行历史背景的介绍。

图 1过场剧情

这个部分和J-AVG或RPG相同,在故事开始时、过场时、触发剧情事件时或是通关游戏时,都会有相应的故事情节。例如,旁白,对话,回忆等。在FE4中主要体现在:

  • 游戏开始,历史背景介绍;
  • 章节开始/结束,故事情节;
  • 人物对话,触发情节;
  • 占领城池,触发情节;
  • 移动到某地,触发情节;
  • 游戏通关,通关情节。

在这里我们就看到,在开发游戏时,需要一个管理类来管理这些剧情。我们先暂时叫它“游戏导演(Game Director)”。这和拍电影有部分相似之处,也需要剧本(scenario/script),也需要一个场记(script supervisor),也类似导演要喊“Action”。详细内容我们到后面再谈论。

关于地图(Tile Map)

进入到序章后,映入眼帘的自然是地图了。

图 2瓦片地图(Tile Map)

瓦片地图(Tile Map)简单的说就是用可重复使用的瓦片(Tile)拼成的地图用以节省各种消耗或空间(比如图中的树,都是相同的素材)。FE4的地图采用的是常规的瓦片地图。在地图中我们可以看到有各种各样的地形,还有我们的角色与敌方角色。而地图的宽与高,除了序章是64*32外,其余章节全部是64*64的地图。

我们的开发也同样使用瓦片地图,在Unity3D中,Tilemap组件就是用来干这个的。

1 初步了解地图上的格子

首先我们看到,地图上的格子至少包括了一个地形瓦片(TerrainTile),而某些格子上还有我们的角色单位,角色单位是地图对象(Map Object)中的一种。

在FE4中,并无其它地图对象,就算是城堡和树也是地形的一种。在很多其它游戏中,地图对象是多种多样的,城堡和树可能会是对象的一种,而不是作为瓦片(贴图超出一个格子大小的。整个使用的多数都是作为对象,例如《新神奇传说3》;拆分成瓦片大小的多数还是作为瓦片,例如RPG游戏《最终幻想456》等;也有游戏是混合使用,某些大型建筑物用瓦片,而占几个格子的树木用对象)。

Tile数据由Unity3D的Tilemap组件保存,而格子的数据是要我们自己来保存,我们暂且叫它“MapData”。每个格子的数据需要一个Key值来确保唯一性,为了和Unity3D中Tile保持一致,我们使用Vector3Int类型的位置信息作为Key值;当有对象到此格子时,我们需要将其保存,所以还要建立一个保存对象的字段。

如果不想自己创建“MapData”数据类型,可以使用Unity3D提供的GridInformation脚本组件。它用于保存Tile数据以外的其它数据,Key值使用了Vector3Int和string的结构体,Vector3Int是位置信息,string是数据的名字。

关于Tile相关的脚本组件,点击进入官方文档(Unity Documentation)中TIlemap词条,词条中找到“2D extras in GitHub”中的下载地址(下图红框内)。

1.1 地形瓦片(Terrain Tile)

在FE4中,地形一共有26种,正式游戏中只使用了18种。地形决定着不同职业(Class)所耗费的移动力(move point)(很多游戏还是走一格就耗费1点移动力的,这样在显示移动范围和计算寻路时就简单很多);同时,角色停在不同地形有可能会有增益(buff)或减益(de-buff)。

到这里我们就知道地形需要一个字段来表示它的类型,我们可以使用枚举(enum TerrainType);还需要一些增益或者减益字段来表示它对角色的作用,正数表示增加,负数表示减少,比如增加10点闪避(int evadeRate = 10)。

1.2 地图对象(Map Object)

在FE4中,地图对象只有一种。之前我们叫它角色,更正确的说我们看到的是角色职业(Class)的贴图。地图对象主要是用来显示我们看到的东西的,比如职业的移动动画,职业的攻击动画等;也可以当作存储临时数据的容器

下面我来粗略的列出FE4中一个完整角色的需要编写的类名。

首先,一个完整的角色包括人物(Character),职业(Class)。

其次,一个人物(Character)包括血统(Blood),物品(Item)和人物技能(Skill);一个职业(Class)包括移动消耗(Class Move Consume)和职业技能(Skill)。

最后,某些物品(Item)包括附加技能(Skill)。

开发中可能不会全部都用到,一点点的增加,有时间的话会去补全,比如血统(Blood)就可以先排除在外。其中需要注意的是移动消耗(Class Move Consume)是用来计算在不同地形所需的移动力,与Terrain Type相呼应

在游戏战斗中所用的数值,其实是这些数值经过计算所得到的。比如攻击力用公式表示就是

Attack = STR (Character) + STR (Class) + Attack (Item) + STR (LevelUP) + others

其中Level UP是指升级所加的数值。

2 寻路(Path Finding)

在SRPG中,由于寻路计算量非常小,大部分寻路算法都可以使用。只要设置好地图边界,就算在老设备上,穷举也不会多么影响性能(除非地图非常非常巨大且移动力异常的高)。常用算法:A*,Dijkstra。

如果你在做的是3D的SRPG游戏。除了自定义算法外,还可以使用Unity3D的寻路网格NavMeshAgent组件,它在UnityEngine.AI命名空间中。

3 地图事件(Map Event)

目前思路没有整理好。

这部分我们到开发时再进行阐述。

关于颜色映射(Palette Swap)

在FE4中,你会看到同样的职业,我方是蓝色,敌方是红色,同盟是绿色,中立是黄色,而它们的样子并未发生改变,只是颜色变了。这使用了颜色映射表。

颜色映射(Palette Swap)是一个2D游戏常用的技术,主要作用是减少空间的使用。在过去,存储空间非常贵,无论是卡带或者早期PC软盘/硬盘,游戏的容量必须进行控制。颜色映射表就由此诞生了。

1 2D游戏

颜色映射表使得每一张图片或图集使用固定数量的颜色。设计师在设计时,先设计一套颜色作为源颜色组(source colors),源素材只使用源颜色组进行绘画创作;然后再设计多个使用同样数量颜色的映射颜色组(swapping colors);游戏只需要一张素材,根据颜色在源组的位置找到映射组同样位置的颜色进行替换,这样一张素材可以重复使用,不用再重新画一张。

现在无论是PC还是主机,存储空间都变得很大,所以部分游戏不再采用颜色映射表,每一种颜色都重新制作一张图片。你会发现,有些大型2D游戏的容量反而比一个中等规模的2D游戏容量要小。同一个游戏,不使用颜色映射比使用了颜色映射的容量要高出几倍甚至几十倍(这不是夸张)。

2 3D游戏

在2D游戏中我们使用同一张图片,改变它的颜色;而在3D游戏中我们使用同一个模型(Model),只改变它的材质。是起到同样的作用。

在Unity3D中的做法基本上相同。只是一个替换颜色,一个替换材质。到后面具体开发时会详细介绍2D与3D的做法。

*关于AI

在FE4中敌人有不少AI。例如,盗贼或海盗优先毁坏村庄,敌人优先攻击玩家角色,敌人优先占领我方主城等。

这个部分我们先从简,把游戏大体流程写完再做考虑。

*关于FE4的遗传系统

这部分在开发中先不做考虑,有时间再谈论。

在FE4的整个流程中,是分为两代人的。玩家可以控制多数角色的婚姻,第一代角色的婚姻会影响游戏后半段流程出现的第二代角色强度。

这在开发过程中,需要利用算法计算后代的出生强度。

本章参考资料

  • “Fire Emblem Wiki”中圣战系谱词条(英文)

http://fireemblem.wikia.com/wiki/Fire_Emblem:_Genealogy_of_the_Holy_War

  • “wikipedia”中圣战系谱词条(英文/日文,日文有时会无法访问)

https://en.wikipedia.org/wiki/Fire_Emblem%3A_Genealogy_of_the_Holy_War

  • l“火花天龙剑”中圣战系谱专题(中文)

http://www.fireemblem.net/fe/fe4/index.htm

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP