前天看到Unreal 5.1引入了名为Iris的新的同步机制。过去三年一直在做UE4网络层的相关优化,看到这个新的实验特性,还是倍感振奋。在网上搜索了下,并没看到相关的中文资料。在Unreal开发者社区看到了如下文档:
《Experimental: Getting Started With Iris》(https://dev.epicgames.com/community/learning/tutorials/Xexv/unreal-engine-experimental-getting-started-with-iris)
于是在ChatGPT的帮助下,将其翻译成了中文(发现人工智能的翻译水平还是有待提高),有可能是全网比较正式的首篇Iris Replication的中文资料。
《实验特性:Iris入门》
默认情况下,Iris系统是关闭的,不会被编译。要将其包含在您的项目中,请将以下内容添加到您项目的*.Target.cs文件中:
// Enable iris if it is not already on by default
if (!bUseIris)
{
// If we enable Iris for a single target we also need to set the TargetBuildEnvironment to unique, as other projects in the solution might want it compiled out
BuildEnvironment = TargetBuildEnvironment.Unique;
bUseIris = true;
}添加完毕后,在运行GenerateProjectFiles.bat之前,您可以验证Setup.bat是否成功运行。【译者注:对于已经完成编译的工程,原文这步操作似乎没有必要】
之后,当从源代码构建引擎时,Iris应该就会被编译了。值得注意的是,由于这个原因,使用引擎的二进制发行版目前无法启用该系统。
Iris在Unreal Build Tool的ModuleRules中添加了一个实用方法SetupIrisSupport(Target),以便更轻松地、可选地添加Iris所需的依赖项。要在模块中使用Iris,应该在该模块的*.Build.cs文件中调用该方法,该方法根据bUseIris决定添加相关依赖项。
项目的DefaultEngine.ini也必须修改以启用Iris。本文附带了一个处理启用和配置Iris的配置文件示例。
Iris提供了命令行参数“-UseIrisReplication=1”或“-UseIrisReplication=0”,允许使用者在运行时启用或禁用它。
最后值得注意的是,从UE5/Main的CL 22864286开始,默认情况下启用了Iris编译(即bUseIris=true),默认情况下在运行时仍然禁用Iris。为了在项目中启用Iris,仍然需要执行这里的其余步骤。此外,需要为项目启用实验性的Iris插件,并将"net.Iris.UseIrisReplication" CVar设置为1。
主要差异:
还需要注意的是,Iris不支持Replication Graph。虽然Iris没有Replication Graph的“Node”概念,但新的网络对象过滤器和优先级设置器旨在替代Replication Graph提供的功能。
Iris还被设计为完全基于推送的。虽然可以在不使用Push Model的情况下使用Iris。当禁用Push Model时,Iris会回退到使用NetUpdateFrequency轮询所有复制的对象。但是,如果项目未启用Push Model,则可能会导致以下断言消息:"Trying to force enable Iris push model support when push model is disabled, falling back to optional path. Set Net.IsPushModelEnabled true."
要解决此问题,可以将“Net.IsPushModelEnabled”CVar 设置为 true,或者可以将“net.Iris.PushModelMode”CVar 设置为 0 或 2 以禁用或启用Push Model,同时仍允许它运行时可切换。在 5.1 中,net.Iris.PushModelMode 默认设置为 1,这将启用Push Model而无需在运行时切换它的选项,但自 CL 22482725 起,其默认值已更改为 2。
远程过程调用