5 月:大整理
大整理!大量修复和改进!

欢迎阅读我们上个月最新更新的汇总!

新的本地事件行为
我们正在为一些事件引入新的行为。现在由客户端触发的操作(例如更改视图模式)执行某种事件(例如 ViewModeChange)时,其事件将立即在首先触发它的客户端上被调用。
这意味着如果你正在控制一个角色并按下 V(切换 ViewMode),或者按下 Shift(奔跑),你将立即在客户端上收到相应的 ViewModeChange 或 StanceModeChange 事件,之后才会在服务器上调用并与所有玩家(包括你)同步。
所有已实现此新行为的事件如下:
-
ViewModeChange (Character) -
StanceModeChange (Character) -
WeaponAimModeChange (Character) -
FallingModeChange (Character) -
GaitModeChange (Character) -
SwimmingModeChange (Character)
将来会添加更多事件。
相关问题#779。
缆绳系统重做
nanos world 中的缆绳曾一度处于粗糙状态:物理效果奇怪,臭名昭著的“病毒错误”正在蔓延,它们的行为不像真正的绳索,视觉表示与实际应用的约束不匹配。
但现在,经过深度重构和大量底层改进,我们自豪地说:缆绳终于再次棒极了!它们现在的行为完全符合你对现实缆绳或绳索的期望! 🎉
我们还围绕它们引入了其他几项改进。一些亮点:
- 为
Cable:SetCableSettings()添加了对新参数的支持:enable_stiffness。 - 改进了错误日志记录,现在显示实体名称和 ID,使调试更容易。
- 拾取可拾取物现在会自动分离任何附加的缆绳,尝试将缆绳附加到非模拟物体将抛出错误(因为虚幻引擎不喜欢这样)。
- 调整载具或武器的大小将不再破坏缆绳物理。
AI 改进
MoveTo
Pawn:MoveTo() 系统进行了大量改进,以确保更高的一致性和可靠性,尤其是在事件处理方面。
之前,我们遇到了一个问题:单次 MoveTo 调用会触发多个 MoveComplete (Pawn) 事件,以及不同步和移动数据在会话之间无法正确持久化的问题。
现在,每个 MoveTo 调用都与一个唯一 ID 关联,这在内部有助于跟踪移动是否已完成,防止重复的 MoveComplete 调用。
我们还修复了如果在移动过程中玩家重新连接,MoveTo 不会恢复的情况。
此外,我们修复了 MoveTo 值现在正确同步到客户端的问题,允许你通过服务器和客户端的脚本访问移动数据,并添加了一系列调试和详细日志以帮助调试你的 AI 实现。
相关问题#714。
AI 载具避让
我们改进了 AI 角色与载具的交互方式!
由于我们的布娃娃系统的工作方式,我们必须禁用载具和角色之间的碰撞,以防止载具在撞到角色时突然停止,这样当载具与角色重叠时,布娃娃模式被激活,载具在物理模拟期间只撞击布娃娃网格体。
然而,这有时会导致角色穿透载具。
为了缓解这个问题,我们实现了一个新系统,当载具靠近时自动将角色推开。如果载具高速移动,布娃娃会按预期触发,产生更自然和真实的反应!
请注意,仍然可能遇到角色穿透载具的情况,但现在已大大缓解。
相关问题#672。
道具抓取
我们正在对道具的抓取方式进行一些实验性更改,之前我们使用“硬约束”,在角色抓取道具时不惜一切代价移动道具,使得被抓取的道具物理在某些情况下变得疯狂和闪烁。
因此我们决定改为使用“软约束”,这将使它们在被抓取时物理上更准确,甚至如果你没有正确抓取或距离太远,可能会失去它。
我们正在测试这种新方法,看它是否效果良好。我们还在抓取的最大距离和位置上做了几项改进,使其更加真实。
相关问题#711。
观战回来了!
我们的观战模式(Player:Spectate())已被搁置了一段时间,一些开始出现问题:例如相机附着不正确(在第三人称时它附着在脚上),在第一人称时武器显得僵硬无响应,没有准星或血屏同步。
我们现在已经修复了所有这些问题,并在观战时实现了准星和血屏效果的正确同步!
还有更多工作要做,但这是让观战模式完全重回正轨的初步第一步!
相关问题#978。
水体相关
游泳移动
我们为游泳机制添加了一个小而酷的改进:现在你的相机角度将影响角色的游泳方向,允许你根据所看的方向向上或向下游(除了现有模式之外)!
更好的浮筒
一个重大变化是浮筒的计算:这些是不可见的球体,用于模拟浮力并使物体在水中漂浮。我们改进了浮筒的生成和附着方式,在各种实体尺寸和重量下实现了更好的漂浮行为。
相关问题#958。
AI 游泳
现在 NPC 将始终游向水面,而不是像以前那样无休止地潜入海底。
相关问题#891。
其他水体修复和改进
我们还修复了一些漏洞:
- 之前在水下抓取道具会使道具物理变得疯狂,我们已经修复了这个问题,道具在水下时将被更正确地抓取。
- 我们修复了手榴弹完全没有浮力的问题,现在将正确漂浮。
文件传输
我们的文件传输系统随着时间的推移经历了许多改进和 overhaul,我们进一步改进了它!
现在,每个文件下载后,客户端将校验其完整性以确保在传输过程中没有损坏,有助于防止不一致。如果有任何文件下载失败,日志现在将列出哪些文件失败或仍在等待,有助于调试。
我们还重构了部分服务器端逻辑,试图消除一个罕见的漏洞,即在游戏过程中文件数据包可能被发送给漏洞的玩家,导致致命漏洞日志。
包加载/重载
我们对包重载系统进行了重大改进。之前,在快速连续触发多个 package load/reload/unload 操作的极端情况下,你可能会看到控制台错误,如 "Package not found to HotUnload",甚至包加载和卸载方式不一致。
为了解决这个问题,我们实现了一个排队系统,确保所有加载/重载/卸载请求按顺序(并以独特方式——例如在 load/reload 之后调用 unload 将从加载列表中移除包)处理。
它防止任何包被顺序处理多次,特别是在文件传输仍在进行时。这解决了在运行时包重载期间发生的几个错误和问题。
我们还修复了一个常见的客户端问题,即执行 package reload all 时找不到“默认地图”包。
相关问题#968。
布娃娃同步
自从最近的虚幻引擎更新以来,布娃娃同步变得过于僵硬,导致奇怪的移动。因此我们对其进行了调整,使其在向其他玩家联网时同步更平滑、更自然。
此外,我们改进了旋转同步,显著减少了布娃娃站起来时可能发生的那些生硬的“急转”旋转(从其他玩家视角看)。
布娃娃同步始终是一项技术挑战,向其他玩家同步永远不会像本地发生时那样自然,但在处理布娃娃时我们尝试实现尽可能最好的网络同步。
其他改进
角色坠落

