IronSight(第一人称枪械视野修正)模组的准星已对齐并调整。

IronSight(第一人称枪械视野修正)模组的准星已对齐并调整。

蛋糕上的樱桃叫做“铁眼(第一人称枪械视野修复)”,由WickedHorseman制作,还有vStar925制作的“自定义第一人称视野”。现在有了这些,RDR2的第一人称游戏体验还算不错。

游戏玩法

特点

  1. 所有故事模式武器的 ADS 瞄准模式均已调整为瞄准状态,包括海军左轮手枪。
  2. 非 ADS 瞄准模式(即第一人称下将枪向前指而不看瞄准镜时)现在在所有故事模式武器上都是对齐的,包括海军左轮手枪。也就是说,你可以相信枪口指向的地方就是子弹飞向的地方。
  3. 将步枪或连发枪开镜瞄准时的垂直视场角改为 57。(你可能更熟悉水平视场角,因为大多数游戏都使用这种设置,但《荒野大镖客 2》使用的是垂直视场角。以水平视场角换算,开镜瞄准的视角为 88。超过 90 的水平视场角会产生鱼眼镜头效果,至少在 16:9 显示器上如此,而且我个人并不喜欢鱼眼镜头效果。)
  4. 在其他情况下,垂直视野大约为 59 度(以水平视野计算,约为 90 度以下)。其他情况包括行走、赌博、非瞄准状态等。
  5. 武器的排列方式确保任何武器都不会穿模。
  6. 第一人称下弓箭的瞄准已对齐。
  7. 恢复了步枪和连发步枪的非瞄准腰射功能(是的,这与当前游戏中第一人称视角的工作方式存在取舍。要么在第一人称下,步枪和连发步枪没有非瞄准腰射,但装备瞄准镜时拥有瞄准射击功能;要么在第一人称下,步枪和连发步枪拥有非瞄准腰射,但装备瞄准镜时失去瞄准射击功能。)
  8. 调整了改进瞄准器和基础瞄准器。

前置条件(你需要安装的模组)

  1. 铁制瞄准镜(第一人称枪械视野修复)
  2. 自定义第一人称视野
  3. 铁瞄和自定义第一人称视场模组所需的前置条件。

好的,这里有一个说明:我上传的这些文件只是 Ironsight 模组和自定义第一人称 FOV 模组中修改后的文件。我只是调整了这些文件中的数值,以使第一人称瞄准正确且最终效果良好。因此,如果你在使用这些模组时遇到问题,请直接向相应的模组作者反馈,我无法解决这些问题和与这些模组相关的错误。如果你想自行修改代码文件,我在此页面底部写下了自己在调试过程中的笔记,你可以将其作为参考资源,如果你决定自行调整的话。我不打算对这些文件做进一步修改。最后,如果你使用我的笔记作为参考,请不要问我每一项内容的具体含义。恕我直言,我不打算再花时间在这方面,也不打算详细讲解这些笔记。如果你不确定某部分的作用,请先备份该部分,然后对其进行修改,观察效果,记录变化,理解原理,并在需要时应用你所学到的知识。我的意思是,自己去测试并观察结果 :D(如果你计划自行调整的话)。这番说教并不像听上去那么严厉 ':D。

安装

  1. 安装前置依赖项
  2. 下载我上传的文件夹
  3. 解压我上传的文件夹
  4. 将解压文件夹中的 lml 文件夹拖放到你的 RDR2 游戏文件夹中(即 RDR2.exe 所在的位置)。
  5. 准备开始

它是如何完成的

嗯...

  1. 我用了在谷歌图片搜索中找到的一张照片作为参考,展示了现实世界中视线对齐时的样子。
  2. 对于每种武器的开镜瞄准(ADS),我反复调整数值,直到达到良好且正确的效果。(意思是:修改数值、打开游戏、瞄准枪械、关闭游戏、修改数值、打开游戏……)。
  3. 之后就该调整非瞄准-臀部-瞄准了。为此我用了锤子,来观察只用手枪指向时的样子(是的,看起来非常奇怪)作为参考,同时为了看到大致上使用步枪/连发枪/霰弹枪从臀部指向时的样子,我用了落地灯(看起来更奇怪了,但在工程设计中,你必须利用手头所有可用的合法资源来达到实际可及的最佳质量,而我家里恰好没有手枪或步枪)。
  4. 然后我用了一些透视几何、解析几何和 Desmos,根据 xy 平面上的点推导出排列过程的直线方程。(尝试在二维平面上推理三维空间真的很有趣,信我 ;))笑归笑,我其实真的很喜欢思考和做数学,也喜欢应用数学,但脑力劳动带来的疲惫感实在太难受了。
  5. 然后我调整了所有非瞄准-腰射-开火的值,直到它们正确无误。(打开游戏,使用非瞄准-腰射-开火的枪,截图,将截图放入 Desmos,放置线条点使其在截图中与枪相对位置正确,进行调整,打开游戏,再次测试非瞄准-腰射-开火的枪……)
  6. 这些完成后,我进行了最终测试和检查。
  7. 8天后,它变得很好且完整,然后我休息了(相信我,我在项目之间确实睡过觉)。
  8. 然后我玩了游戏,还得想点别的事做。

