You are viewing a potentially older version of this package. View all versions.
miaomiaodouyin-HoverCoord-1.6.0 icon

HoverCoord

悬停建筑显示经纬度与蓝图格坐标 X/Y/Z(作者:妙妙在路上 抖音@妙妙在路上)。开关快捷键【ctrl+shift+k】【默认开启】。 Hover a building to show its latitude/longitude and blueprint grid coordinates X/Y/Z (Author: 妙妙在路上, Douyin @妙妙在路上). Hotkey: Ctrl+Shift+K, enabled by default.

Date uploaded 6 days ago
Version 1.6.0
Download link miaomiaodouyin-HoverCoord-1.6.0.zip
Downloads 10
Dependency string miaomiaodouyin-HoverCoord-1.6.0

This mod requires the following mods to function

xiaoye97-BepInEx-5.4.17 icon
xiaoye97-BepInEx

BepInEx5.4.17 mod plugin framework, Mod框架

Preferred version: 5.4.17

README

HoverCoord — 指针建筑坐标显示

模组作者:妙妙在路上 抖音 @妙妙在路上

悬停建筑显示经纬度与蓝图格坐标 X/Y/Z(作者:妙妙在路上 抖音@妙妙在路上)。开关快捷键【ctrl+shift+k】【默认开启】。

鼠标停在建筑上就显示,移开就消失;不改变游戏原有操作,不发送额外物理射线,不与任何建造/蓝图模组冲突。


功能

  • 悬停即显示:不需要点击建筑,指针停在建筑模型上就会在指针旁弹出坐标。
  • 经纬度:纬度、经度保留 4 位小数。
  • 格坐标 X / Y / Z:与游戏蓝图数据同一套换算,X / Y 是“格”,Z 是“高度层”。
  • 开关:Ctrl + Shift + K,切换时指针旁有 1.2 秒提示;默认开启。
  • 智能隐藏:指针在空地、UI、菜单、暂停、窗口失焦时自动隐藏,不会挡视线。
  • 边缘翻转:靠近屏幕边缘时提示框自动翻到指针另一侧,不会出屏。

安装

需要 BepInEx 5.4.17(x64)。

方式一:r2modman / Thunderstore Mod Manager(推荐)

  1. 打开 r2modman,选择 Dyson Sphere Program。
  2. 在 Online 页搜索 HoverCoord,点 Install with Mod Manager;或下载 HoverCoord-1.6.0.zip 后点 Import local mod 导入。
  3. 确认安装到当前使用的 profile,然后从该 profile 启动游戏。
  4. 启动后 BepInEx 控制台(BepInEx/LogOutput.log)会出现: HoverCoord 1.6.0 loaded. Author: 妙妙在路上 (抖音@妙妙在路上)

方式二:手动安装

把 HoverCoord.dll 放到:

Dyson Sphere Program\BepInEx\plugins\HoverCoord.dll

如果是 r2modman 用户,请放到对应 profile 的 BepInEx/plugins/ 目录,并用该 profile 启动游戏,否则模组不会加载。

使用方法

  1. 进入游戏,降落到行星表面。
  2. 把鼠标停在任意建筑上(传送带、熔炉、制造台、物流塔等都可以)。
  3. 指针右下角出现坐标框:
装配机 Mk.I #123
经度 -45.3600°    纬度 12.2400°
X -126.0000    Y 34.0000    Z 0.0000
  1. 按 Ctrl + Shift + K 可以随时关闭/开启。

性能

v1.6.0 使用经过验证的 IMGUI 绘制方式(与 v1.4.x 相同),并保留以下优化:

优化 说明
独立的渲染组件 没有悬停目标时渲染组件直接禁用,游戏不会为它处理任何 IMGUI 事件,空闲时零开销
字体懒创建 字体只在第一次悬停建筑、真正要画提示框时才创建,不拖慢启动和行星加载
检测 0.75 秒一次 每 0.75 秒才检测一次鼠标下的建筑,其余帧不做坐标计算
重建限流 10Hz 文字重建最多约 10 次/秒
单次绘制 背景 + 一行文字,无阴影层;CalcSize 只在文字变化时调用
零每帧分配 稳定悬停时没有字符串 / 数组分配;建筑名按 protoId 缓存;StringBuilder 复用

