MEGALOVANIA MEGALOVANIA

游戏开发中

目录
CPKA开发日志 其八
/      

CPKA开发日志 其八

工作日志

  • 添加了一个简单的 Gizmo(事实上是运行时的 GameObject)来标识角色的移动路径以及攻击的方向范围

    • 用 Mesh 画的扇形,用做好的 Prefab 做的箭头
  • 添加暂停和 Resume 的方法

    • 关于暂停和 Resume 需要处理的部分有两处,一处是 RecordFrame 的部分,一部分是动画停止的部分.RecordFrame 是很好处理的,因为用了 UniTask,只需要代码改成这样
     1while (duraction>=0.0f)
     2{
     3    if (isPaused)
     4    {
     5        await UniTask.NextFrame();
     6        continue;
     7    }
     8
     9    RecordFrame();
    10    await UniTask.WaitForSeconds(0.02f);
    11    duraction -= 0.02f;
    12}
    
    • 当然感觉这样写太多了还是会有点乱,今天会把这部分整理一下,因为不仅仅这里用了这个思路,其他很多用了 UniTask 的地方也基本都是用这个思路来处理的
    • 动画部分比较简单,针对 MoveAction 暂停了一下 DoTweenPath,然后针对 AttackAction 在 AnimMgr 中加了一个暂停 Montage 的方法,Resume 也是同理,就不展开描述了
  • 添加方法 执行队列中缓存的所有 Action

    • 实现思路上其实和前面是一样的,也是启一个 UniTask.但是这里写的时候没考虑到后面很多情况下并不需要从头开始,所以今天大概率会重写这部分代码
  • 能量系统

    • 在添加 Action 的时候消耗能量,如果能量不够 Action 是加不上的
  • 实现了敌人的基础 AI

    • 其实思路很简单,就是直接让敌人移动到玩家位置为圆心的,半径为武器攻击范围的一个位置,然后朝着玩家的位置进行一次攻击
    • 感觉上还是需要把武器伤害判定改成更合理的 Overlap,现在的方式经常会有碰不到的问题,尤其是动画速度变快以后
  • 实现基础的回合系统(还有 Bug)

    • 目前的玩法是这样
      • 回合开始
      • 敌人规划路径,并且显示敌人行动路径
      • 玩家自行规划路径,总路径不超过能量最大值
      • 玩家规划完毕后执行
      • 当玩家规划完的路径已经执行完毕时,马上时间暂停,再次进入下一个回合,重复上面的过程
        • 敌人在自己已经规划完毕的路径还没有完成的时候,不会重复规划路径
        • 在玩家执行完毕如果敌人还没有执行完毕的时候,敌人会直接暂停在那一瞬间
    • 改了一晚上,还是有很多 bug
      • 莫名其妙的卡住
      • 似乎移动单条路径的计算时间会比实际的 Record 时间更长

优化事项

  • 功能上
    • 重构 Pause 在 Unitask 中的逻辑
    • 改动武器伤害逻辑,改为 Overlap
    • 修复移动路径跟时间不匹配的 bug
    • 拆分功能,Record,计划,行动,整体控制
  • 最好是思考清楚逻辑再下手,目前这部分代码混乱主要来源于边写边看了,纯巧合编程
  • 目前没有那种直接的需要啃的部分,如果遇到了,需要把这部分记录下来,然后专门找一个时间用来啃某些需要花时间研究的模块或者代码
  • 需要下时间啃的模块
    • Zenject:啃完估计对 C#反射相关的玩法炉火纯青了
    • Playable:虽然这一坨像答辩,但是目前我对动画要求变高的情况下,不啃基本上不大可能
    • AIPath:文档很清晰,估计还有很多功能我没还涉猎
    • TCF 的伤害判定部分

今日目标

  • 修复卡死 bug
  • 重构整体逻辑,使得整体可玩

标题:CPKA开发日志 其八
作者:matengli110
地址:https://www.sunsgo.world/articles/2024/03/30/1711771841156.html