UE4 マルチプレイヤー LAN オンラインゲームにおけるネットワークと再生の設定内容について

バックグラウンド

ゲーム開発やシミュレーション推論では、次のような要件に遭遇することがあります。

  1. ローカル エリア ネットワークを構築するために、多くの人が互いに対戦できます。
  2. 再生できる場合は、全員のプレイプロセスを記録し、プレイヤーが確認できるように再生したり、リプレイを実行したりできます。

そこで、[ネットワーク]と[再生]機能を開発する必要があります。ネットワーキングは RPC メソッドを使用し、イベント送信によって実装されます。再生は、イベントを時系列に記録する方法であり、ネットワーク モジュールから情報をキャプチャして保存することもできます。
しかし、この時点で問題が発生する可能性があります。ネットワークと再生の両方でネットワーク モジュールが使用されます。競合を解決するにはどうすればよいですか? 印刷時のエラー:「クライアントのローミングが失敗しました。保留中のオンライン ゲームの作成に失敗しました」解決方法は?

問題の説明:

  1. UE4 プロジェクトを作成した後、ブループリントを使用してマルチプレイヤー LAN ブループリントを作成し、マルチプレイヤー LAN でテストすると、実行できるようになります。
  2. 再生(リプレイ)システムを独立して作成し、実行することができます。
  3. ただし、マルチプレーヤー LAN と再生システムを一緒に配置すると、それらは同時に存在することはできません。具体的な問題: PIE モードではインターネットに接続して再生できます。ただし、スタンドアロンモードではインターネットに接続できず、再生できません。インディーズ ゲームのリリース中にエラーは報告されませんでした。
  4. テスト後: ルーム セッションは検索できますが、セッションに参加できません。そこで、NetworkError と TravelError を使用してゲームインスタンス (下図に示すブループリント) をテストすることを考えました。
    ここに画像の説明を挿入
    テスト結果: ネットワークはエラーを報告しませんでしたが、TravelError によって報告されたエラーは次のとおりです:クライアント ローミングに失敗しました、保留中のオンライン ゲームの作成に失敗しました
    ここに画像の説明を挿入

テスト結果:

  1. マルチプレイヤー ネットワーク セッション ブループリント、セッションの作成、セッションの検索、セッションへの参加は問題ありません
  2. 再生システムは大丈夫です
  3. 別のネットワークプロジェクトを見つけて、コードを比較して確認したところ。問題は設定にある可能性が最も高いことがわかります。

解決策を見つけた

UE4 プロジェクトの下にある Config/DefaultEngine.ini ファイルを開きます。このファイルには、UE4 ネットワーク設定が含まれています。UE4 が LAN、Steam に接続できるようにするか、インターネットに接続しないようにします。
ここに画像の説明を挿入

対応する角括弧の位置を見つけて、次のコードを追加または変更します。括弧で囲まれた項目がない場合は、自分で作成できます。
私のような大規模な UE4 プロジェクトの場合、DefaultEngine.ini に多くの情報が含まれているため、根気よく探す必要があります。


[/Script/Engine.GameEngine]
#使用井号可注释
#局域网配置,有这条才能连局域网玩
NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="/Script/OnlineSubsystemUtils.IpNetDriver",DriverClassNameFallback="/Script/OnlineSubsystemUtils.IpNetDriver")

#回放系统配置,但无法联网的游戏  也无法启用回放系统。 注意前面有个+,就是说在局域网基础上 追加 对回放的支持。
+NetDriverDefinitions=(DefName="DemoNetDriver",DriverClassName="/Script/Engine.DemoNetDriver",DriverClassNameFallback="/Script/Engine.DemoNetDriver")

#链接到Steam平台的配置,局域网用不上,就先注释掉
#+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")