致谢

  • 感谢 WickedHorseman 制作了 "IronSight(第一人称枪械视野修复)" 模组。
  • 感谢 vStar925 制作了 "自定义第一人称视角" 模组。
  • 感谢 "No aiming zoom" 模组评论区第二页中关于弓箭瞄准数值的噩梦。
  • 感谢 Rockstar 制作了这款游戏 -_-(但拜托下次把第一人称瞄准做好行不行!)

我所做的只是配置和调整瞄准时的数值并更改视野角度,但这一切都建立在前人所做工作的基础上。有人做出成果,有人加以改进,再有人完善这个改进版……这便是工程学的延续。

我希望为我自己所做的调整获得认可。我不希望为上述其他人所做的模组获得认可,只希望为我所做的调整和对齐获得认可。

给下一位接手者进一步的改进要点

  1. 骑在马背上用第一人称瞄准弓箭时,弓箭的瞄准点不稳定(它有点歪,我什么都没做)。
  2. 如果你在步枪或连发枪上安装了瞄准镜,并且不通过瞄具进行腰射,瞄准镜会有点挡视线(我在玩了一段时间后注意到这点,但不算严重。在这款游戏中,无论是否安装瞄准镜,武器在非瞄具腰射时的朝向都是一样的。此外,亚瑟似乎是右撇子,意味着他像右撇子一样持枪,而如果你从左侧将枪口调整为非瞄具腰射姿态,他的手会有点扭曲,所以我就没管它了)。

有一些真正拥有软件工程经验之类的人,可以尝试制作一个模组,让武器有瞄准镜和没有瞄准镜时,有不同的非开镜腰部瞄准配置。这样一来,步枪和连发枪就有可能同时实现无瞄准镜的非开镜腰部瞄准和有瞄准镜的开镜瞄准。但目前还没有这样的东西存在。

我的笔记(原始内容,为这个页面编辑过的版本)

让我们假设,在给定的状态下,对于某个武器,我们有武器 xyz 位置、武器 xyz 旋转和摄像机 FOV 的值。

在 firstperson.meta 文件的第 1528 行有一个具体示例。位于 IronSight 模组的文件夹中。

<Item key="WEAPON_SHOTGUN_PUMP" type="CWeaponAnimations">
<FPSCameraOffsets>
<Item>
<FOV value="57.0"/>
<Translation x="-0.085" y="0.080" z="0.00"/>
<Rotation x="-2.165" y="4.000" z="-2.105"/>
<WeaponActionIndex>FPCO_WEAPON_AIM</WeaponActionIndex>
</Item>
  1. 物品键告诉我们讨论的是哪种武器,在这个具体案例中是 "Pump_shotgun"。
  2. WeaponActionIndex 告诉我们所涉及的状态是哪个,在本例中 "FPCO_WEAPON_AIM" 是状态,并且这个特定状态是 "非瞄准-腰射-瞄准模式"
  3. 感兴趣的值在 <Item></Item> 之间
  4. FOV 值代表垂直视场角(我在这篇文章前面提到过垂直和水平视场角)。在这种情况下,"FOV 值 = 57.0" 表示 "非瞄准腰射时的垂直视场角为 57"。

用于在垂直视场角和水平视场角之间转换的计算器 -> https://themetalmuncher.github.io/fov-calc/ 。该链接来自 "自定义第一人称视场角" 模组的说明文件。

  1. 平移值将武器上下(z 值)、左右(x 值)和远近(y 值)移动。平移意味着整个武器在屏幕上移动。
  2. 旋转值 ROTATE 会使武器上下旋转(x 旋转值)、左右侧向旋转(z 旋转值)以及围绕自身左右旋转(y 值)。对于 x 旋转和 z 旋转,武器并非围绕其中心点旋转,而是围绕武器枪托的末端旋转。没错,就是你想的那样,去试试看吧。

