A 设计思路
本demo以冰与火的相对性作为主题。
设计核心:
-
同元素的物体不能互相伤害,相反元素的物体将会互相伤害(抵消)
-
与冰元素方块交互时,场景内的火元素物体将被消去。反之亦然。形成类似于“以冰要素为设计风格的场景”与“以火要素为设计风格的场景”之间的切换,并且改变场景中物体们的状态。
设计有以下几种元素:
player:角色,具有冰与火两种状态(两种颜色)。拥有一个近距离attack动作,可以攻击任意属性的怪物。
能量方块:有冰与火两种方块(两种颜色),定义这两种属性相反。被交互的时候会把player的状态切换到和box相同的属性,并且清除掉该房间内相反属性的物体。
怪物:有冰与火两种怪物(身体有两种颜色)。拥有一个近距离attack动作,会追逐一定范围内的player移动。假如player是火属性(红色)的,那么火属性(红色)的怪物不能对player造成伤害。蓝色的怪物也一样。
障碍物:一套充当障碍物/门的立方体,染成两种颜色,可以被相反属性(颜色)的box清除掉。
陷阱:具有冰与火两种属性的陷阱。当有单位进入陷阱后,延时2.5秒,对陷阱上方的所有相反属性单位造成伤害。怪物也会受到陷阱伤害。
B 主要的数据结构与算法设计
拥有两种属性的角色、怪物、能量方块、陷阱与障碍物均拥有一个public标记,用于检查其当前的属性(颜色)状态。
在每个场景中,建立怪物、障碍物的list。将所有场景中可能被操作的怪物与障碍物加入到list中。当能量方块被操作时,遍历障碍物的list,判断是否进行破坏。
对每个房间的障碍物与怪物分别编号(分组),以实现房间之间的逻辑隔离。
怪物寻路使用了unity自带的简易寻路算法NavMesh Agent。在接近玩家时,将会利用四元数来旋转向玩家的方向,并发动攻击。
C 有设计但未能实现的内容,及预期的建模方式
冲击波
原本设计与方块交互时,方块将发出一个相同颜色的圆形的波。
这个波有多种功能,清除掉相反属性的物体,触发相同属性的陷阱,触发相同属性的另一个方块,或者对相反颜色的怪物造成伤害。
类似于《超级马里奥 奥德赛》中的:
实现方式:建立一个以box为中心的圆柱体,使得圆柱的半径不断扩大。
对造成伤害的对象和消除的物体监听圆柱体的碰撞。
对圆柱体添加一个半透明的材质,使得看上去更像一个冲击波。
未实现的原因:
功能和属性陷阱有所重复,地雷是一个延时的小范围的aoe,冲击波是一个必定击中的aoe。
循环触发冲击波和地雷可能会使得画面元素过于混乱。
垫脚石
和目前的障碍物设计相反,原本设计有通过与方块交互出现的立方体,如,与冰属性方块交互则会出现冰楼梯等。
实现方式:与当前的障碍物设计类似,建立一个list来存储这些需要检查的对象。当box被触发时,挨个检查当前房间的物体,将物体的碰撞属性加入到场景中。
对这些物体添加半透明的材质来表示这是一个会被方块影响出现的物体。
远距离攻击的怪物
与陷阱的机制类似,该种怪物的攻击是在地面上创造一个延时造成属性伤害的区域。
类似于MMO中BOSS战的设计。
D 网络资源备注
https://www.mixamo.com/#/?page=1&query=bot&type=Character
使用了该网站的X Bot与Y Bot作为角色和怪物的基本模型。
动作采用同网站中的FastRun、ZombieAttack、Punching。