- 点击C++类文件夹,在右边的区域点击鼠标右键,在弹出的菜单中选择“新建C++类” 
- 在弹出的菜单中选中“显示所有类”,选择GameInstanceSubsystem作为父类, 点击“下一步”按钮 
- 输入子类名称“UVRVIUOnlineGameSubsystem”,选择插件作为新类的目标模块,点击“公共”选择器 
-  打开C++工程,找到".Build.cs"文件,在“PublicDependencyModuleNames”下,添加"MultiPlayerPlugin"  1 2 3 4 5 6 7 8 9 10 11 publicclassLandMaster : ModuleRules{publicLandMaster(ReadOnlyTargetRules Target) : base(Target){PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;PublicDependencyModuleNames.AddRange(newstring[] {"Core","CoreUObject","Engine","InputCore","UMG","Http","Json","JsonUtilities","Sockets","Networking","OnlineSubsystem","OnlineSubsystemUtils","MultiPlayerPlugin"});PrivateDependencyModuleNames.AddRange(newstring[] {"Slate","SlateCore"});}}
-  设置“MultiPlayerPlugin.uplugin”文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 {"FileVersion": 3,"Version": 1,"VersionName":"1.0","FriendlyName":"MultiPlayerPlugin","Description":"plugin for multi player ","Category":"Other","CreatedBy":"VRVIU_Jacky","CreatedByURL":"","DocsURL":"","MarketplaceURL":"","SupportURL":"","EngineVersion":"4.26.0","CanContainContent":true,"Installed":true,"Modules": [{"Name":"MultiPlayerPlugin","Type":"Runtime","LoadingPhase":"Default","WhitelistPlatforms": ["Win32","Win64"]}]}
-  设置插件“.Build.cs”文件,添加需要引用的模块 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 // Copyright Epic Games, Inc. All Rights Reserved.usingUnrealBuildTool;publicclassMultiPlayerPlugin : ModuleRules{publicMultiPlayerPlugin(ReadOnlyTargetRules Target) : base(Target){bEnableUndefinedIdentifierWarnings =false;PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;//bUsePrecompiled = true;PublicIncludePaths.AddRange(newstring[] {"MultiPlayerPlugin/Public"});PrivateIncludePaths.AddRange(newstring[] {});PublicDependencyModuleNames.AddRange(newstring[]{"Core"// ... add other public dependencies that you statically link with here ...});PrivateDependencyModuleNames.AddRange(newstring[]{"CoreUObject","Engine","Slate","SlateCore","UMG","Http","Json","JsonUtilities","Sockets","Networking"// ... add private dependencies that you statically link with here ...});DynamicallyLoadedModuleNames.AddRange(newstring[]{// ... add any modules that your module loads dynamically here ...});}}
-  获取本机IP地址 1 2 3 4 5 6 7 8 9 10 11 12 13 14 FString UVRVIUOnlineGameSubsystem::GetIpAddress(boolbHasPort/*= true*/){FString IpAddr("NONE");boolcanBind =false;TSharedRef<FInternetAddr>LocalIp = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM)->GetLocalHostAddr(*GLog, canBind);if(LocalIp->IsValid()){IpAddr = LocalIp->ToString(bHasPort);}returnIpAddr;}
-  创建会话 1 2 3 FString cmd ="open "+ Map +"?listen";UGameplayStatics::GetPlayerController(GetWorld(), 0)->ConsoleCommand(cmd);m_ServerAddress = ServerAddress.Len() == 0 ? GetIpAddress(false):ServerAddress;
-  加入会话 1 2 3 4 5 UE_LOG(LogTemp, Warning, TEXT("UVRVIUOnlineGameSubsystem::ConnectServer %s"), *IntranetIP);FString cmd ="open "+ IntranetIP;UGameplayStatics::GetPlayerController(GetWorld(), 0)->ConsoleCommand(cmd);m_ServerAddress = IntranetIP;