提示:检测为 0.75 秒一次,所以悬停建筑后最慢约 0.75 秒出现坐标,移开建筑后最慢约 0.75 秒消失。

坐标说明

经纬度

  • 纬度:asin(y),北极为 +90°,南极为 -90°。
  • 经度:atan2(x, -z),-Z 方向为 0°,+X 方向为 +90°,范围 -180°~+180°。

X / Y / Z(格坐标)

和游戏蓝图(Blueprint)数据完全一致,用的是游戏自己的换算函数:

量 含义 单位
X 经度方向格数,0° 经线为 0,向东为正 格,每格 = 360 /(该纬度圈经度格数)°
Y 纬度方向格数,赤道为 0,向北为正 格,每格 = 0.36°(半径 200 时 1.2566 m)
Z 高度层数,贴地面层为 0,每升高一层 +1 层,每层 = 1.3333 高度

计算公式(与游戏内部一致):

Y = latRad / (2π / (segment × 5))        // segment = 200 → 每格 0.36°
X = lonRad / (2π / (latitudeSegmentCount × 5))
Z = (|pos| − realRadius − 0.2) / 1.3333

对应:

  • BlueprintUtils.GetLatitudeGridIdx()
  • BlueprintUtils.GetLongitudeGridIdx()
  • 蓝图 localOffset_z 的原始算法

自检

  • 从赤道向北走 1 格:Y 从 0.0000 → 1.0000。
  • 赤道沿经度向东走 1 格:X 从 0.0000 → 1.0000。
  • 贴地面建筑:Z = 0.0000;抬高一层:Z = 1.0000,再一层 2.0000。
  • 建筑都吸附在格子上,因此正常建筑的 X / Y / Z 基本都是整数(浮点误差 ±0.0001 以内)。

符号与范围

  • Y:约 ±250(南北极),赤道为 0,北正南负。
  • X:约 ±(该纬度圈格数 / 2),0° 经线为 0,东正西负;越过 180° 会跳到另一侧的负值(和 ±180° 经度一致)。
  • Z:地面层 0,往上为正,往下(坑)为负。

兼容性

  • 游戏:Dyson Sphere Program(Unity 2018.4,编译自本机当前安装的 Assembly-CSharp.dll)。
  • BepInEx:5.4.17(x64,即 r2modman 里的 xiaoye97-BepInEx 包)。
  • 与常见模组(Nebula 联机、LDBTool、蓝图类模组等)无冲突;联机时仅本地显示,不参与同步。
  • 只读游戏数据,不修改存档、不改变建筑。

已知问题 / 排查

  • 没有显示:确认 BepInEx 已加载(BepInEx/LogOutput.log 有 HoverCoord 1.6.0 loaded),并确认你是用装了模组的 r2modman profile 启动游戏。
  • 快捷键无效:输入法/键盘占用时可能收不到 K,切换到英文输入法再试。
  • 游戏更新后失效:需要按新版 Assembly-CSharp.dll 重新编译(源码与 build.ps1 已附带)。
  • 悬停矿脉、植被、空地时不会显示(只显示工厂建筑实体)。

更新日志

见包内的 CHANGELOG.md(Thunderstore 页面的 Changelog 标签页)。

作者

妙妙在路上 — 抖音 @妙妙在路上

如果这个模组帮到了你,欢迎在抖音点个关注;有问题或建议可以留言。


English summary

HoverCoord by 妙妙在路上 (Douyin @妙妙在路上).

Hover a building to show its latitude/longitude and blueprint grid coordinates X/Y/Z (Author: 妙妙在路上, Douyin @妙妙在路上). Hotkey: Ctrl+Shift+K, enabled by default.

