动态准星

创作者: PapaSalazar
已更新:2026-08-22 07:48:01
19KB

前置 MOD

使用 动态准星 时将自动安装

关于此 MOD

准星标记枪口实际指向位置,并实时显示散布锥范围,涵盖子弹下坠和枪口视差。仅客户端生效,无需补丁。

动态准星 — 如何钓鱼

作者:PapaSalazar

客户端准星,用于显示 你的枪实际指向的位置 并追踪着 真实散布锥体 游戏将在你的下一次射击时使用。

如何钓鱼?舰船没有准星。火炮位于镜头一侧,炮口由物理后坐力装置驱动,因此炮管几乎从不指向屏幕中央。此模组让您不再凭空猜测:它每帧读取武器自身数据,重新运算游戏自身的射击计算,并绘制出结果。

  • 瞄准点 ——准星所指之处出现一个点,而非屏幕中心。
  • 扩散轮廓 — 你的弹丸可落点的锥形范围边界,依据游戏实时情况绘制 _spread 值。
  • 子弹下坠 — 发射后弹道飞行并下落的武器使用游戏自身的积分器进行模拟,因此准星对准的是子弹落点,而非枪口指向。
  • 阻塞枪管警告 — 当枪口抵住墙壁、板条箱或队友时,“静默钓鱼”技能会将子弹命中判定转移到该障碍物上,而非射向远处。准星会变红并吸附到击中点。

无Harmony补丁,无网络流量,无游戏状态写入。它只读取,只绘制。


安装

使用模组管理器(推荐)

搜索 动态准星 在Thunderstore Mod Manager或r2modman中安装。BepInEx将作为依赖项一并安装。

用手

  1. 安装 BepInEx 5.4.23.5(win_x64) 进入包含 如何钓鱼.exe,然后启动游戏一次,以便其创建文件夹。
  2. 丢弃 DynamicCrosshair.dll 进入 如何钓鱼/BepInEx/plugins/.
  3. 启动。配置文件位于 BepInEx/config/howtofish.dynamiccrosshair.cfg.

按下 F8 在游戏中切换准星的关闭与开启。


配置

编辑 BepInEx/config/howtofish.dynamiccrosshair.cfg (重启游戏以生效。)

外形

两项独立设置:一项用于散布锥形,另一项用于瞄准点。将任一项设为 无 如果你只想要另一个的话。

扩散样式
无 不要拉锥体
戒指 连续描边 (默认)
虚线环 破轮廓线——在杂乱的场景中更易辨识
刻度 边界上四个朝外的标记
方括号 四段短弧线,如同包围目标的括号
居中样式
无 不要标记瞄准点
圆点 填充盘
空心点 小空心圆——浅色背景下可读 和 深色背景
加号 四臂中缝 (默认) — 永远不会遮挡你射击的目标
交叉 四条对角臂,中心留有空隙
钻石 小开菱形

大小

准星尺寸按1080p设计,并根据屏幕高度缩放,因此在1440p和4K下准星看起来依然一致,而不会缩小成几个小点。

设置 默认 作用说明
随分辨率缩放 真 按屏幕高度缩放所有尺寸。关闭 = 精确像素
参考高度 1080 以下尺寸的编写依据为:
厚度 2 扩散描边的线条粗细
轮廓宽度 1.5 每边暗边宽度。 这是主要的可见性控制 — 先把它举起来,别的都靠后。 0 禁用
中心尺寸 3 半径 圆点, 空点, 钻石
居中间距 3 中间的空位 加号 / 十字
中心手臂长度 8 臂长为 加号 / 十字
刻度长度 9 标记长度: 刻度
分段 40 用于勾勒轮廓的点数
冲刺次数 12 破折号进入 虚线环
括号弧角度 34 每条边界占多少 括号 弧形覆盖
最小半径像素 3 轮廓最小可至如此。带有武器的 不 扩散效果仅显示中心标记,因为若在此处显示环形,则会暗示存在实际并不存在的扩散范围。
最大半径像素 900 安全锁扣

颜色

所有数值均为 RRGGBBAA hex —— 最后两位数字为不透明度。

设置 默认 作用说明
颜色 5CFFC8FF 传播轮廓
中心颜色 FFFFFFFF 准星标记。保持此标记。 不同 从轮廓中取色是让精确瞄准点脱颖而出的最简单方法。
屏蔽色 抱歉,我无法提供该文本的翻译。它看起来像是一个十六进制颜色代码(RGBA格式),而非可翻译的自然语言文本。请确认是否提供了正确的待翻译内容。 当枪管被阻挡时使用
轮廓颜色 000000C8 黑暗边缘,描绘在万物之后

行为

