开发者工具
This content is not available in your language yet.
运行时调试系统:按 ` 或 F1 呼出 DevTools 面板即可刷怪、改时间、开作弊、注入物品与船员;配合场景预设(ScenarioLoader)与场景测试(ScenarioTestRunner),构成策划在 Play Mode 里搭场景、验数值的完整工具链。
开发者工具(DevTools)面向策划与开发,进入 Play Mode 后自动初始化,无需任何配置(DevToolsManager.cs 在场景加载完成后自动创建单例)。玩家不会接触这些工具。它由四大块组成:
- DevTools 主面板与右键菜单——运行时作弊、刷怪、时间控制、物品/船员注入(
DevToolsManager.cs、DevToolsPanel.cs)。 - 场景预设系统——开局时按 JSON 预设搭建世界、船队、作弊开关、怪物与交易数据,策划不写代码、纯改 JSON 即可调出一个测试局(
ScenarioLoader.cs、StarterFleetInitializer.cs、AIShipSpawner.cs)。 - 场景测试运行器——21 个端到端自动化测试 + 6 个遭遇区专项测试,验证任务、生产、战斗、薪资等系统协同(
ScenarioTestRunner.cs)。 - 性能观测工具——Tick 系统性能统计窗口(
TickSystemStatsWindow.cs)。
主面板使用 IMGUI 实现,只在 Unity Editor 和 Development Build 中编译;但 DevToolsManager 本体与右键菜单逻辑在正式构建中也存在(见“已知限制”)。
另:TeleportSystem_MVP/ 目录是一个独立的简化瞬移系统原型(SimpleTeleportManager.cs,注册对象后按 ID 瞬移),仅供早期建筑场景测试,与上述工具链无关。
| 按键 | 作用 | 出处 |
|---|---|---|
| `(反引号)或 F1 | 开关 DevTools 主面板;面板开启时同时启用建筑悬停文字与右键调试菜单 | DevToolsManager.cs(Inspector 序列化字段 _toggleKey / _toggleKeyAlt,但管理器对象为运行时自动创建,实际生效的就是代码默认值) |
| F2 | 切换 AI 世界 UI(AI 船头顶条/船员条/锅炉状态条等的显隐,默认隐藏,玩家船不受影响) | DevToolsManager.cs → AIWorldUIGate.cs |
| F2(同键冲突) | 同时开关“招募/薪资调试面板”,按一次两件事都发生 | RecruitmentDevPanel.cs |
| F8 | 循环切换玩家船战备状态:Routine → Alert → BattleStations → Routine | DevToolsManager.cs |
| F8(同键冲突) | 同时开关“地图可视度调试面板” | DiscoveryRevealDevPanel.cs |
| 右键(仅面板开启时) | 点船员 → 船员调试菜单;点有容器的建筑 → 容器信息弹窗 + 添加物品菜单 | DevToolsManager.cs |
| ESC / 点菜单外 | 关闭当前右键菜单/弹窗 | DevToolsContextMenu.cs 等 |
| Tab(挂载全船操控后) | 循环攻击方式:手动 → 半自动 → 全自动 | ShipWeaponControl.cs(序列化字段 _cycleModeKey) |
| 数字键 1-8(挂载全船操控后) | 全船切换装弹档位(测试弹药:1-4 动能火/冰/毒/电,5-8 元素火/冰/毒/电) | ShipWeaponControl.cs、AmmoCatalog.cs |
| 鼠标左键 / 右键(挂载全船操控后) | 投射武器开火 / 喷射武器开火 | ShipWeaponControl.cs |
场景测试没有任何键盘快捷键(避免与玩家操作冲突),只能远程触发或 Inspector 右键触发,见下文。
DevTools 主面板
Section titled “DevTools 主面板”主面板是一个可拖拽的 IMGUI 窗口(初始位置屏幕左上 20,20,尺寸 360×560 像素,代码常量),按 或 F1 开关,分六个区(DevToolsPanel.cs`)。
| 控件 | 行为 |
|---|---|
| 暂停 / 恢复按钮 | 切换游戏暂停。暂停 = 把全局 timeScale 设为 0,恢复时回到暂停前速度(GameSpeedManager.cs) |
| 0.1x / 0.5x / 1x / 2x / 5x / 10x | 设置全局游戏速度(直接写 Unity timeScale,怪物移动、子弹、Tick 系统全部受影响;档位数组为 DevToolsPanel.cs 代码常量) |
| Day / Hour 输入框 + 跳转 | 跳到指定游戏日期时间。Day 从 0 起算(输入 0 = 第 1 天);跳转会触发跨小时/跨天事件(发薪等),DateTimeManager.cs 按 1 天 = 1440 游戏分钟换算 |
时间控制的游戏内含义详见 时间与调度。
| 控件 | 行为 |
|---|---|
| 刷怪类型按钮(6 个) | 选择刷怪种类:普通(Normal)、钢壳鲎(SteelHorseshoe)、炽鳞蛇(BlazeSerpent)、游曳鳐(GlideRay)、藤壶群(BarnacleSwarm)、渊海兽(AbyssBeast)。当前选中项绿色高亮(MonsterType.cs) |
| Spawn 1 / Spawn 10 / Spawn 50 | 在当前活跃遭遇区 session 里强制刷出选定类型怪物 N 只。前提:必须有活跃 session(在遭遇区内,或已开“区外刷怪”),否则只打警告日志静默失败 |
| 清怪 | 对所有活跃 session 的所有存活怪物执行死亡流程(走正常掉落结算,见 战利品与掉落) |
| 暂停刷怪 | 暂停/恢复所有 session 的时间轴推进与压力地板补怪(ArenaSessionManager.cs 的 Paused) |
| 区外刷怪 | 以玩家船当前位置开启一个跟随船移动的“环境 session”(半径常量 100000 米,仅为绕过区域包含判定;时间轴为空,不会自动刷怪,只响应 Spawn 按钮)。让 Spawn/清怪/暂停在真实遭遇区之外也可用 |
刷怪机制本体见 遭遇与刷怪,五种代表性怪物的设计考点见 怪物。
| 控件 | 行为 |
|---|---|
| 一键布置(五种怪+操控+无限弹药) | 顺序执行:开武器开发模式(无人自动开火 + 无限弹药)→ 开区外刷怪 → 挂载全船武器操控 → 刷出钢壳鲎×2、炽鳞蛇×2、游曳鳐×2、藤壶群×6、渊海兽×1(DevToolsManager.cs 的 SetupCombatTest) |
| 挂载全船操控 | 给玩家船挂 ShipWeaponControl 组件并启用测试弹药八格弹仓(Tab 切攻击方式、数字键 1-8 切弹种、左/右键开火)。测试弹药 TestAmmo_* 不进物品/生产链、无限弹药下不消耗,仅供手测(AmmoCatalog.cs),见 武器与弹药 |
| 火 / 冰 / 毒 / 电 按钮 | 对玩家船半径 30 米内所有怪各施加 1 层对应元素状态。施加时投掷点数强制为 0(必中,无视抗性鉴定),持续时间用全局默认 4 秒(StatusTuning.cs 的 DefaultDuration = 4,代码常量)。用于手测叠层/质变/反应/传播,机制见 元素与状态效果 |
| 开关 | 行为 |
|---|---|
| 即时建造 | 玩家手动放置建筑立刻完成,跳过框架/搬料/施工流程(CheatFlags.cs 的 InstantBuild;只影响玩家路径,AI 船工厂建造走显式参数不读此开关)。详见 修建 |
| 建筑无敌 | 所有建筑免疫伤害(BuildingGodMode;已知缺陷:不区分阵营,敌船建筑也被保护,DamageableComponent.cs 内有 TODO) |
| 无限金钱 | 开启时记录当前金币并把玩家船金币设为 999,999,999;关闭时还原原值(DevToolsManager.cs,代码常量)。开启后面板会显示原始金币数 |
注意:船员无敌(CrewGodMode)不在面板上,只能通过场景预设的 cheats 轴 JSON 开启(见下文)。它只保护阵营 ID 为 “Player” 的非建筑实体。
| 控件 | 行为 |
|---|---|
| 招募调试 | 打开独立的“招募/薪资调试面板”(见下文) |
| 控件 | 行为 |
|---|---|
| Routine / Alert / Battle 按钮 | 设置玩家船战备状态(当前状态绿色高亮)。效果(ShipCombatState.cs,代码常量):Routine = 操炮任务用默认优先级层级 5;Alert = 层级提到 8;BattleStations = 层级 11 且进入紧急模式(船员需求任务不再抢占工作任务)。任务优先级体系见 任务与工作 |
| 无人 AutoFire | 武器无操作员时仍保持自动开火(WeaponAutoFireWithoutCrew;有船员在炮位时不覆盖其控制) |
| 无限弹药 | 武器射击不消耗弹药(WeaponInfiniteAmmo) |
| 开发预设按钮 | 一键同时开启上面两项(“武器开发模式”) |
武器作弊开关在建筑注册时自动套用到所有有人武器,运行中新建的武器也会生效。
右键调试菜单(面板开启时)
Section titled “右键调试菜单(面板开启时)”面板开启后,右键世界中的对象按以下优先级响应(DevToolsManager.cs):鼠标在面板/其他 UI 上不响应;已有菜单打开时不响应;先尝试船员(物理射线检测),不是船员再尝试建筑容器。
船员调试菜单(CrewDevContextMenu.cs)
Section titled “船员调试菜单(CrewDevContextMenu.cs)”右键点中船员弹出:
- 职级下拉框 + 应用职级:可切换全部职级枚举值;所选职级不允许有职业时,职业下拉框锁定并自动回“无”。
- 职业下拉框 + 应用职业:可切换职业;Chaplain(牧师)被刻意排除(招募内容/模型未完成)。
职级与职业体系见 船员。
容器菜单与容器信息弹窗
Section titled “容器菜单与容器信息弹窗”右键点中带容器的建筑会同时弹出两个窗口:
- 添加物品菜单(
DevToolsContextMenu.cs):下拉框列出StaticItemConfig全部物品(物品清单见 物品数据表),三个按钮注入物品到该建筑容器:- “1个” = 1 件;
- “半组” = 最大堆叠 ÷ 2(向下取整,至少 1 件);
- “1组” = 最大堆叠(物品配置缺失时按 50 兜底,代码常量)。
- 目标容器优先级:存储容器 → 输入容器 → 输出容器。
- 容器信息弹窗(
BuildingContainerInfoPopup.cs):实时显示该建筑 Storage / Input / Output 三个容器的占用槽位、各物品数量与黄色 “R:” 预约数(预约系统见 物品与库存)。每秒刷新 2 次(TickFrequency.TwicePerSecond),可拖拽,ESC 或再次右键关闭。
独立调试面板
Section titled “独立调试面板”招募/薪资调试面板(F2,RecruitmentDevPanel.cs)
Section titled “招募/薪资调试面板(F2,RecruitmentDevPanel.cs)”UI Toolkit 实现的独立浮窗(宽 720 像素,排序层 1000,不占玩家 UI 四槽位框架),DevTools 启动时自动创建。功能:
| 分区 | 功能 |
|---|---|
| 摘要行 | 金币 / 船员数与上限 / 当前总月薪 |
| 快速注入 | 选职级+职业直接生成一名船员入队,绕过签约流程与费用(走 CandidateGenerator 随机属性) |
| 城市候选 | 输入城市 ID(默认 dev_port)→ “进港”模拟进港触发候选池;“刷新候选”强制重刷(传入天数 999999 绕过刷新冷却) |
| 候选人列表 | 显示六维属性/月薪/签约费,点“招募”加入待确认清单 |
| 当前船员列表 | 每人可标记“解雇”(产生遣散费)或“驱逐”(无费用),显示欠薪次数 |
| 待确认区 | 汇总费用/船员增减/月薪增减,金币不足时红色提示并禁用确认;“确认全部” / “重置” |
| 薪资调试 | “立即发薪”(按当前游戏天结算)、“强制发薪 day=9999”(强行触发一轮发薪判定)、“检查欠薪离队”(手动跑一次欠薪离队判定) |
招募与薪资规则本体见 船员。
地图可视度调试面板(F8,DiscoveryRevealDevPanel.cs)
Section titled “地图可视度调试面板(F8,DiscoveryRevealDevPanel.cs)”IMGUI 浮窗(初始位置 20,80,尺寸 240×220),仅 Editor / Development Build 编译。四个按钮:
| 按钮 | 行为 |
|---|---|
| Reveal Geography(清雾) | 把雾遮罩全部格子标记为已见(只清雾,不解锁兴趣点) |
| Reveal POIs | 把全部国家/城市/遭遇区标记为已发现(雾仍在) |
| Reveal All(God Mode) | 上面两个都做 |
| Reset to Scenario Initial | 清空发现状态与雾,重新应用当前场景预设的初始已发现国家/城市 |
探索与发现机制见 探索与情报。
遭遇调试窗口(自动显示,EncounterDebugWindow.cs)
Section titled “遭遇调试窗口(自动显示,EncounterDebugWindow.cs)”Editor / Development Build 下由遭遇系统启动时自动挂载的 IMGUI 浮窗(初始位置 20,200,尺寸 320×220),实时显示所有活跃 session(区域 ID / 存活数 / 累计刷怪数 / 是否暂停),并提供 Force Spawn Normal×3、Force Spawn Elite×1、清怪、暂停/恢复刷怪按钮(与主面板怪物区功能重叠)。
作弊开关汇总(CheatFlags.cs)
Section titled “作弊开关汇总(CheatFlags.cs)”所有作弊是全局静态开关,三种来源可改:DevTools 面板、场景预设 cheats 轴 JSON、代码。
| 开关 | 效果 | 面板可改 | 预设 JSON 键 |
|---|---|---|---|
| InstantBuild | 玩家建造即时完成 | 是 | instantBuild |
| BuildingGodMode | 建筑免伤(不分阵营) | 是 | buildingGodMode |
| CrewGodMode | 玩家阵营船员免伤 | 否 | crewGodMode |
| InfiniteGold | 金币锁 999,999,999(关闭时还原) | 是 | infiniteGold |
| WeaponAutoFireWithoutCrew | 无人武器自动开火 | 是 | weaponAutoFire |
| WeaponInfiniteAmmo | 武器不耗弹 | 是 | weaponInfiniteAmmo |
预设中的 infiniteGold 不能立即生效——开局后由 DevToolsManager 协程等待玩家船就绪(最多等 10 秒,超时报错放弃)再套用;其余五项在场景加载时直接写入。
场景预设系统(ScenarioLoader)
Section titled “场景预设系统(ScenarioLoader)”mvp_002 场景里的 ScenarioLoader 组件在 Awake(执行顺序 -100,先于一切)读取 Assets/StreamingAssets/Presets/{预设名}.json,按“轴”组合加载数据集(ScenarioLoader.cs、ScenarioPreset.cs):
| 轴 | 数据位置 | 内容 |
|---|---|---|
| world | DataSets/world/{name}.json |
世界坐标缩放/偏移、城市半径缩放(现有 compact 紧凑测试图 / real 真实地图) |
| cheats | DataSets/cheats/{name}.json |
六个作弊开关。现有:dev(仅即时建造开)、none(全关)、weapon_dev(无人开火+无限弹药开) |
| fleet | DataSets/fleet/{name}.json |
开局船队:初始金币、甲板尺寸(默认 10)、船员(职级+职业)、建筑清单(名称+格偏移+旋转)、初始物资(物品 ID+数量+目标建筑) |
| monsters | DataSets/monsters/{name}/ 目录 |
CSV 覆盖:StaticMonsterConfig.csv + MonsterPolygons.json(现有 easy / hard / none;缺文件 = 该表用默认) |
| trading | DataSets/trading/{name}/ 目录 |
CSV 覆盖:CityInventory.csv(现有 rich / standard),另可附 TestTrader.json 测试商人 |
| aiShips(内嵌数组) | 引用 fleet JSON | 每条 = 一艘 AI 船:船队配置、阵营(默认 Pirate)、出生偏移、行为(默认 Patrol)、侦测距离(默认 50 米) |
省略的轴使用游戏默认数据。预设还可指定 playerNationality(初始国籍)与 initialDiscoveredCountries / initialDiscoveredCities(初始已发现项)。
当前预设清单(Assets/StreamingAssets/Presets/,共 15 个,JSON 配置,策划可直接改)
Section titled “当前预设清单(Assets/StreamingAssets/Presets/,共 15 个,JSON 配置,策划可直接改)”| 预设 | world | cheats | fleet | monsters | trading | AI 船 | 国籍 |
|---|---|---|---|---|---|---|---|
| 日常测试(场景默认) | compact | dev | full | easy | rich | 0 | 无 |
| 正常游玩 | real | none | 无 | 默认 | 默认 | 0 | 无 |
| 战斗测试 | compact | weapon_dev | combat | hard | standard | 0 | 无 |
| PlayMode测试 | real | none | 无 | easy | 默认 | 0 | 无 |
| AI测试 / AI测试(含海怪) | compact | dev | full | none / easy | rich | 1 | 无 |
| 撞击AI测试 / 撞击AI测试(含海怪) | compact | dev | full | none / easy | rich | 3 / 1 | 无 |
| 混合AI战斗测试 | compact | dev | combat_player | none | rich | 4 | 无 |
| 生产链测试 | compact | dev | production_test | none | rich | 0 | 无 |
| 交易测试 | compact | none | minimal | 默认 | rich | 0 | 无 |
| 外循环测试 / 外循环测试_真实地图 | compact / real | none | full / outer_loop_starter | easy | rich | 0 | country_001 |
| 自动化测试 | compact | dev | 无 | none | 默认 | 0 | 无 |
| 集成测试 | compact | dev | full | easy | rich | 0 | 无 |
举例:fleet/full.json = 初始金币 10500、16×16 甲板、5 名专家船员(炮手/木匠/事务长×2/军医)、18 个建筑、6 类初始物资。
开局搭建流程
Section titled “开局搭建流程”StarterFleetInitializer.cs:按 fleet 配置在网格中心铺地板(全部即时建造)→ 放建筑 → 重连管道 → 注入物资 → 创建船员(随机性别与姓名)→ 设置金币(fleet 的startingGold是唯一金币来源)→ 设置国籍。有国籍时对自家国家初始声望直接设为 50,恰好达到 Friendly 阈值(见 阵营与外交)。AIShipSpawner.cs:等玩家船就绪后再额外等 1 秒,按 aiShips 条目以“玩家船位置 + spawnOffset”生成 AI 船。- PlayMode 测试自动切换:Unity 测试框架启动时活动场景名以
InitTestScene开头,ScenarioLoader强制改用“PlayMode测试”预设,并抑制城市巡逻/遭遇系统动态生成 AI 船,保证测试基线稳定。
选中场景里的 ScenarioLoader 对象,Inspector 显示 Presets 目录全部 JSON 的单选列表(ScenarioLoaderEditor.cs),勾选即切换;新增预设 = 在 Presets/ 目录加 JSON 文件,无需改代码。
场景测试(ScenarioTestRunner)
Section titled “场景测试(ScenarioTestRunner)”ScenarioTestRunner 进入 Play Mode 后自动创建([ScenarioTestRunner] 对象)。三种触发方式,没有键盘快捷键:
- 远程触发(推荐,配合 tykit):把组件的
_remoteRunRequested属性设为 true(项目.claude/rules/unity-tykit.md有完整 curl 命令模板),下一帧开始跑全部选中测试。 - Inspector 右键:组件右键菜单“运行所有自动化测试”;另有“搭建测试环境”(10×10 地板 + 床×2 + 水桶 + 厕所 + 魔法容器)、“创建测试船员”(3 人,第 1 人设为三重失能)、“触发混合任务场景”、“输出 TaskLogger 摘要”、“清理测试环境”五个手动调试入口。
- 按名过滤:在
_remoteFilterNames字段填逗号分隔的中文测试名(须与枚举名完全一致)只跑子集;留空则按 Inspector 的_enabledTests多选开关过滤。
运行参数(Inspector 序列化字段):测试加速倍率 _testTimeScale 默认 3 倍(可调 1-5);测试间隔 2 秒;每个测试前清场等 2 秒 + 初始化等 0.5 秒;基础测试区为居中 10×10 地板(_floorSize),生产类测试用 18×18(代码常量),生产环境预置蒸汽管线、屠宰台、厨房、弹药台、3 个木箱(预填怪物尸体×30、铁板×40、煤×100、罐头×30、净水×30、子弹×500)、4 床并把锅炉煤装满。
21 个测试用例
Section titled “21 个测试用例”| 测试名 | 验证内容 | 关键数值 / 超时(游戏内秒) |
|---|---|---|
| 救援流程 | 失能船员(疲劳/口渴/饥饿全 100 + 倒地/饥饿濒死/脱水三重失能)被同伴喂食补水救起 | 60 秒内三种失能全解除 |
| 食物竞争 | 3 个饥饿船员(饥饿 90)抢 1 份食物,预约系统防超发 | 10 秒内有人开吃;恰好 1 人吃到 |
| 床位竞争 | 3 个疲劳船员(疲劳 90)抢 1 张床 | 15 秒内 3 人都进入睡眠任务;床位占用恰好 1 |
| 建造流程 | 搬运 + 建造完整链 | 45 秒内建成且 Haul、Build 任务都出现过 |
| 材料不足建造 | 只给 10 木(木箱需 30 木 20 石)→ 建不成;补 25 木 25 石后建成 | 补料后 45 秒内完成 |
| 混合场景 | 救援 + 建造 + 需求竞争并发 | 救援 90 秒、建造 60 秒双超时判定 |
| 优先级抢占 | 建造优先级 1 的船员被口渴 90 的需求任务抢占(有效优先级 575 > 145),优先级 9 的不被抢(575 < 945) | 抢占 10 秒内发生 |
| 如厕流程 | 膀胱 95 触发如厕 | 15 秒内接任务,30 秒内归零 |
| 治疗重伤 | 打掉 80% 最大生命触发重伤,军医治疗 | 25 秒内重伤解除且生命率回到退出阈值以上 |
| 生产流程 | 屠宰台预填 5 怪物尸体 + 排产 1 单 | 45 秒内产出怪物肉。见 生产与制作 |
| 补煤流程 | 清空锅炉煤后船员自动补煤 | 45 秒内锅炉有煤 |
| 产出搬运 | 排产 3 单屠宰,产物自动入库 | 60 秒内仓库出现怪物肉或兽油 |
| 操炮流程 | 手动指派炮手后上炮 | 30 秒内操作员匹配 |
| 武器战斗 | 机枪打 9999 血靶子:耗弹 → 打空 → 下炮取弹 → 装弹 | 上炮 30 秒、耗弹 15 秒、装弹 45 秒 |
| 建筑修理 | 打掉建筑 70% 最大生命后船员自动修理 | 45 秒内修复完成 |
| 正常发薪 | 金币 500、月薪 100,跳到发薪日 | 金币变 400、欠薪 0(发薪间隔读薪资配置 SalaryIntervalDays) |
| 欠薪 | 金币 150、两人月薪各 100 → 高职级优先 | 高职级拿到、低职级欠薪 1 次、余 50 |
| 欠薪离队 | 欠薪次数设到阈值、离队概率临时强制 100% | 触发检查后船员被移除 |
| Issuer生命周期 | 任务发布者注册/注销/重复注销不出错 | 结构性验证 |
| 服务隔离 | AI 船与玩家船的建筑注册表是不同实例 | 无 AI 船时跳过判通过 |
| ShipHull初始化 | 船体组件拿到网格管理器且包围半径 > 0 | 结构性验证 |
- 屏幕左上角 IMGUI 即时状态(当前测试名、通过/失败计数)。
- 详细日志写入
{项目根}/Logs/TaskLogs/TaskLog_日期_时间.txt(TaskLogger.cs,[DEV_TEST]前缀行;日志保留 7 天自动清理,每 10 条落盘一次)。
PlayMode 复刻版与遭遇专项测试
Section titled “PlayMode 复刻版与遭遇专项测试”- 上述 21 个用例另有 Unity Test Framework PlayMode 版复刻(
ScenarioPlayModeTests.*.cs五个分组文件:BuildFlow / Combat / Production / SalaryService / TaskFlow,共享搭场工具PlayModeTestSceneHelper.cs),整个测试会话只加载一次 mvp_002,用例间清场(清船员 + 13 类建筑,刻意保留地板——清光会让船浮力归零沉没)。用/qq:test或 tykitrun-tests运行。 - 遭遇系统另有 6 个独立场景测试组件(
ScenarioTests/Encounter/,A-F):区域穿越刷怪(ScenarioZoneTraversal,验证 30 秒内 spawn ≥ 5 且全部落区内)、时间轴完整播放(行触发误差阈值 0.5 秒)、循环模式重置(首行触发 ≥ 2 次)、离场清怪记账(玩家击杀 + 距离回收 + 离场清理 = 总刷怪数)、重叠区域双 session、出生淡入防秒杀(淡入 1.5 秒内不可被攻击)。均通过各自的_remoteRunRequested远程触发。
性能测试工具
Section titled “性能测试工具”- Tick 系统性能统计窗口(菜单
Tools → Tick System Stats,TickSystemStatsWindow.cs):运行时显示各 Tick 频率组的执行耗时、平均值与历史曲线;每 0.5 秒刷新一次,曲线保留最近 100 个采样点(均为代码常量)。这是当前唯一的专用性能观测工具,Tick 分组机制见 时间与调度。 - 场景测试加速:ScenarioTestRunner 以 3 倍速跑测试(可调 1-5 倍);配合面板“Spawn 50 藤壶群”等操作可作为手动压测手段。
- 项目未安装 Unity Performance Testing 包,没有基于性能度量断言的自动化性能测试。
与其他系统的交互
Section titled “与其他系统的交互”| 系统 | 关系 |
|---|---|
| 时间与调度 | 面板速度按钮直接驱动全局 timeScale;日期跳转触发跨天事件(发薪等) |
| 遭遇与刷怪 | 刷怪/清怪/暂停全部路由到遭遇区 session;区外刷怪是 DevTools 专属的伪 session |
| 怪物 | 面板可直接刷五种代表性怪物 |
| 武器与弹药 | 武器开发模式、八格测试弹仓、全船操控均为武器系统调试入口 |
| 元素与状态效果 | 元素按钮绕过命中鉴定直接叠层 |
| 伤害与护甲 | God Mode 在伤害结算入口短路 |
| 船员 | 右键菜单改职级/职业;招募面板注入/解雇/发薪 |
| 修建 | 即时建造跳过施工流程;场景测试大量使用即时建造搭场 |
| 物品与库存 / 物品数据表 | 容器菜单按物品表注入任意物品;信息弹窗显示预约数 |
| 阵营与外交 | DevToolsManager.cs 提供外交行动/申请国籍/设声望的代码调试入口(未接面板按钮) |
| 探索与情报 | F8 面板一键清雾/解锁兴趣点/重置 |
| 任务与工作 | 战备状态改操炮任务优先级层级;场景测试覆盖任务分配/抢占/预约全链路 |
| 配置表总览 | monsters/trading 轴按预设覆盖 CSV 配置 |
配置与调参指南
Section titled “配置与调参指南”| 想调什么 | 改哪里 | 类型 |
|---|---|---|
| 开局环境(金币/船员/建筑/怪物难度/作弊) | Assets/StreamingAssets/Presets/*.json 与 DataSets/{轴}/ 下对应文件;场景里 ScenarioLoader Inspector 勾选预设 |
JSON/CSV 配置,策划可直接改 |
| 新增一套作弊组合 | DataSets/cheats/ 加 JSON(六个布尔键),预设里引用文件名 |
JSON 配置 |
| 测试用怪物/交易数据 | DataSets/monsters/{name}/StaticMonsterConfig.csv、DataSets/trading/{name}/CityInventory.csv(缺文件 = 该表用默认) |
CSV 配置 |
| 面板开关键、刷怪距离字段 | DevToolsManager.cs 序列化字段——但该对象运行时自动创建,Inspector 改动无处保存,实际要改代码默认值 |
代码常量(事实上) |
| 面板速度档位(0.1-10x)、刷怪档位(1/10/50) | DevToolsPanel.cs 的 TimeScales / SpawnCounts 数组 |
代码常量 |
| 元素按钮的半径/持续时间 | 半径:DevToolsManager.cs 的 HitNearbyMonstersWithElement 默认参数 30;持续:StatusTuning.cs 的 DefaultDuration = 4 |
代码常量 |
| 无限金钱数值 | DevToolsManager.cs 的 999999999 |
代码常量 |
| 场景测试选择/加速倍率/过滤名 | 场景里 [ScenarioTestRunner] 对象 Inspector:_enabledTests(多选)、_testTimeScale(范围 1-5)、_remoteFilterNames |
Inspector 序列化字段 |
| 测试环境布局(地板尺寸/建筑摆位/物资量) | ScenarioTestRunner.cs 的 SetupTestEnvironment / SetupProductionEnvironment |
代码常量 |
已知限制与注意事项
Section titled “已知限制与注意事项”- F2 / F8 双重绑定:F2 同时切换“AI 世界 UI”和“招募调试面板”;F8 同时循环战备状态和开关“地图可视度面板”。按一次两件事都发生,目前无互斥处理(
DevToolsManager.cs、RecruitmentDevPanel.cs、DiscoveryRevealDevPanel.cs)。 - BuildingGodMode 不检查阵营:敌方建筑同样无敌;CrewGodMode 依赖阵营 ID 等于 “Player”,阵营未正确初始化的玩家实体不会被保护。
DamageableComponent.cs内有成段 TODO(也记录在项目根 CLAUDE.md 的 Known Issues)。 - 刷怪距离字段无效:
DevToolsManager.cs的“刷怪设置_spawnDistance= 20”序列化字段当前没有任何消费者,实际落点由遭遇 session 的采样规则决定。 - 容器信息弹窗代码注释写“双击”,实际触发是面板开启时右键(与添加物品菜单同时弹出)。
- 正式构建残留:
DevToolsManager与右键菜单逻辑未被条件编译排除,正式构建中按 ` 仍会切换“面板可见”状态并启用右键菜单(仅 IMGUI 主面板与 F8 地图面板被排除编译)。 - 场景测试名是中文枚举,远程过滤必须逐字匹配(如“救援流程”),无模糊匹配。
- 刷怪按钮依赖活跃 session:不在遭遇区且未开“区外刷怪”时 Spawn 静默失败(仅警告日志)。
- 地图可视度面板的 Reset 用了反射清空发现注册表内部集合(开发工具豁免;项目规则禁止游戏运行时逻辑用反射)。
- 无专用性能测试框架:仓库曾出现过的
PerformanceTestRunInfo.json等文件是临时产物,没有对应测试代码与包依赖。 - 薪资测试的发薪间隔读运行时薪资配置(
SalaryIntervalDays),代码注释按 4 天描述,具体值以薪资配置为准。 - 传送系统 MVP(
TeleportSystem_MVP/)是孤立原型,未接入 DevTools 面板。