Details: the tooltip shows X/Y in 0.36° grid cells and Z in 1.3333 height layers, with 4 decimals, next to the cursor.

  • Coordinates come from the game's own blueprint helpers (BlueprintUtils.GetLatitudeGridIdx/GetLongitudeGridIdx, localOffset_z), so they match blueprint data exactly.
  • No clicking required: the hovered building is read from the game's own raycast (PlanetPhysics.raycastLogic), no extra physics casts, no Harmony patches.
  • Performance (v1.6.0): the IMGUI renderer component is disabled while nothing is hovered (zero idle cost); the font is created lazily on the first tooltip draw, so game loading is not affected; hover detection runs every 0.75 s; text size is measured only when the text changes; no per-frame allocations.
  • v1.6.0 uses the proven IMGUI label rendering (no uGUI Text, no pre-rendered texture), with hover detection every 0.75 s and zero idle cost.

CHANGELOG

更新日志

1.10.11

  • 修复大型建筑(量子化工厂等)X/Y 轴显示 0.0000 的问题:
    • 行带 / 列带判定改回双方半宽之和,大型建筑的正列邻居能正确计入;
    • 碰撞盒重叠时显示负值(例如 -0.30格 表示两碰撞盒重叠约 0.38 米),不再粗暴截成 0。
  • 移除全部 [dbg] 诊断日志。

1.10.7

  • X轴 / Y轴 距离统一扣除 0.005 格冗余量(例如 0.6923 → 0.6873),最低显示 0.0000。
  • 其余口径不变(纯网格:格数差 × 本纬度格宽 − 碰撞盒宽度)。

1.10.6

  • 改为纯网格口径(与手算公式完全一致,不受地形高度影响):
    • 中心距 = 网格格数差 × 本纬度圈格宽(名义半径 realRadius = 200);
    • X 轴间隙 = |经度格差| × 经度格宽 − 双方碰撞盒经度向宽度,再 ÷ 名义格宽(1.2566)换算成格;
    • Y 轴间隙 = |纬度格差| × 纬度格宽(1.2566)− 双方碰撞盒纬度向宽度,再 ÷ 1.2566。
    • 示例(3 格间距):纬度 12.0° 时 X = 0.6267格;纬度 12.6° 时 X = 0.6200格;Y 恒为 0.6923格。

1.10.5

  • 回退 v1.10.4 的模型包围盒口径(desc.mesh.bounds 对电弧熔炉只覆盖炉体 2.0×1.0 米, 不是整栋模型,导致 X/Y 数值严重偏大)。
  • 恢复 v1.10.3 口径:锚点中心距变换到自身建筑坐标系 + 碰撞盒投影宽度。 3 格间距:X = 0.6246格(与用户确认值一致)。

1.10.4

  • 按用户要求把宽度口径切换为可见模型包围盒(模型网格 bounds): 两台建筑的可见模型贴住时,「最近模型碰撞距离」精确显示 0.0000格。
  • 中心距仍用建筑锚点(网格位置)在自身建筑坐标系下的线性偏移。
  • 标准间距的数值会比碰撞盒口径略小(差值 = 模型比碰撞盒宽出的尺寸,电弧熔炉约 0.014 格)。

1.10.3

  • 距离算法确定为 建筑锚点中心距 + 碰撞盒投影宽度(v1.10.1 的线性算法),X 轴与游戏引擎数据一致。
  • 修复 v1.10.2 的 Y 轴偏大:碰撞盒中心比锚点高 1.6 米,相邻格子朝向差约 1.5°, 用盒中心会多算 3~4 厘米(0.7191 而正确约 0.689);已改回锚点。
  • 对齐后仍显示约 0.014 格说明:可见模型比碰撞盒宽约 1.8 厘米,按模型贴住对齐时 碰撞盒本身还差 0.018 米,这是模型与碰撞盒的固有差,不是计算错误。

1.10.2

  • 修复分轴距离的算法错误:v1.10.1 用建筑锚点之间的距离减去碰撞盒半宽, 而碰撞盒中心相对锚点有约 2 厘米偏移(两栋朝向略有不同的建筑之间不会抵消), 导致对齐后仍残留 0.0144 / 0.0058 格。
  • 现在全部统一为碰撞盒中心 + 碰撞盒坐标系:两碰撞盒表面贴合时精确显示 0.0000格。
  • 实测校验(真实游戏数据):两台间隔 3 格的电弧熔炉,盒中心距 3.7596 米, 减去两侧半宽 2.9 米 = 0.8596 米 = 0.6841格(旧版锚点法错报 0.6602格)。