关于 "围绕自身" 的说明 -> 如果你站立并原地旋转,你是在围绕自己旋转。你可以向左或向右围绕自己旋转。现在在这个思想实验中,把 "你自己" 换成武器,并且武器不是竖立着,而是平放在亚瑟手中。现在你应该明白 "围绕自身旋转" 是什么意思了。如果还不懂,那就亲自试试看(我不会再重复了,但请在后续注释中默认采纳 "试试看" 的建议)。

当讨论 x 值、y 值和 z 值时,指的是 xyz 笛卡尔坐标值。实际应用中,可以将武器想象为沿着这些 xyz 轴移动(当改变平移时)。同时,如果旋转值被改变,武器会围绕这些轴旋转,例如左右旋转和上下旋转,旋转的基点是枪托的末端,在这个三维空间中,枪托位于原点。原点即点 (0,0,0)。如果你想更深入理解这些数学概念,可以使用关键词 "解析几何"、"微积分" 和 "线性代数"。学习 "集合论" 和 "数学证明" 对于理解数学整体知识非常有用,但这已偏离了这些 RDR2 模改笔记的主要目的,所以只能说,如果你想继续深入研究这些数学内容,你需要从这里开始自己探索。现在回到模改部分。

链接此处 -> 笛卡尔坐标系

链接在此 -> 三维空间

翻译值的精确行为

  • x 转译为正值 => 武器向右移动
  • x 平移值负变化 => 枪口向左移动
  • z 轴平移值的正向变化 => 枪向上移动
  • z 轴平移值负向变化 => 枪口下移
  • Y 平移值的正向变化 => 枪械向更近处移动
  • y 翻译值的负向变化 => 枪口远离

现在关于数值变化量的一个重要说明:当涉及到平移数值时,0.1 的变化是可以被察觉的。而对于平移的微调,我使用了 0.00015。

旋转数值的具体行为

  • x 旋转值正向变化 => 枪向上旋转
  • x 旋转值的负向变化 => 枪管向下旋转
  • Z 旋转值的正变化 => 枪向左旋转
  • 旋转 Z 轴负值变化 => 枪向右旋转
  • y 旋转值的正向变化 => 枪向右自旋
  • y 旋转值的负变化 => 枪自身向左旋转

对于旋转值,0.5 的变化非常明显。较大的变化我使用 0.150,而微调时我使用 0.025 或 0.050。

FOV 的精确行为

  • FOV 值的正向变化 => 视野内更多人员
  • z 旋转值为负 => 视野中工作人员减少
  • 视野值过低会导致局促感和放大感,视野值过高则会产生鱼眼镜头效果和类似雷神之锤的风格移动。

精确的体重限制行为

  • WeightConstraint 值正向变化 => 枪械在手中晃动减少
  • 负方向 Z 轴旋转值变化 => 枪械在手中晃动幅度增大。

好的,另一个重要说明:首先,武器约束最大值为 1,这意味着完全没有 "武器晃动",基本上就是钢铁手臂亚瑟。最低值为 0,意味着枪口会在屏幕上到处乱晃。但细节中藏有陷阱,因为 "武器晃动" 实际上 == "武器对定义的平移和旋转坐标的约束程度",因此你设置的武器约束越少,武器越可能偏离定义的坐标。简而言之,这可能会带来巨大痛苦,因为偏移不是静态的,而是动态取决于 "亚瑟是否向上看"、"亚瑟是否向下看"、"亚瑟是否蹲下"、"亚瑟是否站在斜坡上"、"亚瑟是否忘记报税"。当我调整时是这样理解的:例如,如果武器约束权重为 0.95,意味着武器在任何时候都可能从定义的坐标中随机偏移方向和旋转 5%。有趣的是,当约束权重降得太低时,向上瞄准时武器会向右偏移,向下瞄准时则会向左偏移。我设置的这个值是一个不会产生痛苦的解决方案。不过你当然可以自由更改,只是如果你更改了武器约束值,记得调整该武器的所有旋转值和平移值。

动画混合时间的精确行为

好的,听我说,我不太确定 BlendTimes 的逻辑是否如下,因为我没有对这些参数进行太多测试。我只是设置了一些合适的值,检查了所有内容是否正常运作,然后就继续了。如果你想更改动画混合时间值,你应该通过测试来验证这个混合时间值更改逻辑。

  • 正向变化对应混合时间值变化 => 从一个动画状态到另一个动画状态的转换变慢
  • BlendTime 值负变化 => 从一个动画状态切换到另一个动画状态更快

