本文为B站系列教学视频 《UE5_C++多人TPS完整教程》 —— 《P24 通往大厅关卡的路径(Path to Lobby)》 的学习笔记,该系列教学视频为 Udemy 课程 《Unreal Engine 5 C++ Multiplayer Shooter》 的中文字幕翻译版,UP主(也是译者)为 游戏引擎能吃么。
文章目录
- P24 通往大厅关卡的路径
- 24.1 指定大厅关卡路径
- 24.2 Summary
P24 通往大厅关卡的路径
本节课将之前硬编码(Hard coding)的大厅关卡 “Lobby
” 路径设置为一个可供玩家输入的变量,这样我们的插件就能够添加到任意项目中,并且在任意项目中能够指定大厅关卡 “Lobby
” 路径,具体的做法是为菜单类 “MenuSetup()
” 函数添加一个入参。
24.1 指定大厅关卡路径
-
在 “
Menu.h
” 中声明 “PathToLobby
”,为 “MenuSetup()
” 添加入参 “LobbyPath
”,并设置其默认值为 “FString(TEXT("/Game/ThirdPerson/Maps/Lobby")))
”。UCLASS() class MULTIPLAYERSESSIONS_API UMenu : public UUserWidget {GENERATED_BODY()public:/* P24 通往大厅关卡的路径(Path to Lobby)*/// 为 MenuSetup() 添加可供玩家输入的参数项(公共连接数和匹配类型)// 设置 NumberOfPublicConnections 默认值为 4,TypeOfMatch 默认值为 "FreeForAll"UFUNCTION(BlueprintCallable)void MenuSetup(int32 NumberOfPublicConnections = 4, FString TypeOfMatch = FString(TEXT("FreeForAll")), FString LobbyPath = FString(TEXT("/Game/ThirdPerson/Maps/Lobby")));/* P24 通往大厅关卡的路径(Path to Lobby)*/...private:...int32 NumPublicConnections{ 4 }; // 公共连接数FString MatchType = { TEXT("FreeForAll") }; // 匹配类型/* P24 通往大厅关卡的路径(Path to Lobby)*/FString PathToLobby = { TEXT("") };/* P24 通往大厅关卡的路径(Path to Lobby)*/ };
-
在 “
Menu.cpp
” 的 “MenuSetup()
” 函数中为 “PathToLobby
” 赋值,此过程需要进行字符串格式化操作。然后在 “OnCreateSession()
” 中修改 “ServerTravel()
函数入参为 “PathToLobby
”,这样void UMenu::MenuSetup(int32 NumberOfPublicConnections, FString TypeOfMatch, FString LobbyPath) {NumPublicConnections = NumberOfPublicConnections;MatchType = TypeOfMatch;/* P24 通往大厅关卡的路径(Path to Lobby)*/PathToLobby = FString::Printf(TEXT("%s?listen"), *LobbyPath);/* P24 通往大厅关卡的路径(Path to Lobby)*/...}...void UMenu::OnCreateSession(bool bWasSuccessful) {if (bWasSuccessful) {...// 会话创建成功后传送至关卡 LobbyUWorld* World = GetWorld();if (World) {/* P24 通往大厅关卡的路径(Path to Lobby)*/// Uworld->ServerTravel:https://docs.unrealengine.com/5.0/en-US/API/Runtime/Engine/Engine/UWorld/ServerTravel/World->ServerTravel(PathToLobby); // 作为监听服务器打开 Lobby 关卡/* P24 通往大厅关卡的路径(Path to Lobby)*/}}else {...}} }
-
至此我们就可以在 “
ThirdPersonMap
” 蓝图关卡中 “Menusetup
” 节点的 “LobbyPath
” 引脚指定大厅的路径了。
-
进行测试。在“
ThirdPersonMap
” 蓝图关卡中 “Menusetup
” 节点的 “LobbyPath
” 引脚指定初学者内容中的关卡 “StarterMap
” 为大厅关卡,编译、保存后运行游戏,可以发现大厅关卡变成了 “StarterMap
”。
24.2 Summary
本节课具体的做法是为菜单类 “MenuSetup()
” 函数添加一个入参 “LobbyPath
”,将之前硬编码的大厅关卡 “Lobby
” 路径设置为一个可供玩家输入的变量,进行测试时以初学者内容中的关卡 “StartMap
”为例,尝试在“ThirdPersonMap
” 蓝图关卡中 “Menusetup
” 节点的 “LobbyPath
” 引脚指定该关卡为大厅关卡。