1.10.1

  • 分轴间隙改为精确线性计算:把对方锚点位置变换到自身建筑坐标系(x = 经度向,z = 纬度向), 直接取线性偏移,消除球面弧长近似与两建筑地形高度差带来的厘米级偏差。
  • 对方碰撞盒宽度按其真实朝向在自身坐标轴上的投影精确计算(含 45° 等旋转碰撞盒)。
  • 实测效果:对齐后归零更干净(残差从 0.0144/0.0058 格降到 0),标准间距数值与实际一致。

1.10.0

  • 修复分轴距离"永远 0.0000"的根本原因:v1.9.3/v1.9.4 把两建筑的中心距向量归一化了, 导致后续所有投影都是 0~1 的余弦值,减去碰撞盒宽度后必然为负、全部被截成 0。
  • 新算法与 X/Y 坐标完全同一口径(网格弧长):经度向间隙 = |经度差| × 本纬度圈每格弧长 − 双方碰撞盒经度向宽度;纬度向同理。
  • 实测校验:两台贴着摆放的电弧熔炉(间隔 1 格,X 差 3 格)= 0.6596格,与理论值 0.6597 一致。

1.9.4

  • 修复 X轴 / Y轴 间隙全部显示 0.0000 的问题:正北 / 正东等垂直方向对齐的建筑(沿该轴偏移为 0)会把另一轴的间隙错误清零。
  • 现在每个轴只统计位于该方向延长带内的建筑(横向投影与本体重叠的正对建筑);某方向没有正对建筑时显示「无」。
  • 间隙计算公式本身未改动(沿轴中心距 − 双方碰撞盒在该轴的宽度)。

1.9.3

  • 「最近模型碰撞距离」分轴显示:分别显示 X轴 与 Y轴 方向上的碰撞盒表面间隙(沿该轴的中心距减去双方碰撞盒在该轴的宽度),取附近建筑中的最小值。
  • 传送带与爪子依旧不参与探测。

1.9.2

  • 传送带与分拣器(爪子)不再参与「最近模型碰撞距离」探测:建筑之间的最近距离只考虑建筑。
  • 传送带与爪子自身的模型体积显示不受影响(悬停它们仍正常显示)。

1.9.1

  • 恢复提示框中的经纬度显示。
  • 计算算法完整恢复到 v1.8.1 原版(ObbDistance 角点-表面 3D 距离):移除 1.9.0 的面向面投影算法与 1.8.6 的水平分量修正。
  • 保留当前显示文本(当前模型体积 / 最近模型碰撞距离)与高塔数据(最小间距 + 最近同类中心)。

1.9.0

  • 「最近模型碰撞距离」改为面向面间隙:沿两模型中心连线量取,减去两碰撞盒在该连线方向上的投影宽度。
    • 修复原"角点-表面采样"算法在相邻建筑存在微小朝向差(星球曲率,相邻建筑约 0.5°)时低估间隙的问题(例如两台贴着摆放的电弧熔炉显示 0.6505格,实际约 0.685格);
    • 数值含义:两模型之间能塞入的间隙宽度,与游戏内模型碰撞的直观间隙一致;
    • 仍然只统计 60 单位内的近邻,包含蓝图预建造。

1.8.9

  • 修复「最近模型碰撞距离」多开一次平方根的 bug:ObbDistance 返回的已是最终距离,显示时又执行了一次 Mathf.Sqrt,导致实际 0.6505格 显示成 0.7195格。
  • 修复后两台相邻电弧熔炉(贴着摆放)正确显示 0.6505格。

1.8.8

  • 正式版:移除 1.8.7 诊断版的 [debug] 日志输出。
  • 边缘距离算法经实测数据核对无误(实测两台电弧熔炉:水平间隙 0.8175 米 = 0.6505格,与实际摆放间隙一致)。