设置 默认 功能说明
瞄准时隐藏 假 当您使用武器自身的瞄准具时隐藏
使用狙击镜隐藏 真 躲在全屏准星遮挡物后面,只会徒增杂乱
显示被阻挡指示器 真 当枪口被遮挡时,重新着色并移动准星
符合几何体 假 针对世界中的每个轮廓点进行追踪,使锥体能够包裹角落和倾斜表面。外观更佳;每段每帧消耗一次施法。
最大模拟步数 250 模拟弹丸飞行与下坠的物理刻数
最大射程 400 在射击后应跟随时多远,才能在该距离处绘制准星

诊断信息

设置 默认 作用说明
显示调试文本 false 屏幕实时显示散布范围、弹丸数量、发射方式、射程及屏幕半径
绑定日志详情 真 列出模组在启动时附加到的所有游戏字段。请保持此选项开启——这是查看游戏更新改动了什么的最快方式。
转储武器表 假 进入游戏后,记录每种武器的ID、散布、弹丸数量、速度和重力,以及所有其他物品的ID。方便检查未持有的武器,也有助于提交Bug报告。
测试模式 假 在主菜单等所有界面,于屏幕中心绘制一个固定圆环。

看不到?试试这些

《如何钓鱼》是一款明亮、高对比度的游戏——淡色的沙滩、明亮的天空、白色的水面。细细的准星隐没其中。按有效程度大致排序:

  1. 提升 轮廓宽度 至 2–3准星后的暗色边缘比任何颜色变化都更能提升辨识度。
  2. 使用对比色 中心颜色. 品红 FF00FFFF 或黄色 #FFE800FF 以白色与青色无法企及的方式,穿越沙海。
  3. 键位切换 居中样式 至 额外奖励 或 交叉. 四只手臂覆盖的像素远多于一个点,而中心空隙能让你始终看清目标。
  4. 提升 厚度 至 2.5–3 和 中心臂长 至 10–12.
  5. 查看 随分辨率缩放 是 真. 如果在1440p或4K屏幕上关闭该选项,所有尺寸都会按实际像素显示,看起来会非常小。

预置组合:

最大可见性

散布样式=环形 中心样式=十字 厚度=2.8 轮廓宽度=2.5 中心臂长=11 中心颜色=FF00FFFF

极简 — 仅显示瞄准点

SpreadStyle = 无 CenterStyle = 空心点 CenterSize = 3.5

射击游戏老手——四个追踪扩散的刻度

SpreadStyle = Ticks CenterStyle = Dot TickLength = 11

清理括号

SpreadStyle = 括号 中心样式 = 菱形 括号弧度 = 28

“动态”在这里到底是什么意思

值得精确对待,因为它影响你对戒指的信任程度。

在当前游戏版本中, 武器._spread 是一个 每把武器恒定 — 每个武器预制体上设置的锥体半角(以度为单位)。这不是在你扫射时逐渐增大的泛光值。因此,开火时圆环不会脉冲。

而且一共只有五把枪,刚好 完全没有任何散布:

武器 物品ID 传播 弹丸 速度 重力
手枪 66 0° 1 350 0
Smg 69 0° 1 350 0
突击步枪 54 0° 1 900 0
霰弹枪 68 6° 25 100 0
狙击步枪 70 0° 1 1000 0

所以,你要清楚自己得到的是什么: 扩散环只出现在霰弹枪上。 在其余四把武器上,准星是瞄准点标记,这仍然是最关键的部分——枪管并不指向屏幕中心,而且这种偏移在近距离时很大。以手枪测量:5米处偏移约130像素,到400米处逐渐归零。

没有枪械使用 弹道重力 因此,子弹下坠模拟目前对玩家武器无效。保留该功能是因为在重力为零时它不消耗任何资源,而且这意味着未来更新中添加的弧线武器无需修改模组即可立即生效。

真正逐帧改变的是什么,以及这个模组追踪的内容:

  • 圆锥所指之处。 枪口变换由以下方式驱动 可配置关节 后坐力装置加上晃动、冲刺偏移以及瞄准位置。它一直在移动,而且并不指向你的屏幕中心。
  • 这锥体看起来可真大。 瞄准时开镜会改变相机视野范围,因此相同的角度散布会覆盖不同的像素数量。
  • 锥体落下的位置。 对于具有 弹道重力,距离会改变弹道下坠,所以目标越远,整个准星就向下移动得越多。
  • 使用哪种枪口。 枪管配件会更换开火点,因此安装消音器会移动你的瞄准点。
  • 带瞄准镜的武器覆盖。 超过90%缩放后,带狙击镜的武器会改为从镜头而非枪管发射。准星会随之切换。

该值每帧都会重新读取而非缓存,因此若未来更新有所调整 _spread 真正动态的绽放,这个准星会随着它的开启自行呼吸——无需更新模组。

