- 点击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;