1.8.7(诊断版)

  • 悬停建筑时向日志输出碰撞盒原始数据([debug] 行)。

1.8.6

  • 修复「最近模型碰撞距离」偏大的问题:之前算的是两碰撞盒的 3D 直线间隙,会把两栋建筑所在位置的地形高度差也算进去;现在只取水平分量(DSP 不能垂直堆叠建筑,碰撞间隙只看水平方向)。

1.8.5

  • 补回风力涡轮机的独立高塔分类:悬停风力涡轮机时显示「风力涡轮机 最小间距 8.3534格(原版 10.5 单位)+ 最近同类中心」。

1.8.4

  • 新增配置文件 BepInEx/config/dsh.hovercoord.cfg:可修改开关快捷键和默认开关状态(首次启动自动生成)。
  • 默认状态由【默认开启】改为【默认关闭】,进游戏后按 Ctrl+Shift+K 打开。
  • 模组说明开头更新,注明快捷键与默认关闭。

1.8.3

  • 提示框移除经纬度行。
  • 「最近模型碰撞距离 边缘」→「最近模型碰撞距离」(保留数据,去掉"边缘"两字)。
  • 模组说明开头重写为:模组作者:妙妙在路上 抖音@妙妙在路上 悬停建筑显示当前建筑X/Y/Z轴数据,显示当前建筑模型体积,显示最近建筑模型碰撞距离,同类高塔建筑(如风电,物流塔等)显示最近碰撞距离。

1.8.2

  • 基于 v1.8.1 的算法状态重建(碰撞盒边缘距离 ObbDistance)。
  • 显示文本调整:「碰撞」→「当前模型体积」;「最近建筑」→「最近模型碰撞距离」。
  • 最近建筑只保留边缘数据(60 单位内的碰撞盒表面最小距离),中心距离不再显示。
  • 保留高塔「最小间距 + 最近同类中心」数据。

1.16.0

  • 距离算法重做:「X轴最近建筑 / Y轴最近建筑 / 最近建筑 中心」改为按两建筑经纬格坐标差直接计算(不再用 3D 弦长 ÷ 标准格尺寸)。
    • 修复高纬度或沿经度方向摆放时距离不准的问题:例如纬度 37° 处沿经度方向隔 4 格摆放的两台制造台,之前显示 3.9928格,现在正确显示 4.0000格;
    • X轴最近建筑 = 经度方向格差最小值;Y轴最近建筑 = 纬度方向格差最小值;最近建筑 中心 = √(ΔX² + ΔY²);
    • 格子对齐的建筑永远显示精确整数格,与蓝图数据口径一致。

1.15.0

  • 「X轴 / Y轴最近建筑」升级为四向最近建筑:分别显示 西 / 东 / 北 / 南 四个方向上最近建筑的距离(格)。
    • 方向判定:只统计大致位于该方向延长线上的建筑(横向偏差 ≤ 本体碰撞盒尺寸一半),斜方向建筑不会误判;
    • 某方向没有建筑时显示「无」,不再显示误导性的 0.0000;
    • 统计范围:60 单位(约 48 格)内的近邻建筑(含蓝图预建造)。

1.14.1

  • 修复 X轴 / Y轴最近建筑显示 0.0000 的问题:之前遍历的是全星球建筑,只要远端有建筑恰好与当前建筑同经线或同纬线,距离就会被算成 0。
  • 现在X轴 / Y轴最近建筑只统计 60 单位(约 48 格)范围内的近邻建筑,反映身边真实的间距。

1.14.0

  • 修复「最近建筑 中心」的计算口径:改为按格网格直接计算(√(ΔX² + ΔY²),ΔX/ΔY 为两建筑经纬格坐标差)。
    • 之前用 3D 直线弦长 ÷ 标准格尺寸,在高纬度或沿经度方向摆放时会因经度圈收缩出现 3.9928 这类小数误差;
    • 现在格子对齐的建筑永远显示精确值:相邻 3 格就是 3.0000,隔 1 格就是 4.0000。
  • 高塔「最近同类中心」同样改为网格间距口径,与原版「相隔太近」阈值(电力 2.7853格 / 行星物流 11.9366格 / 星际物流 23.0775格)可直接比较。

