本轮主要完成主动和被动道具框架, 并且优化游戏中的Ui, 主要工作内容如下:
Prop
, 继承自ActivityObject
, 主动道具基类ActiveProp
, 被动道具基类BuffProp
, 现已经完成移速,射速,伤害,散射值,血量上限,护盾等控制基础属性道具Holster
抽成通用背包Package
, 并且删除Holster
, 可放入Package
的物体必须基础ActivityObject
类和实现接口IPackageItem
Shell
销毁后没有从AffiliationArea
中移除的bug本轮主要更改美术素材和添加音效, 并且使用excel作为项目配置表, 添加完整的游戏开始与结束流程
主要工作内容如下:
开始游戏
, 设置
, 结束游戏
三个按钮, 点击开始游戏
进入加载页面, 加载完成后进入地牢. 当玩家死亡后跳出结算页面, 结算页面包含重新开始
和回到主菜单
的按钮Sprite
, 实现类为ImageCanvas.cs
, 原理是将Texture2D
的纹理数据绘制到另一张Image
上, 并使用Sprite2D
来渲染这张Image
, 这样只需要调用一次渲染API就可以永久保存纹理数据, 为了防止同一帧突然添加大量渲染的图片导致处理时间过长, 这里引入了一个渲染队列机制, 如果渲染时间超过阈值时间, 后面的图片就放到下一帧渲染, 以确保游戏能稳定60帧运行ImageCanvas
实例, 并覆盖整个房间, 武器抛出的弹壳或者其它ActivityObject
可以调用ActivityObject.BecomesStaticImage()
函数将物体的纹理渲染到房间的ImageCanvas
上, 并且销毁当前对象, 这样大大节省性能开销导出excel表
按钮, 点击后会读取目录DungeonShooting_Godot\excel\excelFile
下的所有.xlsx
文件, 并生成对应的json配置文件和读取json的c#代码文件, 也就是根据excel表结构生成对应的实体类代码, 导出工具支持数据类型: 基础数据类型
, Array
, Dictionary
, 并且支持引用其它excel表ActivityObject
创建流程, 现在不再像以前一样在编辑器中创建ActivityObjectTemplate
了, 也不需要再ActivityObject
子类上添加[RegisterActivity]
标记, ActivityObjectTemplate
和RegisterActivity
类已被移除, 现在是直接在编辑器中创建ActivityObject
子类节点, 注册对象需要在ActivityObject.xlsx
表中填写物体id
和prefab路径
InputManager.cs
Weapon.xlsx
配置表, 添加更多新属性, 用于创建更丰富的武器, 并且支持配置音效狙击枪
和冲锋枪
ResourcePathGenerator.cs
支持排除指定路径文件夹本轮主要优化视觉上的效果, 并且完善模板房间创建的功能, 主要工作内容有:
ActivityMark
创建单位的流程, 并且引入了ActivityExpression
表达式, 用于创建单位并初始化属性, 也可以在表达式中指定多个id并让ActivityMark
从中随机挑选创建单位. 添加单位创建特效, 修复ActivityMark
在初始房间存在的bugEnemyMark
, 用于在指定位置创建敌方单位, 并且支持配置手中的武器Role.OnPutBackMount()
函数来设置角度和位置Task
和SignalAwaiter
本轮工作重点在于编写文档以及完善模板房间配置, 最近这段时间本职工作比较忙, 所以开发进度相比上一轮稍微放缓, 主要工作内容如有:
DungeonRoomTemplate
在编辑器中draw函数绘制层级过低和ctrl
+s
有时不触发保存bugtileMaps
文件夹下, 现在在tileMaps
下会有个分组文件夹, 用于放置同一层的地牢房间, 再到组文件夹下分了Battle
,Inlet
,Outlet
,Boss
,Reward
,Shop
,Event
这几个文件夹, 用于分类房间类型, 并加入房间权重, 权重越大, 越容易随机到该房间ActivityMark
添加生成物体高度和垂直速度配置, 支持在一个矩形区域内随机位置生成物体, 并优化ActivityMark
性能, 现在不是开始游戏就进入场景树, 而是玩家进入当前房间并开始执行标记时再放入场景树中GameApplication.DesignatedRoom
中指定地牢生成的房间, 这样地牢就只会在这个指定的随机池中抽取房间, 方便调试房间AiBulletSpeedScale
, Ai使用该武器发射的子弹速度缩放比; AiAmmoConsumptionProbability
, Ai使用该武器消耗弹药的概率本周主要完成Godot编辑器插件扩展, 目的为了更加方便为游戏添加内容, 主要工作内容如有:
automation
面板移到Godot编辑器2D
/Script
这一栏, 并重命名为Tools
Tools
面板中添加创建UI的功能, 输入UI名称点击创建就能自动创建一个空的UI场景和相配套UI代码, 编辑器监听用户对于UI的改动, 一旦有变化, 就会自动重新生成UI基础代码, 这样做的好处是一旦有节点重命名或者移动位置, 用到这个节点的代码就会编译报错. 每个UI都分好了文件夹, 所有和当前UI有关的代码都应该被放到同一个UI文件夹下Tools
面板中添加创建地牢预制房间的功能, 现在不需要自己在节点管理器中添加DungeonRoomTemplate
了, 并且节点管理器已经移除DungeonRoomTemplate
RoomConfig.json
, 现在不是所有数据都存在这个配置里了, 这里面值放一些基础数据和房间详细配置的路径, 需要房间详细信息再进行动态加载Uibase
添加协程支持, 功能和ActivityObject
中的协程一样ActivityObject
中的投抛系统, 加入ActivityObject
加入海拔高度字段, 并且自动计算精灵和阴影位置, 当海拔高度大于0时会自动做自由落体, 想向上抛物的话也只需要设置垂直方向的速度就行, 现在的Throw()
函数仅仅只是对于设置海拔高度和垂直速度的一个封装为了尽早能够完成核心功能, 对外展示demo, 三月上旬开发提速, 主要的工作内容有:
TileMap.GetCellTileData()
函数上, 调用该函数在关闭游戏释放资源时会导致读取到已经被释放的内存, 但是卡死的问题还是有极小概率发生, 目前情况未知ActivityObject
子类实例化流程, 现在通过在ActivityObject
子类上加[RegisterActivity(id, prefabPath)]
标记来注册物体, 并调用ActivityObject.Create(id)
来创建实例ActivityMark
), 通过标记可以指定生成的对象, 位置, 所在波数和延时生成时间, 也可以继承ActivityMark
来扩展物体生成操作, 例如子类EnemyMark
, 标记生成敌人, 并且可以指定初始武器与弹药量UiManager
管理Ui, 目前UiManager
还有部分功能尚未完成经过数十天开发, 已经完成自定义房间功能, 支持配置连接门生成区域, 而不是像之前一样整个矩形外框都能生成门, 并且还做了在编辑器中可视化编辑连接们生成区域的功能, 所有的自定义房间放在resource/map/tileMaps
, 路径下, 使用automation
面板下的打包地牢配置
即可将所有房间的配置信息整合到RoomConfig.json
文件内, 方便代码获取房间数据, 在编辑器中添加DungeonRoomTemplate
节点, 用于创建模板房间.
第一篇开发日志, 后面会更加频繁更新日志
用了大半年事件完成完成项目基础架构搭建, 已经包含的功能有:
ActivityObject
, 可以在编辑器中找到节点ActivityObjectTemplate
来快速创建物体模板