[/Script/OnlineSubsystemUtils.IpNetDriver]
#一堆Copy过来的代码,不太懂,就直接用了----------------------------
AllowPeerConnections=False
AllowPeerVoice=False
ConnectionTimeout=60.0
InitialConnectTimeout=60.0
RecentlyDisconnectedTrackingTime=120
TimeoutMultiplierForUnoptimizedBuilds=1
KeepAliveTime=0.2
MaxClientRate=100000
MaxInternetClientRate=100000
RelevantTimeout=5.0
SpawnPrioritySeconds=1.0
ServerTravelPause=4.0
NetServerMaxTickRate=30
MaxNetTickRate=120
NetConnectionClassName="/Script/OnlineSubsystemUtils.IpConnection"
MaxPortCountToTry=512
ResolutionConnectionTimeout=20.0
#一堆Copy过来的代码,不太懂,就直接用了----------------------------


[/Script/Engine.NetDriver]
#如果有控制、声音、Actor等需求。这里是从其他地方copy过来的,我眼下用不上,但也保留了
+ChannelDefinitions=(ChannelName=Control, ClassName=/Script/Engine.ControlChannel, StaticChannelIndex=0, bTickOnCreate=true, bServerOpen=false, bClientOpen=true, bInitialServer=false, bInitialClient=true)
+ChannelDefinitions=(ChannelName=Voice, ClassName=/Script/Engine.VoiceChannel, StaticChannelIndex=1, bTickOnCreate=true, bServerOpen=true, bClientOpen=true, bInitialServer=true, bInitialClient=true)
+ChannelDefinitions=(ChannelName=Actor, ClassName=/Script/Engine.ActorChannel, StaticChannelIndex=-1, bTickOnCreate=false, bServerOpen=true, bClientOpen=false, bInitialServer=false, bInitialClient=false)

[OnlineSubsystem]
#无法联网,经测试此种方法无法链接局域网。就好像一个网络开关一样。
#DefaultPlatformService=Null

#允许联网,经测试在断开网线后,此种方法可以组建局域网,并非链接到steam平台。
DefaultPlatformService=Steam

[OnlineSubsystemSteam]
bEnabled=true
SteamDevAppId=480

[/Script/OnlineSubsystemSteam.SteamNetDriver]
NetConnectionClassName=OnlineSubsystemSteam.SteamNetConnection

[/Script/WindowsTargetPlatform.WindowsTargetSettings]
Compiler=VisualStudio2017

設定が完了したら、UE4 エンジンを再起動し、再びスタンドアロン モードでゲームを実行すると、ネットワークと録画再生の両方をサポートできるようになります。

鍵 1:

[/Script/Engine.GameEngine] この設定です。私のゲームは LAN 上にあるので、Steam プラットフォームにリンクする必要はありません。また、LAN は録画と再生をサポートしているため、OnlineSubsystemSteam.SteamNetDriver をコメントして閉じました。

#局域网配置
NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="/Script/OnlineSubsystemUtils.IpNetDriver",DriverClassNameFallback="/Script/OnlineSubsystemUtils.IpNetDriver")

#回放系统配置,但无法联网的游戏  也无法启用回放系统。
+NetDriverDefinitions=(DefName="DemoNetDriver",DriverClassName="/Script/Engine.DemoNetDriver",DriverClassNameFallback="/Script/Engine.DemoNetDriver")

#链接到Steam平台的配置
#+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")
注意:GameNetDriver 和 DemoNetDriver 两个名字要分开,不能用一个替代,否则错误。
我测试时,一看都是一样的,那就合并了把,就把 DemoNetDriver 改成了 GameNetDriver ,结果报错了。

鍵 2:

DefaultPlatformService を Null に設定すると、LAN に接続できなくなります。steamに設定すると、ローカルエリアネットワークに接続できるようになります。
ルーターとインターネット間のリンクを切断した後、ルーターの LAN セグメントで DefaultPlatformService=Steam を使用すると、LAN マルチプレイヤー ゲームを正常に構築できます。ここでのsteamはSteamゲームプラットフォームではないことを説明してください。次のコード

[OnlineSubsystem]
#无法联网,经测试此种方法无法链接局域网。
#DefaultPlatformService=Null

#允许联网,经测试在断开网线后,此种方法可以组建局域网,并非链接到steam平台。
DefaultPlatformService=Steam

上記は経験的な調査に基づいています。間違いがある場合は修正してください。また、友人を助けることを願っています。

おすすめ

転載: blog.csdn.net/leelizc/article/details/129323077