1.13.0

  • CPU 再度大幅优化:
    • 新增全厂建筑静态缓存:每栋建筑的经纬格坐标、电力/物流高塔分类只计算一次并缓存(建筑不会移动、类型不会变),之后每次扫描只做字典查找与数值比较。大工厂(上万个建筑)下扫描成本从最高约 40ms 的尖峰降到 1ms 以内,鼠标扫过一排建筑时不再有周期性卡顿;
    • 缓存按建筑 id + 位置 + 物种校验,拆除/重建的建筑会自动重新计算,换行星时自动清空;
    • 提示框背景与文字合并为一次 GUI.Label 调用(背景挂在 GUIStyle 上),可见时每帧绘制调用减半。
  • 功能与 1.12.0 完全相同(模型体积、最近建筑、X轴/Y轴最近、高塔最小间距)。

1.12.0

  • 提示框文案调整:「碰撞 长 / 宽 / 高」改为「模型体积 长 / 宽 / 高」。
  • 模组说明全面重写,保留作者信息(妙妙在路上,抖音 @妙妙在路上)与快捷键提示(Ctrl+Shift+K,默认开启),准备上架 Thunderstore(r2modman 在线库)。

1.11.0

  • 新增风力涡轮机专属最近距离:悬停风力涡轮机时,显示与最近一栋其它风力涡轮机的中心距离(格)。
  • 风力涡轮机独立分类:原版 WindTooClose 对风力发电机有专属的更大间距要求——中心距离 10.5 单位 = 8.3534格,不再与其它电力设施共用 3.5 的阈值。
  • 高塔名单新增:风力涡轮机。

1.10.1

  • 修复:X轴 / Y轴最近建筑计算时 segment 参数被误传为 0,导致数值异常的问题。
  • 「最近建筑中心 / X轴 / Y轴 / 高塔间距」的统计范围现在包含蓝图预建造(Prebuild),与原版「相隔太近」判定完全一致。

1.10.0

  • 高塔间距数据修正:按游戏反编译的原始判定逻辑重做(BuildTool_Click.CheckBuildConditions):
    • 电力设施(感应塔/无线输电塔/卫星配电站)之间:中心距离 3.5 单位(2.7853格) 以内提示「电力设施相隔太近」;
    • 星际物流塔与任意物流塔之间:中心距离 29 单位(23.0775格) 以内提示「运输站相隔太近」;
    • 行星物流塔之间:中心距离 15 单位(11.9366格) 以内提示「运输站相隔太近」;
    • 电磁轨道弹射器:7.2 单位 + 自身碰撞盒水平半径。
  • 提示框新增「电力设施/星际物流/行星物流 最小间距 X格」与「最近同类中心 Y格」,可直接算出还需偏移多少格才能通过判定。
  • 旧版按碰撞盒边缘计算的高塔距离已移除(与游戏实际判定不一致)。

1.9.0

  • 边缘距离改为分方向显示:新增「X轴最近建筑」「Y轴最近建筑」(按格坐标差计算,单位格)。
    • 附近(60 单位内)有建筑就一定会显示,修复“边缘”数值偶尔不显示的问题。
  • 高塔设施间距:悬停以下建筑时,额外显示「高塔碰撞边缘 X.XXXX格」——当前建筑与列表内其它高塔建筑碰撞盒的最近边缘距离,用于排查「设施相隔太近」的问题: 感应塔 / 无线输电塔 / 卫星配电站 / 风力涡轮机 / 行星物流塔 / 星际物流塔 / 轨道弹射器 / 信号塔。 (按建筑名称关键词识别,命中“感应塔 / 无线输电 / 卫星配电 / 风力涡轮 / 物流 / 轨道弹射 / 信号塔”即视为高塔。)
  • 「最近建筑 中心」保留。