那个臭名昭著的问题,即角色会随机原地坠落,困扰了我们多年,我们终于找到了罪魁祸首并修复了它!
相关问题#809。
道具网络主控
我们改进了道具的网络主控处理方式。之前,如果不是网络主控向道具射击或投掷手榴弹,它根本不会反应,只有主控才能影响它。
现在,系统正确地将网络主控转移给造成伤害的玩家(如射击或投掷手榴弹),使道具在受损时按预期飞走。
武器射速
我们改进了不同帧率下的武器射速,修复了不一致的射击速率。
我们通过用上一帧所花费的时间来补偿射击之间的冷却时间来实现这一点,之前没有考虑到这一点。
请注意,在极低 FPS 的情况下,武器仍将受到 FPS 的限制。我们始终建议将武器射速值设置为至少 0.05,这将确保即使是在 20 fps 的人也能正常射击。
相关问题#730。
日志覆盖
我们修复了一个问题,即当日志从单独的异步线程写入时,异步日志覆盖了控制台和日志文件中的其他日志条目。
现在,所有日志都正确地同步并按顺序追加,确保它们不会重叠。
启用的新插件
我们启用了两个新插件:CommonUI 和 ModelViewViewModel 供 UGC 使用。
结语
本月主要是修复长期存在的问题、改进现有系统并进行一些良好的老式整理。
我们的 GitHub Issues 已经被搁置了相当长一段时间,很多报告都积灰了,并且长时间未得到解决。所以这个月我决定清理它:我浏览了几乎每一个问题,关闭过时的问题并处理仍然相关的问题。
我很自豪地说,这个月我成功处理了 40 多个问题!大多数相关的都得到了适当的修复,少数被移到了反馈板,因为它们更多是关于缺失的功能而不是实际的漏洞。我的计划中还有更多问题即将处理,我的目标是达到零未解决问题!
通过这次清理,我们正式通过了 1,000 个已关闭问题的里程碑(其中大部分已正确修复)! 🎉 我们甚至还没有计算在 Discord 上随意报告的许多漏洞。

还有很多我想改进的地方。游戏的一些技术部分尚未达到我希望的质量水平,我们正在进行许多内部结构和组织变革,将继续进一步改进 nanos world!
啊,如果你发现任何漏洞,请在我们的 GitHub Issues 上发表,如果你有改进建议或希望看到的新脚本功能,请把它们放在我们的反馈板上!
非常感谢大家的全力支持!幕后还有大量工作正在进行,我们尚未宣布。所以请继续关注,因为更多令人兴奋的东西即将到来!


