--- ### 2023-07-10 本轮主要完成主动和被动道具框架, 并且优化游戏中的Ui, 主要工作内容如下: * 完成主动道具和被动道具的基础框架, 它们共同的基类是`Prop`, 继承自`ActivityObject`, 主动道具基类`ActiveProp`, 被动道具基类`BuffProp`, 现已经完成移速,射速,伤害,散射值,血量上限,护盾等控制基础属性道具 * 将`Holster`抽成通用背包`Package`, 并且删除`Holster`, 可放入`Package`的物体必须基础`ActivityObject`类和实现接口`IPackageItem` * 添加拾起道具后的通用提示面板, 提示内容为道具名称 + 简短的描述 * 可互动的武器和道具添加描边效果, 现在素材中不需要绘制物体描边, 由程序来控制描边颜色, 并且显示物体名称 * 将玩家血条由条状血条改为红心, 每次受到伤害只扣除半颗红心, 并且受到伤害后获得短暂无敌时间, 目的为了防止玩家迅速暴毙 * 添加武器自动上膛配置, 添加子弹伤害配置 * 没有弹药的武器不再显示泛光效果 * 修复霰弹枪换弹无法强制停止的bug, 修复武器抛弹壳存在的bug * 修复`Shell`销毁后没有从`AffiliationArea`中移除的bug * 修复导出项目编译错误的问题 --- ### 2023-06-21 本轮主要更改美术素材和添加音效, 并且使用excel作为项目配置表, 添加完整的游戏开始与结束流程 主要工作内容如下: * 完成简易且完整的游戏流程, 添加主菜单, 加载, 和结算页面, 主菜单包括`开始游戏`, `设置`, `结束游戏`三个按钮, 点击`开始游戏`进入加载页面, 加载完成后进入地牢. 当玩家死亡后跳出结算页面, 结算页面包含`重新开始`和`回到主菜单`的按钮 * 优化渲染大量静态`Sprite`, 实现类为`ImageCanvas.cs`, 原理是将`Texture2D`的纹理数据绘制到另一张`Image`上, 并使用`Sprite2D`来渲染这张`Image`, 这样只需要调用一次渲染API就可以永久保存纹理数据, 为了防止同一帧突然添加大量渲染的图片导致处理时间过长, 这里引入了一个渲染队列机制, 如果渲染时间超过阈值时间, 后面的图片就放到下一帧渲染, 以确保游戏能稳定60帧运行 * 现在每个地牢房间会生成一个`ImageCanvas`实例, 并覆盖整个房间, 武器抛出的弹壳或者其它`ActivityObject`可以调用`ActivityObject.BecomesStaticImage()`函数将物体的纹理渲染到房间的`ImageCanvas`上, 并且销毁当前对象, 这样大大节省性能开销 * 新增读取excel配置表功能, 在插件中添加`导出excel表`按钮, 点击后会读取目录`DungeonShooting_Godot\excel\excelFile`下的所有`.xlsx`文件, 并生成对应的json配置文件和读取json的c#代码文件, 也就是根据excel表结构生成对应的实体类代码, 导出工具支持数据类型: `基础数据类型`, `Array`, `Dictionary`, 并且支持引用其它excel表 * 更改`ActivityObject`创建流程, 现在不再像以前一样在编辑器中创建`ActivityObjectTemplate`了, 也不需要再`ActivityObject`子类上添加`[RegisterActivity]`标记, `ActivityObjectTemplate`和`RegisterActivity`类已被移除, 现在是直接在编辑器中创建`ActivityObject`子类节点, 注册对象需要在`ActivityObject.xlsx`表中填写物体`id`和`prefab路径` * 更新地牢生成器, 添加支持生成boss房间, 生成器添加更多特性, 修复一个连接地牢房间失败的bug * 地牢房间的门添加打开和关闭效果, 关门后房间外的敌人丢失目标 * 新增输入管理器`InputManager.cs` * 武器属性移入`Weapon.xlsx`配置表, 添加更多新属性, 用于创建更丰富的武器, 并且支持配置音效 * 新增`狙击枪`和`冲锋枪` * 武器素材更新, 为每种武器添加射击音效, 换弹音效, 上膛音效(音效包从unity商城和fanatical购买的), 并且游戏中左下角的武器预览ui会同步玩家手上的武器动画 * 修复敌人扔出武器的一瞬间会触发重新拾起武器拾起的bug * 修复投抛物体中心点位置计算不正确的bug * 修复武器扔出去的一瞬间阴影位置不正确的bug * 编辑器中生成`ResourcePathGenerator.cs`支持排除指定路径文件夹 * 修复播放音效和背景音乐的API设置音量存在的bug --- ### 2023-05-10 本轮主要优化视觉上的效果, 并且完善模板房间创建的功能, 主要工作内容有: * 添加房间门的美术资源, 但是该资源依旧是一个临时资源 * 修改房间内南方向的墙壁碰撞大小, 碰撞器大小减半, 添加透视效果, 同样也修改了生成导航网格的代码 * 修改`ActivityMark`创建单位的流程, 并且引入了`ActivityExpression`表达式, 用于创建单位并初始化属性, 也可以在表达式中指定多个id并让`ActivityMark`从中随机挑选创建单位. 添加单位创建特效, 修复`ActivityMark`在初始房间存在的bug * 添加敌人标记`EnemyMark`, 用于在指定位置创建敌方单位, 并且支持配置手中的武器 * 添加敌人死亡特效, 敌人死亡后分裂成数个碎片并且向四周散开 * 物理模拟增强, 现在物体运动撞到墙壁会模拟现实轨迹反弹, 并且在玩家或敌人运行时抛出的物体也会继承一部分运动速度 * 武器袋更新, 现在可以设置任意容量的大小, 并且武器袋的卡槽能装下的武器不再受武器类型限制, 放到背后的武器由`Role.OnPutBackMount()`函数来设置角度和位置 * 协程添加新特性, 支持返回并等待`Task`和`SignalAwaiter` --- ### 2023-04-08 本轮工作重点在于编写文档以及完善模板房间配置, 最近这段时间本职工作比较忙, 所以开发进度相比上一轮稍微放缓, 主要工作内容如有: * 编写项目帮助文档, 为给后续开发人员更好的理解项目架构以及功能代码, 位置在[DungeonShooting_Document/项目帮助文档.md](项目帮助文档.md), 该文档为初期开发文档, 后续会因项目架构调整或新增内容而修改 * 修复`DungeonRoomTemplate`在编辑器中draw函数绘制层级过低和`ctrl`+`s`有时不触发保存bug * 调整模板房间文件夹结构, 以前全放在`tileMaps`文件夹下, 现在在`tileMaps`下会有个分组文件夹, 用于放置同一层的地牢房间, 再到组文件夹下分了`Battle`,`Inlet`,`Outlet`,`Boss`,`Reward`,`Shop`,`Event`这几个文件夹, 用于分类房间类型, 并加入房间权重, 权重越大, 越容易随机到该房间 * `ActivityMark`添加生成物体高度和垂直速度配置, 支持在一个矩形区域内随机位置生成物体, 并优化`ActivityMark`性能, 现在不是开始游戏就进入场景树, 而是玩家进入当前房间并开始执行标记时再放入场景树中 * 添加用于调试用的功能: 在`GameApplication.DesignatedRoom`中指定地牢生成的房间, 这样地牢就只会在这个指定的随机池中抽取房间, 方便调试房间 * 添加Ai使用武器属性变化: `AiBulletSpeedScale`, Ai使用该武器发射的子弹速度缩放比; `AiAmmoConsumptionProbability`, Ai使用该武器消耗弹药的概率 --- --- ### 2023-03-19 本周主要完成Godot编辑器插件扩展, 目的为了更加方便为游戏添加内容, 主要工作内容如有: * 将原来编辑器中的`automation`面板移到Godot编辑器`2D`/`Script`这一栏, 并重命名为`Tools` * `Tools`面板中添加创建UI的功能, 输入UI名称点击创建就能自动创建一个空的UI场景和相配套UI代码, 编辑器监听用户对于UI的改动, 一旦有变化, 就会自动重新生成UI基础代码, 这样做的好处是一旦有节点重命名或者移动位置, 用到这个节点的代码就会编译报错. 每个UI都分好了文件夹, 所有和当前UI有关的代码都应该被放到同一个UI文件夹下 * UI节点添加打开子UI的api, 允许嵌套打开UI * `Tools`面板中添加创建地牢预制房间的功能, 现在不需要自己在节点管理器中添加`DungeonRoomTemplate`了, 并且节点管理器已经移除`DungeonRoomTemplate` * 优化`RoomConfig.json`, 现在不是所有数据都存在这个配置里了, 这里面值放一些基础数据和房间详细配置的路径, 需要房间详细信息再进行动态加载 * `Uibase`添加协程支持, 功能和`ActivityObject`中的协程一样 * 重写`ActivityObject`中的投抛系统, 加入`ActivityObject`加入海拔高度字段, 并且自动计算精灵和阴影位置, 当海拔高度大于0时会自动做自由落体, 想向上抛物的话也只需要设置垂直方向的速度就行, 现在的`Throw()`函数仅仅只是对于设置海拔高度和垂直速度的一个封装 --- ### 2023-03-13 为了尽早能够完成核心功能, 对外展示demo, 三月上旬开发提速, 主要的工作内容有: * 找到一个会触发关闭游戏卡死的 bug, 问题出在`TileMap.GetCellTileData()`函数上, 调用该函数在关闭游戏释放资源时会导致读取到已经被释放的内存, 但是卡死的问题还是有极小概率发生, 目前情况未知 * 发现并修复bug: 之前版本在自定义房间连接时, 如果生成带有拐角的通道, 通道生成的位置不是按最近位置生成, 这就导致生成的拐角通道特别长, 而且浪费空间, 现已修复 * 完成房间的定义, 并为房间划分好区域, 当玩家进入一个新的房间时开始关门并刷怪, 消灭房间内所有敌人时开门 * 重整`ActivityObject`子类实例化流程, 现在通过在`ActivityObject`子类上加`[RegisterActivity(id, prefabPath)]`标记来注册物体, 并调用`ActivityObject.Create(id)`来创建实例 * 在预制房间中添加自定义物体生成标记(`ActivityMark`), 通过标记可以指定生成的对象, 位置, 所在波数和延时生成时间, 也可以继承`ActivityMark`来扩展物体生成操作, 例如子类`EnemyMark`, 标记生成敌人, 并且可以指定初始武器与弹药量 * Ui核心框架已经搭建完成, 并划分好UI的层级, 现已通过`UiManager`管理Ui, 目前`UiManager`还有部分功能尚未完成 * 完成Ui类代码自动生成的功能, 现在可以根据Ui对象生成相应的图层调用代码, 更加方便编写Ui, 但是目前还没有接到编辑器中, 需要写代码手动调用接口 * 修复相机运动和抖动时存在的问题 --- ### 2023-02-28 经过数十天开发, 已经完成自定义房间功能, 支持配置连接门生成区域, 而不是像之前一样整个矩形外框都能生成门, 并且还做了在编辑器中可视化编辑连接们生成区域的功能, 所有的自定义房间放在`resource/map/tileMaps`, 路径下, 使用`automation`面板下的`打包地牢配置`即可将所有房间的配置信息整合到`RoomConfig.json`文件内, 方便代码获取房间数据, 在编辑器中添加`DungeonRoomTemplate`节点, 用于创建模板房间. --- ### 2023-02-15 第一篇开发日志, 后面会更加频繁更新日志 用了大半年事件完成完成项目基础架构搭建, 已经包含的功能有: * 所有物体的父物体为`ActivityObject`, 可以在编辑器中找到节点`ActivityObjectTemplate`来快速创建物体模板 * 玩家, 敌人的基础移动, 拾起/扔掉武器, 武器袋存放武器, 切换武器, 手持武器开火, 换弹, * 武器类别有近战/远程武器, 武器由属性类控制 * ai行为逻辑, 包括自动寻路, 发现玩家后追踪玩家, 通知其它ai玩家位置, 射程足够时朝玩家射击, 在玩家周围徘徊, 没有武器/弹药时寻找可用的武器 * 随机生成地牢, 地牢房间与房间由过道连接, 一个房间至少连接一个其它房间 * 游戏中UI, 包括血条, 玩家手持武器, 武器弹药, 换弹进度, 拾起武器提示 * 音效管理, 播放背景音乐和音效