《Unity游戏设计与实现》试读:1.7 得分高低的判定

1.7.1 概要 大部分游戏都鼓励玩家不断挑战更高的得分。虽然也有像角色扮演(RPG)这类更注重情 节而不关注得分的游戏,不过支持玩家通过互联网与其他玩家同台竞技,进而挑战更高得分的 游戏正变得越来越多。 这次我们开发的是一个斩杀怪物的游戏。成功斩杀怪物后,怪物出现的数量会越来越多。 玩家要尽可能地持续斩杀怪物,这样才能在游戏结束之前杀掉大量的怪物。反之,玩家一旦失 手,怪物出现的数量就会减少。 当然,我们可以直接把倒下的怪物数量作为玩家的得分,但这里我们不妨多琢磨一下,看 看怎样才能让游戏更有趣。 例如,假若武士在追赶怪物的过程中一直不攻击怪物,最终将撞上怪物。在接近怪物的过 程中,如果太近的话就会失手。玩家要在确保不撞上怪物的前提下尽可能地接近怪物并斩杀, 这样游戏的技术难度就增加了。 这次我们设定了一个“靠近斩杀怪物将得到高分”的规则,但如果靠得太近又会导致武士 撞上怪物而失手,这样游戏就变得更加刺激了。 如果觉得游戏缺点什么,或许可以尝试着往游戏中加入这种“高风险 & 高回报”的玩法。

1.7.2 武士的攻击判定 在讨论如何判断攻击距离的远近之前,我们先说明一下攻击判定的原理。 玩家点击鼠标按键后,武士就会发起攻击行为。而攻击判定的计算就将伴随着攻击行为的 整个过程。 在格斗类游戏中,往往需要对玩家角色的拳脚和所使用的武器执行攻击判定。同样,也需 要对被攻击者的每个关节部位进行伤害计算。正因为有了这样精细的碰撞检测,才能够实现诸 如“蹲下躲开对方的回旋踢”“脚部受到攻击而导致行走速度减缓”等游戏特性。 不过我们这个游戏的碰撞检测并不需要细致到这种程度。由于怪物以很快的速度朝武士靠 近,如果要严格按照刀的形状来进行碰撞检测,击中的难度将大大增加。所以这里我们用一个 大的球形来进行碰撞检测,并在播放攻击动作的时候将其放置在武士前面(图 1.23)。 攻击的碰撞检测的执行时间,会比攻击动作的播放时间稍微长一些。如果提前按下鼠标按 键,怪物就将进入上面所说的碰撞检测的球体中,这就意味着攻击成功(图 1.24)。格斗游戏中 常常有“预判断”的说法。像这种敌人朝着玩家快速扑来的游戏,加入这种机制后会让游戏变 得更容易上手。 1.7.3 判断在多近的距离斩杀 通过提前进行碰撞检测和延长检测的时间,就可以应对怪物快速运动的情况。那么,现在 让我们回到主题,看看如何才能计算出“武士在多近的距离斩杀了怪物”。 “要计算武士在多近的距离斩杀了怪物,看看怪物和武士之间的距离不就行了吗?” 如果这样想的话就错了!因为按照我们的设计思路,怪物会从外部撞向武士面前的碰撞检 测用的球体,因此攻击成功时武士和怪物的距离必定等于该球体的半径(图 1.25)。 那么下面就让我们来重新理解一下“靠近斩杀”这个过程吧。 攻击判定是在按键被按下的瞬间开始的。在这一瞬间,怪物和武士之间的距离可能很近, 也可能很远。如果很远的话,怪物移动到碰撞检测的位置还需要一些时间。相反如果很近,碰 撞检测很快就会进行。因此,我们只要计算出从执行碰撞检测(= 按下鼠标按键的瞬间)开始到 实际发生碰撞为止经过的时间,应该就可以计算出是在多近的距离进行的斩杀了(图 1.26)。 我们用脚本 PlayerControl.cs 来管理攻击判定开始后的时间。 其中,attack_timer 是用来记录攻击判定持续时间的计时器。在按键被按下的瞬间会用一个 特定的值对它进行初始化,随着时间的减少,当它的值变为 0 时,则意味着攻击判定执行结束。 attack_timer 表示的只是攻击判定的“剩余时间”,为了获得被用于判段“在多近的距离斩 杀”的“经过时间”,我们还需要准备一个叫作 GetAttackTimer 的方法。 SceneControl.cs 的 AddDefeatNum 方法在武士攻击命中怪物时被执行。 最后,设定用于度量经过时间和得分高低关系的 ATTACK_TIME_GREAT 和 ATTACK_ TIME_GOOD 的值。如果经过时间小于 ATTACK_TIME_GREAT 并在足够近的距离内斩杀了怪 物则判定为 GREAT,若时间比 ATTACK_TIME_GOOD 短则判定为 GOOD,除此之外在远距离 斩杀怪物的情况则判定为 OKAY。每次攻击后都记录下判定的结果,在游戏结束后再通过这些 结果来决定玩家的总体成绩。 1.7.4 小结 通过改变用于衡量得分高低的经过时间的阈值(ATTACK_TIME_GREAT 和 ATTACK_ TIME_GOOD),可以调整游戏中获得高分的难度。比起制作程序本身,有时候调整这些数值反 而更花时间。但由于这些数值是决定游戏平衡性的重要因素,因此建议读者通过对照效果调整 出最合适的数值。

>Unity游戏设计与实现

Unity游戏设计与实现
作者: [日]加藤政树
副标题: 南梦宫一线程序员的开发实例
isbn: 711538424X
书名: Unity游戏设计与实现
页数: 384
译者: 罗水东
定价: 79.00元
出版社: 人民邮电出版社
装帧: 平装
出版年: 2015-2