UE 多人协同 Multi-User Editing Guide
UE官方多用户编辑,其实现是一个C/S架构的方案,官方文档:Multi-User Editing。
UE官方推出了一个多人协作机制,可以使多人共同地编辑同一份地图,并不会造成冲突,并且可以同步其他变动的资源并能够实时生效,能够比较完美地解决协同协作的痛点,本篇文章记录一下启用流程和使用规范以及如何绕过内网的端口限制等问题。
image.png本质上是创建一个Server进程,用于管理多用户编辑的Session,并向各个Client之间传递相互变动的数据。每个Session代表着协同编辑的一个“房间”,只有加入到这个“房间”的人,才能够实时地预览和同步其他人的提交,每个Server上可以创建多个Session,可以由不同的用户创建、加入。
注意:UE并不是直接把变动的资源拷贝到各个Client,而是通过传递变动的数据到各个Client实现相同的表现,在传输效率上更好,但会带来一个问题,对于相同操作的资源,对于uasset来说,并不完全相同,即A用户修改了Weapon.uasset,将会把变动的数据同步到B用户,如果A和B用户都提交了Weapon这个资源,他们的二进制并不完全相同,在合并提交时会有冲突,提交规范还是需要注意的。
使用流程
多用户编辑支持,依赖UE的Multi-User Editing
插件:
启用之后可以在Project Settings
-Plugins
中看到Multi-User Editing
和Multi-User Transactions
选项:
能够配置多用户协作的参数。
在开启插件之后,可以在编辑器Windows
-Developer Tools
中看到Multi-User Browser
选项(也可以在Project Settings
-Plugins
-Multi-User Editing
中开启Enable Multi-User Toolbar Button
):
启动之后会自动搜索网络内可见的UnrealMultiUserServer
服务器
也可以通过Launch a Server
拉起一个UnrealMultiUserServer
进程,在本地创建一个Server。通常情况下,会有一个独立的机器作为Server,供其他用户连接。
Mulit-User Browser
作为Client连接Server时,使用的是UDP协议,默认连接端口号为6666
(Launch a Server
启动默认是6666),也可以自己修改想要指定的端口号,Client会自动检测网络内可达的Server列表,创建Session时可以选择在哪个Server上创建。
注意:Mulit-User Browser
依赖UDP Messaging
插件作为网络传输的方式,所以,如果我们想要修改默认连接的端口号,就需要修改UDP Messaging
中的默认端口号。
可以在Project Settings
-Plugins
-Networking
中修改(将230.0.0.1:6666
修改为230.0.0.1:XXXXX
即可):
注意:230.0.0.1是RFC 5771(IPV4)和RFC 4291(IPV6)定义的多播地址,不能改成其他的地址。
修改完毕后,启动UnrealMultiUserServer即可使用变动后的端口:
image.png独立的Server进程
前面介绍是从UE编辑器中通过Multi-User Browser
中Launch a Server,但是对于Server而言,其实并不需要启动编辑器,UE也是通过拉起一个新的进程传递命令行参数来启动Server的,所以,我们可以自己使用命令行来启动Multi-User Server
:
Engine/Binaries/Win64/UnrealMultiUserServer.exe -UDPMESSAGING_TRANSPORT_UNICAST=0.0.0.0:0 -UDPMESSAGING_TRANSPORT_MULTICAST=230.0.0.1:11111
防火墙策略
注意,因为Multi-User Editing使用的是UDP协议,所以指定的端口必须被防火墙放行才能够检测到Server。
Windows可以使用以下批处理进行添加防火墙规则,保存为.bat
使用管理员权限执行即可:
netsh advfirewall firewall add rule name="allowMultiUserServer" protocol=TCP dir=out localport=11111 action=allow
netsh advfirewall firewall add rule name="allowMultiUserServer" protocol=TCP dir=in localport=11111 action=allow
netsh advfirewall firewall add rule name="allowMultiUserServer" protocol=UDP dir=out localport=11111 action=allow
netsh advfirewall firewall add rule name="allowMultiUserServer" protocol=UDP dir=in localport=11111 action=allow
Mac和Linux可以使用ufw进行防火墙配置:
$ ufw allow 11111/udp
$ ufw allow 11111/tcp