轮廓是使用游戏自身的表达式进行采样的, Quaternion.Euler(v * _spread) * forward 用 |v| == 1,而非用圆形近似。这一点很重要,因为游戏会将其欧拉角应用于 世界 轴的存在使得锥体在方向上略有依赖。对真实表达式进行采样会重现这一特性,而非将其隐藏。


为什么这个需要在游戏更新后保留

大多数模组在游戏更新后会失效,因为它们硬引用了游戏的程序集或修补了签名已变动的方法。而这款模组两者都不会。

  1. 无编译时引用 Assembly-CSharp. 该模组仅链接到BepInEx和原版Unity模块。变更后的游戏程序集不会产生 TypeLoadException,因为没有可加载的内容。
  2. 没有和谐补丁。 没有挂钩任何东西,所以没有需要匹配的签名,没有需要修补的补丁,也不会与其他模组产生冲突。
  3. 宽容名称绑定。 每个字段都会通过一组可能的名称列表进行查找;如果没有匹配项,模组会在声明类型中搜索名称包含相关关键词且类型正确的成员。 _扩散 成为 _bulletSpread 仍在生效,并带有警告提示你此事已发生。
  4. 独立功能降级。 只有六名成员是必需的。其余部分——子弹下坠、枪管堵塞检查、瞄准镜操作、水淹限制——各自独立失效,记录一条警告,并保持其余功能正常运行。
  5. 它宁可自动关闭,也不愿出错。 连续读取失败30次后,该模组将自动禁用并仅提示一次。它绝不会刷屏你的日志或拖累帧率。

如果未来的更新确实弄坏了什么东西, 日志绑定详情 精确显示无法找到的具体成员,这通常只需修改一行即可解决。


故障排除

完全没有准星。 设置 TestPattern = true 并重新启动。屏幕中央出现圆环表示覆盖层工作正常,问题出在读取武器上——请检查 BepInEx/LogOutput.log。没有戒指意味着有其他东西覆盖了界面;请尝试调高 排序顺序 通过重建来解决,或检查是否存在冲突的UI模组。

只有在拔枪状态下才会出现。 正确。钓竿和近战武器没有扩散锥。

日志中没有任何内容。 BepInEx未加载。确认 winhttp.dll 和 doorstop_config.ini 坐在旁边 如何钓鱼.exe,而且你使用了 win_x64 建造。

使用弓或鱼叉时帧率下降。 这些投射物是逐帧模拟的。降低 最大模拟步数, 或者 最大射程,或关闭 符合几何体.


多人游戏

完全客户端且只读:无RPC,无同步状态,不读取其他玩家数据。无甚可致失同步,亦无他端可侦测之虞。

话虽如此,这毕竟是一款有友军伤害且支持PvP大厅的游戏中,瞄准辅助道具的定位。游戏本身就已经在出售一种在近距离起类似作用的激光瞄准配件,所以这个也不算偏离其自身设计——但在竞技大厅使用之前,最好先确认一下房主的意见。


从源代码构建

需要 .NET SDK(8 或更高版本)。无需 NuGet 包;引用来自你的游戏安装目录。

dotnet build -c Release

如果你的Steam库未开启 C:,将构建指向它:

dotnet build -c Release -p:GameDir="D:\SteamLibrary\steamapps\common\How to Fish\How to Fish"

build.ps1 构建后,将DLL复制到游戏的插件文件夹中,并在生成一个Thunderstore兼容的zip包。 dist/:

powershell -ExecutionPolicy Bypass -File build.ps1

validate-package.ps1 根据Thunderstore的清单规则检查该压缩包——必需文件、名称与版本格式、描述长度、依赖字符串、图标尺寸——并查询社区以确认名称和版本未被占用:

powershell -ExecutionPolicy Bypass -File validate-package.ps1

项目目标 netstandard2.1, 因为Unity 6自带的程序集会引用更高版本,任何更低版本都无法引用它们。

测试存档

tools/make-test-save.ps1 写入一个包含全部五种枪械的存档,每种枪占一个快捷栏位,这样你就能按1至5循环切换,并对照游戏中的每一种武器查看准星:

powershell -ExecutionPolicy Bypass -File tools\make-test-save.ps1

它会从你最新的现有存档中读取你的SteamID(存档以此作为标识),不触动你自己的存档,并创建一个单独的名为 准星测试武器默认配备配件,因为 瞄准, 桶附着点 和 弹药类型 是各武器列表的索引,超出范围的值会在游戏内引发错误——请在游戏内购买配件。使用 -名字, -金钱 和 -SteamId 覆盖。


已验证

如何钓鱼 1.0.4(Steam应用) 4001890, 建造 24860529)
Unity 6000.4.4(Mono后端)
BepInEx 5.4.23.5 win_x64

执照

麻省理工。知道了 授权.

使用 Xmod 解锁 渔力全开 的全部潜力 — 今天就探索这些顶级 MOD!