预判定 : 提前碰撞检测和延长碰撞检测的时间
项目特性:

  • 玩家自动行走
  • 鼠标左键攻击
  • 一次性可斩杀多个怪物,并且设计了随机的怪物击飞路径
  • 近处斩杀怪物得到高分
  • 若被不出现失误,怪物的数量持续增加
  • 触碰怪物后失败

主要亮点:

  1. 无限背景(由三张背景图组成),循环并列显示三张背景租金

    实现方式: 初始设计方式是根据摄像机(即玩家)的位置,超过某个背景的中心点时,将背景向后移动,但背景仅仅在每次Update()时移动一次,故若是武士移动的距离较长,就可能出现背景消失的BUG【因为每次只移动一步】。 故仅记录玩家初始位置和每次update的最终位置,通过差值除背景宽度,可得出背景的跳跃宽度。 即实现背景每次update移动n步,就可解决这个bug

  2. 怪物出现模式

    考虑到怪物的运动速度和出现间隔,即为难易度。 主要考虑到时间点、速度。根据这两个分别划分出不同的出现模式,也可以演绎不同的游戏节拍 主要有以下几种:

    • 连续模式:怪物在较短的时间涌上来
    • 缓慢模式:怪物移动速度很慢,且出现时间间隔长
    • 赶超模式:后出现的怪物追赶并赶超更早出现的怪物,后登场的怪物会先到达玩家处,有措手不及的感觉
    • 加速->减速:怪物到达屏幕中央后加速,接近玩家后有个减速。

    主要状态变化规律如下

    1. 循环随机次数普通模式后
    2. 随机切换上述特殊模式
    3. 后又回到普通模式
  3. 碰撞检测

    初始设计时,是将武士采用立方体,怪物采用球体来进行碰撞检测,如此选择是因为考虑到球体的碰撞计算量小。但在Unity中,其碰撞处理为了使碰撞后的对象按照原来的方向移动,对碰撞的对象采取了一个滑动的处理,故对于玩家来说,攻击的难度会变大(因为碰撞后武士和怪物会向两侧滑动)

故解决方案如下:
由于同批次的怪物密集出现,故按群组管理怪物,即将怪物作为小组的一个子元素,将群组作为碰撞检测的对象,此时群组碰撞体为一个立方体。且由于武士立方体和群组立方体大小相似,故也不会出现越过怪物或绕过怪物的现象。
因此也添加了多个怪物被同时砍飞的爽快

  1. 得分高低

对于武器的碰撞检测,若按照刀的形状来构建碰撞体,游戏难度会大大增加,故在游戏中使用球体进行攻击的碰撞检测。
得分高低的判定:
从按下鼠标左键开始,进行攻击判定,直到发生实际的碰撞时得这一段时间,越短分数越高。

  1. 怪物群被击飞的特效

用刀砍中怪物群时,各自飞散开的过程类似于在玩家处产生爆炸。由于怪物被砍中受某一个方向的力,故其往相反的方向飞出就比较自然。
想要让每次击飞特效有随机性,有要按照我们的预期,核心思想便是:
先确定好关键性的原则,再使用随机数改变细节
怪物被砍中后飞出的方向是由武士攻击瞬间的速度向量决定的

  • 关键性原则:将怪物按圆锥的表面方向飞出,圆锥的地面半径决定了飞散的范围,圆锥倾斜的角度决定了飞散的方向
  • 细节:怪物分散的方向,以到圆锥,分布在圆锥的表面上,通过调整圆弧的中心角度,来调整左右方向