1.8.1

  • 修复“最近建筑”对普通建筑总是显示 0.0000 的问题:
    • 新增中心到中心距离(建筑锚点之间的直线距离 ÷ 格尺寸),相邻建筑会显示实际间距;
    • 保留边缘距离(两个碰撞盒的最小距离),碰撞盒贴边时为 0 属正常现象。
  • 显示改为「最近建筑 中心 X.XXXX格 边缘 Y.YYYY格」。

1.8.0

  • 尺寸改为碰撞盒尺寸:长 / 宽 / 高取自建筑 buildCollider(碰撞盒)的大小,长宽按“格”、高按“层”换算;没有碰撞盒时才退回模型网格包围盒。
  • 新增最近建筑距离:显示当前建筑碰撞盒与其它建筑碰撞盒的最小边缘距离(单位:格)。先按 60 单位半径粗筛,再计算两个有向包围盒(OBB)的距离。

1.7.0

  • 新增:显示当前建筑模型的三维尺寸「长 / 宽 / 高」。
    • 长、宽 = 模型包围盒 Z / X 尺寸 ÷ 格尺寸(与经纬度坐标同一套“格”单位);
    • 高 = 模型包围盒 Y 尺寸 ÷ 1.3333(与 Z 坐标同一套“层”单位)。

1.6.0

  • 回退到经过验证的 IMGUI 绘制方式(与 v1.4.x 相同):v1.5.x 的“预渲染纹理”方案在部分环境完全不显示,已移除。
  • 按你的要求删除“加粗”功能。
  • 保留:0.75 秒检测一次、空闲时渲染组件禁用、字体懒创建、文字尺寸缓存、稳定悬停零每帧分配。
  • 不再使用 uGUI Text,也没有 IMGUI 兜底,v1.3.0 / v1.5.1 的崩溃都不会再出现。

1.5.2

  • 修复 v1.5.1 崩溃:移除了 IMGUI 文字兜底(DSP 里 GUI.Label 会空引用),现在完全不调用 GUI.Label;预渲染失败时只隐藏提示并在日志里记录一次警告,不会崩溃。
  • 加粗改为“每个字形绘制两次(第二次右移 1 像素)”实现,不再请求 FontStyle.Bold 字形(动态字体没有粗体字形时会导致取不到字形、渲染失败)。
  • 保留 v1.5.1 的上下颠倒修复(字体图集 V 坐标翻转)。
  • 其余与 1.5.1 相同。

1.5.1

  • 修复预渲染文字上下颠倒的问题(字体图集 V 坐标方向与读回纹理的行方向相反,已做翻转)。
  • 提示框文字改为加粗。
  • 其余与 1.5.0 相同(预渲染纹理、0.75 秒检测、经度在前、纬度在后)。

1.5.0

  • 性能:提示框文字改为“变化时预渲染成纹理”。文字只在内容变化时渲染进一张 Texture2D(连背景一起画好),显示期间每帧只调用一次 GUI.DrawTexture,不再每帧生成文字网格。
  • 字体图集只快照一次,只有出现从未渲染过的字符时才刷新;平时零开销。
  • 若预渲染失败(字体图集不可读等),会自动退回普通 IMGUI 文字显示,保证功能仍可用。
  • 悬停检测频率:1 秒 → 0.75 秒一次。
  • 仍不使用 uGUI Text,v1.3.0 的崩溃不会复现;空闲时渲染组件禁用,启动不创建字体。
  • 其余功能与 1.4.3 相同(经度在前、纬度在后;X/Y 格、Z 层;Ctrl+Shift+K 开关、默认开启)。

1.4.3

  • 悬停检测频率降到 每秒 1 次(1Hz,0.15 秒 → 1 秒),进一步降低 CPU 占用。
  • 隐藏改为在每次检测时立即执行(1Hz 检测本身已起到防抖作用)。
  • 其余功能与 1.4.2 相同(经度在前、纬度在后;X/Y 格、Z 层;Ctrl+Shift+K 开关、默认开启)。

