《UE5_C++多人TPS完整教程》学习笔记23 ——《P24 通往大厅关卡的路径(Path to Lobby)》

文章讲述了如何在UnrealEngine5的多人射击游戏中,将大厅关卡路径从硬编码改为可配置参数,以便于在不同项目中灵活指定。作者介绍了在`MenuSetup`函数中添加`LobbyPath`参数,并在`OnCreateSession`中应用该路径的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


本文为B站系列教学视频 《UE5_C++多人TPS完整教程》 —— 《P24 通往大厅关卡的路径(Path to Lobby)》 的学习笔记,该系列教学视频为计算机工程师、程序员、游戏开发者、作家(Engineer, Programmer, Game Developer, Author) Stephen Ulibarri 发布在 Udemy 上的课程 《Unreal Engine 5 C++ Multiplayer Shooter》 的中文字幕翻译版,UP主(也是译者)为 游戏引擎能吃么
在这里插入图片描述



P24 通往大厅关卡的路径

本节课将之前硬编码(Hard coding)的大厅关卡 “Lobby” 路径设置为一个可供玩家输入的变量,这样我们的插件就能够添加到任意项目中,并且在任意项目中能够指定大厅关卡 “Lobby” 路径,具体的做法是为菜单类 “MenuSetup()” 函数添加一个入参。
在这里插入图片描述


24.1 指定大厅关卡路径

  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)*/
    };
    
  2. 在 “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) {
    		
    		...
    
    		// 会话创建成功后传送至关卡 Lobby
    		UWorld* 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 {
    	
    		...
    		
    		}
    	}
    }
    
  3. 至此我们就可以在 “ThirdPersonMap” 蓝图关卡中 “Menusetup” 节点的 “LobbyPath” 引脚指定大厅的路径了。
    在这里插入图片描述

  4. 进行测试。在“ThirdPersonMap” 蓝图关卡中 “Menusetup” 节点的 “LobbyPath” 引脚指定初学者内容中的关卡 “StarterMap” 为大厅关卡,编译、保存后运行游戏,可以发现大厅关卡变成了 “StarterMap”。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述


24.2 Summary

本节课具体的做法是为菜单类 “MenuSetup()” 函数添加一个入参 “LobbyPath”,将之前硬编码的大厅关卡 “Lobby” 路径设置为一个可供玩家输入的变量,进行测试时以初学者内容中的关卡 “StartMap”为例,尝试在“ThirdPersonMap” 蓝图关卡中 “Menusetup” 节点的 “LobbyPath” 引脚指定该关卡为大厅关卡。
在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值