Dyson Sphere Program
Install with App

Details

Latest version
1.10.11
Last Updated
First Uploaded
Downloads
67
Likes
0
Size
24KB
Dependants

Categories

更新日志

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 开关。
Thunderstore development is made possible with ads. Please consider making an exception to your adblock.