1.4.2

  • 悬停检测频率再降低 3 倍:从 20Hz(0.05 秒)降到约 6.7Hz(0.15 秒),进一步降低 CPU 占用。
  • 显示顺序调整:第一行改为「经度 …… 纬度 ……」(原来是「纬度 …… 经度 ……」)。
  • 其余功能与 1.4.1 相同。

1.4.1

  • 说明 / 描述更新为: 「悬停建筑显示经纬度与蓝图格坐标 X/Y/Z(作者:妙妙在路上 抖音@妙妙在路上)。开关快捷键【ctrl+shift+k】【默认开启】。」
  • 同步补充英文翻译: "Hover a building to show its latitude/longitude and blueprint grid coordinates X/Y/Z (Author: 妙妙在路上, Douyin @妙妙在路上). Hotkey: Ctrl+Shift+K, enabled by default."
  • 功能与 1.4.0 完全相同(无代码逻辑改动)。

1.4.0

  • 修复 v1.3.0 崩溃:uGUI Text 在本体(0.10.35)里调用 preferredWidth 会抛 NullReferenceException: UnityEngine.UI.Youthcat.TextGenerator.Populate,导致游戏无法运行。 已彻底移除 uGUI Text 方案,提示框改回经过验证的 IMGUI 绘制。
  • 修复加载时间变长:字体不再在 Awake 创建,改为第一次悬停建筑时才懒创建, 启动与行星加载时间恢复正常。
  • 保留并完善性能优化:
    • 渲染放在独立组件上,没有悬停目标时组件禁用,空闲时零 IMGUI 开销;
    • 悬停检测 20Hz、文字重建限流 10Hz、隐藏防抖 0.2s;
    • 单击绘制(背景 + 一行文字,无阴影层),CalcSize 只在文字变化时调用;
    • 稳定悬停时零每帧分配,建筑名按 protoId 缓存。
  • 作者信息保持不变:妙妙在路上(抖音 @妙妙在路上)。

1.3.0

  • 极致性能优化(重点):
    • 完全移除 IMGUI(OnGUI):提示框改为 uGUI(Canvas + Text)常驻对象,文字网格只在内容变化时重建一次;
    • 不显示时零渲染:没有悬停目标时直接 Canvas.SetActive(false),UI 系统完全不参与渲染;
    • 悬停检测降到 20Hz(每 50ms 一次),其余帧不做坐标计算;
    • 只在鼠标移动时更新提示框位置,鼠标不动时连 RectTransform 都不修改;
    • 稳定悬停时零每帧分配(无字符串 / 数组 / GUIContent 创建),建筑名按 protoId 缓存;
    • 悬停同一栋建筑时跳过全部坐标换算;
    • 文字重建限流约 10 次/秒,隐藏延迟 0.2 秒防抖,避免射线在建筑边缘抖动时反复重建。
  • 文档更新:README 增加性能说明与英文摘要。

1.2.0

  • 性能优化:
    • 坐标只在悬停建筑或建筑位置变化时重算,稳定悬停时不再每帧拼接字符串;
    • 文本尺寸只在文本变化时测量(CalcSize 缓存);
    • OnGUI 只在 Repaint 阶段绘制,布局/事件阶段直接返回;
    • 关闭 GUILayout 布局遍历(useGUILayout = false);
    • 建筑名称按 protoId 缓存;
    • 复用 StringBuilder,稳定悬停时无每帧字符串分配。
  • 说明中加入作者信息:妙妙在路上(抖音 @妙妙在路上)。
  • 完善 Thunderstore 发布所需的 manifest.json、README.md、CHANGELOG.md、icon.png。

1.1.0

  • X / Y / Z 改为格坐标:X、Y 为格数(0.36° / 格),Z 为高度层(贴地面 = 0,每层 1.3333)。
  • 坐标算法改为与游戏蓝图一致的 BlueprintUtils.GetLatitudeGridIdx / GetLongitudeGridIdx 和 localOffset_z 公式。
  • 修正 v1.0.0 中“向北走一格 Y=1.2579(米)”的问题。

1.0.0

  • 首个版本:悬停建筑显示经纬度与星球局部 X / Y / Z,Ctrl + Shift + K 开关。