我认为是 BlendTimes 的 0.2 值变化比较明显。但就像我之前说的,对于 BlendTimes 这个值,还需要进行更精确的数据测试才能得出结论。

所有上述值都可以在以下文件中找到。

  • lml/WickedHorseMan/Gameplay/IronSight/firstperson.meta
  • lml/WickedHorseMan/Gameplay/IronSight/DLCs/(DLCs 文件夹中的任意文件夹,请查看它们)

firstperson.meta 包含故事武器的配置代码行。"DLCs" 文件夹的子文件夹中包含同样带有配置代码行的文件,我相信其中就有 evans repeater,以及在线枪械也在那里。

为了打开和编辑这些文件,我使用了 Visual Studio 2022。它本质上是一个代码编辑器和软件开发工具。关于 "如何安装它",请在互联网(Youtube 或 Google)上搜索教程。教授如何安装 Visual Studio 超出了我的范围。

好的,故事武器的配置代码行位于 firstperson.meta 文件的第 1295 行到第 1595 行之间。

启动弓的配置代码在同一文件的第 544 行开始。改进的弓在文件中位于起始弓之后。

然后是 "通用 2h" 和 "通用 1h"。若该状态下未特别配置其他内容,这些通用值将生效。2h 用于双手武器,1h 用于单手武器。

在检查了 firstperson.meta 文件并进行了一些调整后,你现在知道该在 DLC 文件夹的子文件夹中寻找什么了。

  • FPCO_WEAPON_AIM = "腰射非瞄准"
  • FPCO_GUN_IRON_SIGHT = "铁瞄瞄准"

我还没有仔细了解其他州的情况。

现在,"自定义第一人称视场角" 模组中的其他视场角值。(非瞄准时的视场角值)

我有点累了,所以会说得简短一点。

如果你修改了 "Ironsight" 模组文件中的 FOV 值,那么你需要调整 "Custom First Person FOV" 模组中的其他 FOV 值。如果不这样做,瞄准和其他活动的 FOV 将会不匹配。

所以正确的文件位于文件夹 lml\Custom First Person FOV\data

在那里,文件名为 cameras.ymt

  1. 当你打开那个你想使用的 cameras.ymt 文件时,请使用 Visual Studio 的搜索功能。
  2. 使用搜索功能的快捷键组合是 Control + f
  3. 在搜索框中输入以下变量名称,不要带括号 (0x1F1D79FF)
  4. 现在你发现了类似这样的东西
<UNK_MEMBER_0x1F1D79FF value="71.00000000"/>

"71.00000000" 这正是我们想要修改的地方。存在许多 0x1F1D79FF 的实例,您可以通过左键点击搜索框并按回车键来导航到这些实例。我就是这样操作的。现在回到编辑环节,您需要修改所有 0x1F1D79FF 实例的每个值。

改成什么?嗯,如果你在瞄准镜模组中增加了视野范围,那么你也需要在自定义第一人称视野模组中增加同样的数值。我自己的做法是先在瞄准镜模组中调整瞄准时的视野范围,然后到自定义第一人称视野模组的 cameras.ymt 文件中,将数值增加或减少 1 到 2,直到游戏中站立时的视野与瞄准时的视野匹配。接着,我在瞄准镜模组中将步枪和连发步枪的瞄准视野调低 2 到 3,以模拟瞄准时 "身体前倾" 的效果。数值 "71.00000000" 可以视为一个魔法数字。它在某种程度上控制视野范围,但并非与实际视野数值一一对应。因此,我遵循的基本规则是:如果游戏中使用枪械瞄准时画面 "拉近",则在 cameras.ymt 中把魔法数字减少 1 或 2;如果画面 "拉远",则把魔法数字增加 1 或 2。当游戏内瞄准时既不 "拉近" 也不 "拉远",则魔法数字设置正确。

简而言之,将 Ironsight 模组中的 "Fov 值" 视为实际的垂直 FOV 值,而自定义第一人称 FOV 模组中 camera.ymt0x1F1D79FF 值作为魔法值。自定义第一人称 FOV 模组中的值定义了其他 FOV,但不包括瞄准 FOV,而 Ironsight 模组文件中的 "Fov 值" 定义了瞄准 FOV,包括开镜瞄准和非开镜来自腰射的瞄准 FOV。

基本上就是这样了。我现在会把做的修改打包并上传到这里。祝你们玩得开心,希望游戏能稍微好一些。如果有拼写错误的话抱歉,我是一口气写完的。