界面总览
This content is not available in your language yet.
全游戏界面分为两套体系:屏幕面板(UI Toolkit,按七个槽位挂载,由
PanelManager.cs统一调度)与世界空间标签(UGUI,跟随船员/建筑/船只的名牌、血条、气泡、飘字)。本页给出全部面板清单、打开/关闭方式、快捷键、世界 UI 行为规则,以及策划改文案/调数值的具体位置。
游戏 UI 按用途走三种技术栈(项目硬规则,见 .claude/CLAUDE.md):
| 栈 | 用途 | 本页对应章节 |
|---|---|---|
| UI Toolkit | 屏幕面板:HUD、建造栏、各种弹窗 | 槽位框架、面板清单 |
| UGUI(ScreenSpaceOverlay 跟随投影) | 世界标签:船员名牌、建筑血条、气泡、飘字 | 世界空间 UI |
| IMGUI | 开发者工具(不随游戏发布) | 见 开发者工具 |
启动链路(UIBootstrap.cs):游戏场景加载前自动创建常驻根对象 UI.Root,内含两个 UI 文档层——主文档(sortingOrder=0,承载全部槽位)与 Modal 文档(sortingOrder=30,永远盖在主文档之上)。随后从 Resources/Panels/ 一次性实例化全部 17 个面板预制体(PanelRegistry.cs),各面板自注册到 PanelManager。场景内 UIBoot.cs 在启动时拉起 4 个默认界面:TimeBar(时间条)、VictoryHUD(胜利进度按钮)、NavMode(航行模式角标)、ModeBar(底部操作栏)。其余面板按事件/快捷键按需打开。
玩家在一局游戏中的典型接触顺序:开局即见左上角位置面板、右上角时间条、右下角小地图与船只状态、左侧船上物品栏、底部操作栏 → 按 B 开建造栏造建筑 → 点建筑弹容器悬浮窗 → 进港自动弹港口面板 → 点交易/招募/外交打开对应全屏弹窗。
槽位框架(PanelManager 七层)
Section titled “槽位框架(PanelManager 七层)”所有 UI Toolkit 面板必须声明自己属于哪一层(PanelLayer.cs),各层挂载规则不同(PanelManager.cs):
| 槽位 | 挂载规则 | 屏幕位置 | 当前成员 |
|---|---|---|---|
| Top | 叠加(多面板共存) | 顶部条带(高度固定屏幕 5%) | TimeBar、VictoryHUD、NavMode |
| MainLeft | 互斥(同时只挂一个,切换时卸旧挂新) | 屏幕左列 | (当前无成员,默认空) |
| MainRight | 互斥 | 屏幕右列(底部自动预留小地图+船只状态的高度) | Harbor |
| BottomContent | 互斥 | 底部上段 | BuildBar |
| BottomBar | 永驻(挂上后不允许卸载、不允许换) | 底部最下段 | ModeBar |
| Modal | 栈(可叠多层,后开的盖在先开的上面) | 全屏覆盖,独立文档层 | VictoryDetail、Confirm、Crafting、Diplomacy、MainMenu、RankChange、Recruitment、Trading、WorkPriority |
| Floating | 叠加浮窗(不阻塞游戏操作,可拖动) | 全屏覆盖层,z 序高于其它槽位、低于 Modal | CrewManagement、CrewTree |
关键联动规则:
- Modal 打开 → 世界标签 UGUI 隐藏:任意 Modal 入栈时广播“有弹窗打开”信号;挂了
HideOnModal.cs组件的 UGUI Canvas 整体隐藏,全部弹窗关闭后恢复。原因:ScreenSpaceOverlay Canvas 在 Unity 里永远渲染在 UI Toolkit 之上,不隐藏会穿透弹窗(PanelManager.cs注释)。 - 容器层全部透传点击:槽位容器自身不拦截鼠标,3D 世界事件可穿过空白区域;只有面板内声明可点的元素才拦截(
UIBootstrap.cs)。 - 统一的“鼠标是否在 UI 上”判定:
MouseUIGuard.cs同时检查 UGUI 与 UI Toolkit 两栈,世界交互(建造、点击建筑、右键设航点)调用它防止穿透。
另有一批常驻面板不走槽位,直接挂在主文档根上(位置写死、永不被互斥顶掉):ShipInventory(船上物品)、ShipPerformance(船只状态)、MiniMap(小地图)、CurrentLocation(位置面板)、AutoHullSettings(自动船壳)、MenuButton(菜单按钮)、Toast 容器、Zone 提示容器、Respawn(沉船倒计时)、三个鼠标跟随悬浮窗(容器/船员/武器)。
| 按键 | 功能 | 出处 |
|---|---|---|
| Tab | 循环游戏速度(1x → 2x → 5x → 1x,不含暂停档) | TimeBarPanel.cs |
| Space | 暂停 / 恢复 | TimeBarPanel.cs |
| B | 开/关建造栏(BuildBar) | ModeBarHotkeyPresenter.cs |
| V | 开/关胜利条件详情弹窗 | VictoryHUDPanel.cs |
| H | 开/关工作优先级弹窗 | WorkPriorityPresenter.cs |
| M | 小地图 ↔ 全屏战略地图切换(与相机拉远联动) | MiniMapPresenter.cs |
| N | 手动 / 自动航行切换(点击 NavMode 角标等效) | NavModePanel.cs |
| F | 全速前进开关(自动航行中按 F 是中断信号) | FullSpeedAheadController.cs |
| ESC | 开/关游戏菜单(已在地图全屏时优先退出地图) | MenuButtonPresenter.cs、ZoomCamera.cs |
| 右键(海面/小地图) | 设自动航行目标点(替换式) | WorldClickToTarget.cs、MiniMapPresenter.cs |
| Shift+右键 | 追加航点到航线末尾(RTS 排队式) | 同上 |
| Shift+F9 | (仅开发版)预览沉船复活倒计时界面 | RespawnPresenter.cs |
| 左键点建筑 | 弹容器/生产悬浮窗 | ContainerPopupManager.cs |
| 左键点船员 | 弹船员详情悬浮窗 | CrewPopupManager.cs |
| 右键点有人武器 | 弹炮位分配悬浮窗 | WeaponPopupManager.cs |
输入框聚焦时(UGUI 输入框或 UI Toolkit 文本框)B/V 等快捷键被屏蔽,防止打字误触发(ModeBarHotkeyPresenter.cs、VictoryHUDPanel.cs)。
Top 槽位(常驻 HUD)
Section titled “Top 槽位(常驻 HUD)”TimeBar 时间条(TimeBarPanel.cs)
- 看什么:当前游戏时间“第X天 HH:00”(小时粒度)+ 4 档速度按钮(暂停 / 1x / 2x / 5x),当前档高亮。
- 操作:点速度按钮直接设速;Tab 循环(跳过暂停档);Space 暂停。
- 开关:开局常驻,不可关。
VictoryHUD 胜利进度按钮(VictoryHUDPanel.cs)
- 看什么:小按钮显示“已达成 N/4”胜利条件数;4 项全达成时按钮变高亮样式。
- 操作:点击或按 V 打开 VictoryDetail 弹窗。
- 数据:贸易收入 ≥ 50000 金 / 全部国家声望 ≥ 50 / 占领 ≥ 2 城 / 击杀 ≥ 1 Boss(阈值为
VictoryManager.cs代码常量)。详见 游戏循环与胜负。
NavMode 航行模式角标(NavModePanel.cs)
- 看什么:三态指示——“手动” / “自动 →(x,z)目标坐标” / “已中断 [N 恢复]”,不同状态不同配色。
- 操作:点击角标 = 按 N,切换手动/自动。
- 附带:航行事件转 Toast——已抵达(2 秒)、自动航行已暂停(2 秒)、恢复(2 秒)、被阻断关闭(3 秒)、目标不可达(2 秒)、开始航行(2 秒)。详见 寻路与移动。
CurrentLocation 位置面板(CurrentLocationPresenter.cs,不走槽位,左上角固定)
- 看什么:两行。第一行国籍:“国籍: 无国籍”(灰)或“国籍: 某国 ★”(金);第二行当前海域,每 0.5 秒刷新:公海(青)/ 自由港 · 城名(青)/ 国名 · 城名 (友好/中立/敌对)(按关系绿/橙/红染色)/ 未知海域(未发现该国时,灰)/ 国名 · 未知港口(国家已发现但城市未发现)。
- 操作:点国籍行打开外交总览弹窗。
- 关联:城市与国家、探索与情报。
MainLeft 区域(屏幕左侧)
Section titled “MainLeft 区域(屏幕左侧)”MainLeft 槽位当前无互斥成员。左侧的常驻面板均直挂主文档:
ShipInventory 船上物品栏(ShipInventoryPanel.cs,左侧 8px、纵向 33%~67% 区段、宽 240px)
- 看什么:全船存储类建筑容器(输入+输出+存储)聚合后的物品清单,每行 = 图标 + 中文名 + 鲜陈徽章 + ×数量。生产建筑(出现在
ProductionBuildingConfig.csv里的)内的物品不计入——卡在厨房输入端的肉不算“可用资源”。 - 鲜陈徽章:“新鲜”(绿)/“陈旧 -50%”(橙,提示价值减半)。详见 物品与库存。
- 刷新:每 0.2 秒轮询。开局常驻不可关。
AutoHullSettings 自动船壳(AutoHullSettingsPresenter.cs,左上 top=60px、宽 220px)
- 看什么:启用开关 + 默认材质下拉(松木板 / 硬橡木 / 黄铜合金 / 铆接铁板)。
- 开关:进入建造模式自动显示,退出自动隐藏。详见 修建。
MainRight 槽位 + 右下角常驻
Section titled “MainRight 槽位 + 右下角常驻”Harbor 港口面板(HarborPanel.cs + HarborPresenter.cs)
- 开关:玩家船驶入城市触发范围自动弹出,驶出自动关闭;交易开始时让位(隐藏),交易结束若仍在港内自动恢复。无手动开关。
- 看什么:城市名 + 四个按钮:交易 / 修船 / 招募 / 外交。
- 规则:敌对城市禁用交易/修船/招募三按钮(外交始终开放——可在敌对国港口求和);关系实时变化(如停火成功)立即刷新按钮可用性。
- 修船按钮逻辑:有损毁地板时检查金币够不够(不够弹红色飘字“金币不足!需要 N 金币”),修复全部地板并扣费 + 播放金币飞行特效;有积水则排空;两者都没有仅记录“状态良好”。修船费用公式在船体系统,见 船只。
- UXML 按钮文案在
Assets/UI/MainRight/Harbor/HarborPanel.uxml。
HarborBriefing 港口简报(HarborBriefingPresenter.cs,场景内序列化挂载)
- 靠港时收到简报消息弹出:[确定] 新闻列表 + [流言] 列表,点关闭隐藏。面板 UXML 与宿主文档在场景对象 Inspector 上指定。详见 探索与情报。
ShipPerformance 船只状态(ShipPerformancePresenter.cs,右下角、小地图正上方 8px、宽 240px、高约 250px)
- 看什么:总质量(t,建造预览时叠加显示“+X t“质量增量)/ 引擎输出(进度条,满格参考值 24,代码常量)/ 速度上限倍率 x?.?? / 实时速度 m/s / 线加速度 m/s²、角加速度 °/s²(加速绿、减速红、±0.05 死区内灰)/ 浮力百分比(< 30% 红、30%~60% 金、≥ 60% 绿)。
- 开局常驻不可关。详见 船只。
MiniMap 小地图 / 全屏战略地图(MiniMapPresenter.cs,右下角 200×200px,距右 8px、距底 64px)
- 跟随模式(默认):玩家船三角(白,15px)永远居中并随船头旋转,视野半径 200 米(世界单位,代码常量)。显示内容:
- 城市:黄色方块(12px);视野外但距离 ≤ 1000 米时在地图边缘显示黄色指示三角(12px)指向城市方向;未发现的城市完全隐藏。
- 港口:青蓝小方块(7px)+ 港口安全圈(青绿半透明圆,半径 80 米,纯视觉提示,
HarborSafeZoneConstants.cs)。 - 怪物区:红色半透明区域(透明度强制 0.35),圆形或多边形;未发现的区域不显示(战争迷雾联动)。
- 遭遇危险区:红色填充(透明度 0.25),仅已发现的区域。详见 遭遇与刷怪。
- 岛屿:多边形(在怪物区之上)。其它船:灰色三角(10px,敌/中立按标记色)。
- 自动航行:橙色航线折线(2px)+ 拐点圆点 + 红色 X 目标标记。
- 战争迷雾:未探索全黑(不透明)、已探索半透明黑(50%)、当前视野圈全透明;玩家船跨格才重建迷雾贴图。详见 探索与情报。
- 全屏模式(按 M 或相机滚轮拉远到头):以世界中心为中心、letterbox 正方形显示全世界;额外渲染国家领地染色(各国 AreaColor,透明度 0.55,未发现国家不染)、国境线(白 2px)、海岸线(米色 1.5px)、城市名标签。200 毫秒淡入淡出动画。
- 操作:右键 = 设自动航行目标;Shift+右键 = 追加航点;M / ESC / 滚轮拉近退出全屏。
- 数据源:
MiniMapManager.cs(Service 层标记注册表)+MiniMapMarker.cs(挂在世界对象上,类型/颜色/大小为 Inspector 序列化字段)。
MenuButton 菜单按钮(MenuButtonPresenter.cs,右下角 40×40px“≡“按钮)
- 点击或按 ESC 打开 MainMenu 弹窗。
BottomContent / BottomBar 槽位(底部)
Section titled “BottomContent / BottomBar 槽位(底部)”ModeBar 操作栏(ModeBarPanel.cs,永驻不可关)
- 五个按钮:建造(toggle BuildBar)/ 拆除(禁用占位,悬停提示“开发中”)/ 外交(打开外交总览弹窗)/ 船员(toggle 船员管理浮窗)/ 组织树(toggle 组织树浮窗)。
- 按钮高亮跟随对应面板开闭;浮窗类无事件流,用 0.5 秒轮询同步高亮。
- 按钮文案在
Assets/UI/Bottom/ModeBar/ModeBarPanel.uxml。
BuildBar 建造栏(BuildBarPanel.cs)
- 开关:ModeBar 建造按钮 / B 键 / 任意建筑快捷键(自动进建造模式)。打开即令
BuildingController进入建造模式,关闭退出。 - 看什么:7 个分类 Tab(结构 / 门窗楼梯 / 蒸汽链 / 工坊 / 武器 / 储存传输 / 家具,硬编码于
BuildBarCategories.cs)+ 横向卡片网格。再点同一 Tab 折叠卡片区。 - 卡片(88×112px):快捷键角标 + 图标 + 名称 + 尺寸/放置策略 + 造价缩写(“木30 石20”)。悬停弹详情:建造材料 chips、输入→输出配方或作用描述、HP。卡片数据全部来自 CSV(建筑表 / 建造成本表),见 修建 与 配置表总览。
- 选中卡片 → 进入该建筑放置模式;键盘快捷键跨分类选建筑时 Tab 自动跟随切换。
- 详情区四个小节标题文案(“建造材料 / 输入 → 输出 / 作用 / HP”)集中在
BuildBarCardLabels.cs。
Modal 槽位(全屏弹窗,栈式)
Section titled “Modal 槽位(全屏弹窗,栈式)”所有 Modal 共性:盖在一切之上;打开时世界标签 UGUI 隐藏;多数支持点空白区域关闭(Crafting / Trading / Recruitment / WorkPriority 例外——前者点空白不关,防误操作丢队列/挂单)。
VictoryDetail 胜利条件详情(VictoryDetailPanel.cs,V 键或点 VictoryHUD)
- 4 张卡片,每张:图标 + 名称 + 进度条 + 进度文本 + 提示语。
- 贸易大亨:进度 = 累计售出收入 / 50000;未达成提示“还差 N 金。建议跑长途价差航线。”
- 外交家:进度 = (最差国声望 + 100) / (50 + 100)(把 -100~+50 区间映射成 0~1);提示“在港口签贸易协定 (+20),或击败 Boss 时该国声望 +15。”
- 征服者:进度 = 已占城数 / 2;提示“击毁敌国城市的所有防御塔即占领。”
- 屠龙者:0 或 1;提示“Boss 在火山海域游荡。约 10× 普通海怪血量。”
- 点空白处关闭;达成的卡片打“已达成”徽章。
Confirm 通用二次确认(ConfirmModalPanel.cs)
- 标题 + 正文 + 确定/取消两按钮(文案由调用方传入,默认“确定/取消”);点背景 = 取消。供解雇船员等危险操作复用。
Crafting 制造(CraftingPanel.cs + CraftingPresenter.cs)
- 开关:非弹窗状态下左键点击需要船员操作的生产建筑(且有可用配方)自动打开;右上角 X 关闭。
- 左栏配方卡:配方名 + “生产时间s · 工种”(工种中文映射硬编码在
CraftingPanel.cs的 WorkTypeLabel)+ 输入→输出物品 chips + 数量选档(x1 / x5 / x10 / INF 无限)+ 添加按钮。 - 右栏:制造队列(每条可暂停/上移/下移/删除,“清空”全清;显示 完成数/目标数 或 ∞)+ 输入/输出容器实时内容(0.4 秒轮询)。
- 配方数据来自 CSV,见 生产与制作。
Trading 交易(TradingPanel.cs + TradingPresenter.cs)
- 开关:交易系统会话开始自动打开(港口面板点“交易”),X 按钮 = 结束交易自动关闭。
- 左栏商人在售(点击挂购买单)、右栏玩家持有(点击挂出售单);每行:图标 + 名称 + 鲜陈徽章 + 单价@$ + 库存 + 挂单数 + [−][+][组](组 = 一整叠)。
- 陈旧品出售价 = 商人收购价 × 价值系数(陈旧 -50%),原价划线展示。
- 底部预览:“金币 ±N 买 X 件 $A 卖 Y 件 $B” + 重置 + 确认交易(无挂单或校验失败时禁用,失败原因显示在预览处)。每 0.5 秒轮询库存。
- 价格公式见 交易。
Recruitment 招募 / 船员管理(RecruitmentPanel.cs)
- 开关:港口面板点“招募”自动打开(敌对港禁止);X 或确认成功后关闭;关闭时自动清空未确认挂单。
- 顶部摘要:金币 / 船员数 当前/上限(上限来自经济配置 baseCrewCapacity)/ 月薪总额 / 待支出(超过持有金币变红)/ 净月薪变动(增红减绿)。
- 左栏候选:姓名 + 性别/职级/专业 chips + 六维属性摘要(体/耐/气/艺/知/战)+ 月薪 + 签约费 + 招募 toggle。
- 右栏在编:姓名 + 职级/专业 + 月薪 + 解雇遣散费 + 解雇/驱逐双 toggle(解雇付遣散费、驱逐不付,互斥)。
- 底部:重置 + 确认(金币不足或无挂单禁用,提示文案三态)。数值规则见 船员。
Diplomacy 外交(DiplomacyPanel.cs)
- 两种打开模式:港口“外交”按钮(带城市上下文,动作可执行);ModeBar“外交”按钮 / 位置面板国籍行(总览模式,动作区整体隐藏)。点空白处关闭。
- 顶部:已发现国家的声望 chip(国名 + 声望值 + 友好/中立/敌对,国籍国带 ★),点击切换查看对象。
- 中部:国与国关系矩阵(友/中/敌 单字着色格)。
- 底部三动作(仅港口模式):
- 贸易协定 - 5000 金:须在该国港口、可谈判、金币 ≥ 5000。
- 停火协议 - 10000 金:须敌对关系且金币 ≥ 10000。
- 申请国籍(须该国友好)/ 放弃国籍(任意港口)。
- 三按钮的金额门槛为
DiplomacyPanel.cs内联数值;实际扣费与声望变更由城市外交触发器执行,见 阵营与外交。
- 操作结果用鼠标位置飘字反馈(成功绿 / 失败红)。
WorkPriority 工作优先级(WorkPriorityPanel.cs,H 键开关)
- 行 = 船员,列 = 6 个可分配工种(炮术 / 修建 / 烹饪 / 医疗 / 搬运 / 制作;布道与指挥无任务实装被排除,单源清单在
CrewPanelIcons.cs)。 - 格子 = 优先级 0
9:左键 +1(9 再点回 0 禁用),右键 −1(0 再点回 9)。显示规则:0 = “—” 灰;13 黄底;4~6 绿底;≥7 橙底(阈值 4/7/上限 9 为ConsumerPriorityConfig.cs代码常量)。 - 任务分配如何消费优先级见 任务与工作。
RankChange 职级变更(RankChangeModalPanel.cs)
- 由船员抽屉的升职/降职/转岗按钮打开。两步:选目标职级 →(目标为专家时)选专业(木匠/炮手/事务长/军医/牧师)。
- 升职链:水手→专家(需选专业)→军士→船长;降职可跨级;专家→水手会显示警告“进入失意 60 天,效率 -20%”;转岗仅专家可用,副作用“心情 -5 / 3 天”。提交后弹 Toast(2.5 秒)。职级规则详见 船员。
MainMenu 游戏菜单(MainMenuPanel.cs,ESC 或右下角“≡“)
- 半透明遮罩 + “菜单 / 游戏已暂停” + 继续游戏 / 退出游戏。打开时若未暂停则自动暂停,关闭时仅恢复“由菜单暂停”的情况(不覆盖玩家此前手动暂停)。
Floating 槽位(可拖动浮窗,不阻塞游戏)
Section titled “Floating 槽位(可拖动浮窗,不阻塞游戏)”CrewManagement 船员管理(CrewManagementPanel.cs,ModeBar“船员”按钮开关)
- 浮窗(默认宽 440px),首开居中,可拖 header 移动,本次游戏内记住位置;右上 X 关闭。
- 3 个 Tab:概览(警告原因 + 当前任务名)/ 工作(6 工种优先级速览,有优先级但技能为 0 标“无技能”样式)/ 状态(疲劳/饥饿/口渴/排泄/HP 五条横条,需求 ≥ 90 红、≥ 60 黄;HP 反向 ≤ 30% 红、≤ 60% 黄)。
- KPI 条:警告数 / 重伤数(HP ≤ 50%)/ 欠薪数(≥ 1 月)/ 总人数;失能人数 > 0 时出现红色“失能 N” chip,点开失能名单(救援由系统自动派发)。
- 行警告判定(
CrewRowViewModel.cs):失能 → 危险;HP ≤ 30% → 危险;疲劳/饥饿/口渴/排泄 ≥ 90 → 警告;欠薪 ≥ 2 月 → 警告。组内危险行排前。 - 按职级分组(船长→军士→专家→水手),组头可折叠。点行推出右侧抽屉(
CrewDrawerView.cs):状态/心情/属性/技能/回忆 5 个子页 + 7 个操作按钮(升职/降职/转岗/优先级跳转/定位/解雇/驱逐;解雇驱逐有港口门控——必须停靠非敌对港,CrewActionRouter.cs)。 - 整体 1 秒刷新一次。船员属性含义见 船员、船员社交与关系。
CrewTree 组织树(CrewTreePanel.cs,ModeBar“组织树”按钮开关)
- 报告链/子群/关系叠加三种视图 + 搜索框;可缩放平移画布;拖拽船员卡改变汇报关系,改动先入草稿,右上“应用更改 (N)”/“取消”生效或回滚。详见 船员社交与关系。
全屏覆盖(不走 PanelManager)
Section titled “全屏覆盖(不走 PanelManager)”VictoryScreen 胜利结算(VictoryScreen.cs,UGUI,sortingOrder=999)
- 任一胜利条件达成时全屏弹出(黑色 70% 遮罩 + 称号 + 描述),自动暂停游戏,关闭恢复。文案硬编码在该文件 VictoryTexts 字典。
Respawn 沉船倒计时(RespawnPresenter.cs)
- 玩家船沉没时屏幕中央偏上弹出复古风倒计时框:“船 只 沉 没” + 大号秒数 + “金币与物资将随海葬失去”;不拦截世界输入;复活完成自动隐藏。倒计时时长由船体系统决定,见 船只。
世界空间 UI(UGUI 跟随标签)
Section titled “世界空间 UI(UGUI 跟随标签)”所有世界标签挂在专用 WorldLabelCanvas(sortingOrder = −10,永远被面板 UI 遮盖,WorldLabelCanvas.cs)。每帧把目标世界坐标投影到屏幕坐标跟随;目标在相机背后时移出屏幕。AI 船所属的标签统一受“AI 世界 UI 开关”控制显隐(AIWorldUIGateBinding.cs),玩家船所属永远显示。
| 标签 | 跟随对象 | 内容 | 关键数值 | 出处 |
|---|---|---|---|---|
| 船员名牌 | 船员头顶 2.2m | 名字 + 职级/专业色块行 + 当前任务名与进度条(55×5px)+ HP 条(55×4px)+ 对话行 | 任务/HP 每 0.12 秒刷新;HP 条仅受伤时显示;HP ≤ 30% 红、≤ 60% 黄、其余绿(阈值来自 NeedsConfig.cs) |
CrewNameTag.cs |
| 建筑血条 | 建筑头顶 2.4m | 单条 HP 进度条(55×5px) | 仅受损时显示,满血隐藏;0.1 秒刷新 | BuildingHealthTag.cs |
| 建造进度条 | 框架建筑头顶 2.0m | 建造进度(55×5px 绿条) | 0.08 秒刷新 | BuildingProgressBar.cs |
| 锅炉状态 | 锅炉头顶 1.2m | 三条竖排:煤量(琥珀)/ 蒸汽(淡蓝)/ 水(深蓝),50×4px | 0.2 秒刷新 | BoilerStatusTag.cs |
| 引擎状态 | 引擎头顶 1.2m | 三条:动力输出(有动力绿 / 无动力红)/ 蒸汽 / 冷凝水 | 0.2 秒刷新 | EngineStatusTag.cs |
| 水泵状态 | 水泵头顶 | 同类竖条 | — | WaterPumpStatusTag.cs |
| AI 船国籍 | AI 船头顶 6m | 国家色块 + 国名(未注册阵营显示“海盗”+灰) | 仅 AI 船有 | AIShipNationalityTag.cs |
气泡与飘字:
- 世界气泡(
WorldBubbleSystem.cs+WorldBubble.cs):深色底白字气泡,默认显示 5 秒、悬于目标上方 2.2m;同一目标的多条消息自动排队逐条显示;固定坐标模式不排队直接叠加。船员闲聊对白走此系统(CrewDialogueManager.cs,5 秒)。需要场景中手动放置并在 Inspector 绑定 Canvas。 - 社交气泡 + 好感飘字(
SocialBubbleOverlay.cs):船员社交互动开始时双方头顶 2.2m 弹互动类型文字(闲聊/深聊/讲笑话/传八卦/争吵/辱骂,各有配色);结束时头顶 2.5m 飘“±X 好感“数字(正绿负红,1 秒上漂渐隐)。世界空间 TMP 文本,始终面向相机。 - 鼠标位置飘字(
MouseTooltip.cs):操作反馈(“金币不足!”“贸易协定签订成功!“等)在鼠标处弹出,向上飘 50px、1.2 秒淡出、字号 24(均为 Inspector 序列化字段);错误红 / 成功绿 / 警告黄。 - 金币飞行特效(
WorldGoldFlyEffect.cs):修船付费时金币从船飞向城市的 3D 抛物线特效;金币数 = 按金额在 3~15 枚之间线性插值(500 金封顶),飞行 1.2 秒、弧高 8m、生成间隔 0.05 秒(均为 Inspector 序列化字段)。 - 航点光柱(
NavTargetWorldMarker.cs,LineRenderer 世界视觉):每个自动航行航点一根橙色海面光柱,高 40m、底宽 2.5 / 顶宽 0.4,1.5 秒周期呼吸(宽度 0.851.25 倍、透明度 0.450.95);抵达拐点自动消失。
鼠标跟随悬浮窗(UI Toolkit,三者通过 PopupCoordinator.cs 互斥——任一弹出其余自动关闭;均偏移鼠标 (15, 15)px):
- 容器悬浮窗(
ContainerPopupManager.cs,左键点建筑/地面物品):标题 = 建筑名(建造中/已摧毁后缀);按建筑能力自动出现小节——HP 条(≤25% 红、≤50% 橙、其余绿)/ 建造小节(材料%、工作%、缺料清单“待运:…”)/ 占用小节(床厕等:使用中红 / 已预约橙 / 空闲绿)/ 生产小节(配方名 + 进度% + 等原料暂停标识 + 队列数;引擎附动力条、锅炉附煤量条与“燃料告急”)/ 管道小节(断开红 / 空 / 水绿 / 蒸汽橙)/ 物品格子网格(Factorio 风 36px 方格,含空槽,鲜绿/陈橙边框,×数量角标)。0.3 秒刷新,弹出位置固定不跟随。 - 船员悬浮窗(
CrewPopupManager.cs,左键点船员):内容与船员管理面板的抽屉是同一份视图(宽 360px、最高 520px),含全部操作按钮。 - 武器分配悬浮窗(
WeaponPopupManager.cs,右键点有人武器):武器名 + 当前分配状态(已禁用红 / 手动:某人绿 / 自动:某人绿 / 未分配灰)+ [自动][禁用|启用] 按钮 + 全船员列表(标注炮术等级、已分配他处、炮术禁用),点人 = 手动指派,点当前指派人 = 取消转自动。0.5 秒刷新。详见 武器与弹药。
Toast 通知系统
Section titled “Toast 通知系统”右上角竖列通知(ToastManager.cs,时间条正下方 top=56px、右 16px、宽 320px)。规则:上限 5 条,新的插顶部,超限挤掉最旧;每条 = 左侧色条(信息蓝 / 成功绿 / 警告橙 / 危险红)+ 标题 + 可选副文 + X 关闭按钮;Duration > 0 自动消失,Duration = 0 持续显示直到玩家点 X 或触发条件恢复;同类通知(同去重键)只保留最新一条,不堆叠。
| 触发源 | 标题(文案出处) | 类型 | 持续 | 触发/恢复条件 |
|---|---|---|---|---|
ShipBuoyancyToast.cs |
船体进水 | 警告 | 持续 | 浮力状态 安全→进水;恢复安全时撤销并弹“船体稳定”(3 秒) |
| 同上 | 危险:水位 50% / 紧急:水位 75% | 危险 | 持续 | 水位首次跨过 50% / 75% 阈值 |
LowSupplyAlertPresenter.cs |
食物告急 / 淡水告急 | 警告 | 持续 | 全船存储类建筑内食物/淡水总量 < 船员数 × 5(0.5 秒检查一次);副文实时更新“剩余 N”;恢复自动撤销 |
RotAlertPresenter.cs |
明日腐烂 / 物资腐烂 | 警告 | 6 秒 / 5 秒 | 保质期系统按日推送预警与事后清单 |
CrewAlertPresenter.cs |
船员死亡 | 危险 | 6 秒 | 玩家船员死亡(含死因) |
| 同上 | 船员失能 / 船员恢复 | 警告 / 信息 | 5 秒 / 4 秒 | 失能集合 0.5 秒轮询 diff(累倒/饿晕/渴晕/重伤) |
CaptaincyToast.cs |
船长缺岗(“船速 ×0.5”)/ 船长到岗 | 危险 / 成功 | 5 秒 / 默认 | 船长在岗状态变化;开局缺岗立即提示 |
ZoneToastPresenter.cs(屏幕顶部中央独立容器,非右上角) |
进入海域 — X / 已离开 — X | 黄 / 灰 | 3 秒 / 2 秒 | 玩家船进出遭遇海域 |
NavModePanel.cs |
航行状态系列(见 Top 槽位) | 信息/警告 | 2~3 秒 | 自动航行事件 |
RankChangeModalPanel.cs |
升降职/转岗结果 | 各 | 2.5 秒 | 职级变更提交 |
公式与数值(集中表格)
Section titled “公式与数值(集中表格)”下表为 UI 层自身的关键数值。除注明 Inspector 外全部是代码常量(改动需程序协助)。
| 项 | 值 | 单位 | 出处 |
|---|---|---|---|
| 游戏速度档位 | 0(暂停)/ 1 / 2 / 5 | 倍速 | TimeBarPanel.cs |
| Top 槽高度 | 屏幕 5% | — | UIBootstrap.cs |
| Toast 上限 / 宽度 | 5 条 / 320px | — | ToastManager.cs |
| 低物资告警阈值 | 船员数 × 5 | 件 | LowSupplyAlertPresenter.cs |
| 船上物品栏刷新 | 0.2 | 秒 | ShipInventoryPanel.cs |
| 船员管理刷新 | 1 | 秒 | CrewManagementPanel.cs |
| 容器悬浮窗刷新 | 0.3 | 秒 | ContainerPopupManager.cs |
| 交易/武器悬浮窗刷新 | 0.5 | 秒 | TradingPanel.cs、WeaponPopupManager.cs |
| 制造容器刷新 | 0.4 | 秒 | CraftingPanel.cs |
| 位置面板刷新 | 0.5 | 秒 | CurrentLocationPresenter.cs |
| 船员名牌任务/HP 刷新 | 0.12 | 秒 | CrewNameTag.cs |
| 小地图视野半径(跟随) | 200 | 米 | MiniMapPresenter.cs |
| 小地图尺寸 / 位置 | 200×200,右 8 / 底 64 | px | MiniMapPresenter.cs |
| 城市边缘指示最大距离 | 1000 | 米 | MiniMapPresenter.cs |
| 港口安全圈半径 | 80 | 米 | HarborSafeZoneConstants.cs |
| 全屏地图淡入淡出 | 200 | 毫秒 | MiniMapPresenter.cs |
| 世界气泡默认时长 / 高度 | 5 秒 / 2.2m | — | WorldBubbleSystem.cs |
| 船员对白时长 | 5 | 秒 | CrewDialogueManager.cs |
| 好感飘字时长 | 1 | 秒 | SocialBubbleOverlay.cs |
| 鼠标飘字:上飘 / 时长 / 字号 | 50px / 1.2 秒 / 24 | Inspector | MouseTooltip.cs |
| 金币飞行:枚数 / 时长 / 弧高 | 3~15(500 金封顶)/ 1.2 秒 / 8m | Inspector | WorldGoldFlyEffect.cs |
| HP 显示阈值(船员/建筑悬浮窗共用) | 危险 ≤ 30%,警告 ≤ 60% | 百分比 | NeedsConfig.cs |
| 船员行警告:需求阈值 / 欠薪 | ≥ 90 / ≥ 2 月 | 点 / 月 | CrewRowViewModel.cs |
| KPI 重伤判定 | HP ≤ 50% | 百分比 | CrewManagementPanel.cs |
| 工作优先级范围 / 色阶 | 0 |
级 | ConsumerPriorityConfig.cs、WorkPriorityPanel.cs |
| 制造数量选档 | 1 / 5 / 10 / 无限 | 次 | CraftingPanel.cs |
| 外交按钮金额门槛 | 贸易协定 5000,停火 10000 | 金 | DiplomacyPanel.cs |
| 胜利阈值(HUD 显示用) | 50000 金 / 声望 50 / 2 城 / 1 Boss | — | VictoryManager.cs |
| 引擎输出条满格参考 | 24 | 动力 | ShipPerformancePresenter.cs |
| 浮力条变色 | < 30% 红,< 60% 金 | 百分比 | ShipPerformancePresenter.cs |
| 加速度显示死区 | ±0.05 | m/s² | ShipPerformancePresenter.cs |
| 水位告警阈值 | 50% / 75% | 百分比 | ShipBuoyancyToast.cs |
| 航点光柱:高 / 呼吸周期 | 40m / 1.5 秒 | — | NavTargetWorldMarker.cs |
与其他系统的交互
Section titled “与其他系统的交互”- 建造栏卡片/造价/悬浮详情 → 修建、建筑、配置表总览
- 制造弹窗配方/队列 → 生产与制作
- 交易弹窗价格/鲜陈折扣 → 交易、物品与库存
- 招募/船员管理/职级变更/工作优先级 → 船员、任务与工作
- 组织树/社交气泡 → 船员社交与关系
- 外交弹窗/位置面板关系染色 → 阵营与外交、城市与国家
- 小地图迷雾/发现门控 → 探索与情报、岛屿与陆地、遭遇与刷怪
- 武器分配悬浮窗 → 武器与弹药
- 船只状态面板/浮力告警/沉船倒计时 → 船只
- 时间条 → 时间与调度
- 航行模式/航点 → 寻路与移动
- 胜利 HUD/详情/结算 → 游戏循环与胜负
- 开发者面板(IMGUI,Shift+F2 等) → 开发者工具
配置与调参指南
Section titled “配置与调参指南”改按钮/静态文案(策划可直接改,无需程序)——14 个面板用 UXML 声明静态文本,路径 Assets/UI/{槽位}/{面板}/{面板}.uxml:ModeBar 五按钮、Harbor 四按钮、TimeBar、NavMode、VictoryHUD/Detail、Confirm、Diplomacy、RankChange、CrewManagement、CrewTree、BuildBar、HarborBriefing、CrewDrawer。改后无需重新生成代码。
改动态文案(需改 C#,但都是集中字面量):
| 文案 | 文件 |
|---|---|
| 建造栏小节标题(建造材料/输入→输出/作用/HP) | BuildBarCardLabels.cs |
| 建筑层中文名(地板/设施/管道/照明) | BuildingLayerLabels.cs |
| 任务中文名(进食/搬运/操炮…)与工种长名 | CrewPanelIcons.cs |
| 制造弹窗工种标签 | CraftingPanel.cs(WorkTypeLabel) |
| 胜利卡片名称/描述/提示语 | VictoryDetailPanel.cs(Cards 数组)、VictoryScreen.cs(VictoryTexts) |
| 全部 Toast 标题与副文 | 各 Presenter:ShipBuoyancyToast.cs、LowSupplyAlertPresenter.cs、RotAlertPresenter.cs、CrewAlertPresenter.cs、CaptaincyToast.cs、ZoneToastPresenter.cs、NavModePanel.cs |
| 位置面板/外交关系词(友好/中立/敌对/公海/未知海域) | CurrentLocationPresenter.cs、DiplomacyPanel.cs |
| 自动船壳材质名 | AutoHullSettingsPresenter.cs(Materials 数组) |
物品/建筑显示名不在 UI 层:来自 CSV 配置表(策划可直接改),见 物品数据表、配置表总览。
图标:按约定路径放 PNG 即自动生效(IconRegistry.cs)——建筑 Resources/UI/Icons/Buildings/{建筑名}.png、物品 Resources/UI/Icons/Items/{物品ID}.png;找不到时回退占位样式。
常见调参对照:
| 想调的体验 | 改哪里 | 来源类型 |
|---|---|---|
| 建造栏分类与排序 | BuildBarCategories.cs 硬编码数组 |
代码常量 |
| 低物资告警灵敏度(人均 5 件) | LowSupplyAlertPresenter.cs PerCrewMultiplier |
代码常量 |
| 小地图视野/尺寸/各图标大小颜色 | MiniMapPresenter.cs 顶部常量区 |
代码常量 |
| 单个世界标记的颜色/大小/是否显示 | 对应 prefab 上 MiniMapMarker.cs 组件字段 |
Inspector |
| 金币飞行观感 | 场景 WorldGoldFlyEffect 对象字段 | Inspector |
| 鼠标飘字观感 | 场景 MouseTooltip 对象字段 | Inspector |
| Toast 上限/位置 | ToastManager.cs 常量 |
代码常量 |
| 新增/删除一个屏幕面板 | Resources/Panels/ 增删 prefab(挂 PanelBase 子类)即自动注册 |
prefab |
| 外交协议金额 | DiplomacyPanel.cs(UI 门槛)+ 城市外交触发器(实际扣费),两处需同步 |
代码常量 |
已知限制与注意事项
Section titled “已知限制与注意事项”- 项目说明文档与实现有出入:
.claude/CLAUDE.md把 VictoryDetail 归在 MainLeft 槽,实际它是 Modal 层(VictoryDetailPanel.csLayer=Modal,文件仍放在 MainLeft 目录);文档列举的 ReputationHUD 已删除(声望并入外交弹窗)、GoldCounter 不存在(金币只在交易/招募弹窗内显示)、BuildDetail 无独立面板(并入 BuildBar 悬停详情)。 - 拆除按钮是占位:ModeBar 的“拆除”按钮永久禁用,悬停提示“开发中”(
ModeBarPanel.cs)。 - MainLeft 槽位长期空置:船上物品栏特意不走槽位(避免被互斥顶掉),槽位机制保留但当前无消费者。
- 旧版港口面板是自毁桩:
Service/CitySystem/UI/HarborPanel.cs已废弃,Awake 即销毁自身 GameObject,仅为兼容场景里残留的旧 prefab 引用;功能全部在 UI Toolkit 版Core/UI/MainRight/Harbor/HarborPanel.cs。 - MiniMapManager 的相机/RenderTexture 是旧渲染路径残留:新版小地图为自绘图标,不消费 RenderTexture,但
MiniMapManager.cs仍默认自动创建小地图相机(Inspector 字段 _autoCreateCamera)。 - 容器悬浮窗管道小节不显示流量:管道段的流量字段始终为 0(流体网络走端点不写管段),UI 刻意只显示占用流体类型(
ContainerPopupManager.cs注释)。 - 布道/指挥工种在所有 UI 中被排除:无对应任务实装(
CrewPanelIcons.cs)。 - ModeBar 浮窗高亮是 0.5 秒轮询:船员/组织树按钮的激活态最多延迟半秒。
- 船员管理面板注释写“4 Tab (概览/工作/驻守/状态)”,实际只有 3 个 Tab(无“驻守”,
CrewManagementPanel.cs)。 - 世界气泡系统需场景手动放置:
WorldBubbleSystem.cs不自动创建,且 Inspector 必须绑定 Canvas,缺失时船员对白气泡静默失效。 WorldSpaceTextUI.cs仅编辑器 Scene 视图可见,不是玩家可见 UI。- 外交金额双处维护:弹窗按钮上的 5000/10000 金是 UI 端写死的门槛与展示文案,实际扣费逻辑在城市外交触发器内,两处数值需人工保持一致。