自己做网站现实么/宁波网络营销策划公司

自己做网站现实么,宁波网络营销策划公司,上海注册,网页游戏网页版本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P34 关卡与大厅之间的过渡(Transition Level And Lobby)》 的学习笔记,该系列教学视频为计算机工程师、程序员、游戏开发者、作家(Engineer, Programmer, Game Developer,…

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


文章目录

  • P34 关卡与大厅之间的过渡(Transition Level And Lobby)
  • 34.1 无缝与非无缝转移
  • 34.2 创建大厅游戏模式 C++ 类
  • 34.3 创建过渡关卡
  • 34.4 进行测试
  • 34.5 Summary


P34 关卡与大厅之间的过渡(Transition Level And Lobby)

本节课将学习虚幻引擎在关卡间进行无缝转移(Seamless Travel)的工作原理以及为何在多人模式游戏更推荐使用无缝转移而不是非无缝转移(Non-seamless Travel);接着,我们将创建一个关卡过渡模式,以便我们在进行关卡转换时自动设置为使用无缝转移;此后我们将创建一个大厅游戏模式,在此模式下,一旦大厅中的玩家人数足够,将开启游戏。
在这里插入图片描述


34.1 无缝与非无缝转移

  1. 虚幻引擎中主要有两种关卡转移(Travel,翻译成切换、漫游也可)方式:无缝转移和非无缝转移方式。两者的主要区别在于,无缝转移是一种非阻塞(Non-blocking)操作,而非无缝转移则是一种阻塞(Blocking)操作。
    每当客户端进行非无缝转移时,它都会断开与当前服务器端的连接,然后再重新连接到这个服务器端,而此过程是需要时间的,再次进行重新连接可能会出现问题。根据非无缝转移的特点,它主要出现以下在三种场景中:客户端首次加载地图、客户端首次连接到服务器端以及上一个多人游戏终止下一个多人游戏开始。
    在这里插入图片描述

  2. 在不同关卡间进行转移时,更推荐使用无缝转移(It‘s preferred to use seamless travel)。它可以带来更流畅的游戏体验(Smoother exprience),还可以避免当前客户端进行重新连接带来的一系列问题,例如由于太多其他新玩家突然加入先前的服务器,导致当前客户端的玩家被先前的服务器禁止加入,从而使得当前客户端找不到先前的服务器。
    想要启用无缝转移,首先需要设置一个过渡地图(Transition map),之所以存在过渡地图,是因为必须始终有一个被加载的世界(用于存放地图),所以在加载新地图之前,我们不能释放原有的地图,由于新旧地图可能会非常大,需要大量的资源(Require a tremendous amount of resources),有了过渡地图,新旧地图就不会同时(Simultanously)存放在存储器内。在设置好过渡地图后,您需要将 游戏模式中的变量 “bUseSeamlessTravel" 设置为 "true”,这样就可以实现无缝转移了。
    在这里插入图片描述

  3. 在虚幻引擎的多人游戏中,与(关卡)转移的函数包括:

    • UWorld::ServerTravel”:此函数仅供服务器端调用。当服务器端调用此函数时,服务器端将会转移至新的关卡,同时所有连接到该服务器的客户端都会随着服务器端转移至这个新的关卡,这个过程是服务器端通过控制所有客户端的玩家控制器并对它们分别调用 “APlayerController:ClientTravel” 来实现的。
    • APlayerController:ClientTravel”:此函数既可以被服务器端调用,也可以被客户端调用。当客户端调用此函数时,客户端将转移至新的服务器,此过程需要提供服务器的新地址;当服务器端调用此函数时,服务器内的所有玩家都将转移至该服务器指定(Specify)的新地图中。
      在这里插入图片描述
  4. 我们接下来的任务将是创建一个大厅游戏模式 “LobbyGameMode”,在此模式下,一旦大厅中有足够多的玩家时,将调用函数 “UWorld::ServerTravel”,使得所有连接到服务器端的客户端随着服务器进入游戏地图,开始游戏。


34.2 创建大厅游戏模式 C++ 类

  1. 在虚幻引擎内容浏览器中新建一个 “GameMode” C++ 类,这里不选择 “GameModeBase” C++类是因为“GameMode” C++ 类有更多的附加功能(Extra additional functionality),命名为 “LobbyGameMode”,路径为“.../Blaster/GameMode”。
    在这里插入图片描述
    在这里插入图片描述

  2. 在 Visual Studio 中打开头文件 “LobbyGameMode.h,声明 "PostLogin() 函数的重写。

    /*** LobbyGameMode.h ***/// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"
    #include "GameFramework/GameMode.h"
    #include "LobbyGameMode.generated.h"/*** */
    UCLASS()
    class BLASTER_API ALobbyGameMode : public AGameMode
    {GENERATED_BODY()/* P34 关卡与大厅之间的过渡(Transition Level And Lobby)*/
    public:virtual void PostLogin(APlayerController* Newplayer) override;	// 原生(Native)游戏模式类函数 PostLogin() 重写,管理玩家登录// https://dev.epicgames.com/documentation/zh-cn/unreal-engine/game-mode-and-game-state-in-unreal-engine/* P34 关卡与大厅之间的过渡(Transition Level And Lobby)*/
    };
    
  3. 在虚幻引擎的内容浏览器中,将 “/LearningKit_Games/Maps” 目录下的地图资产 “LearningKit_Games_Showcase” 复制到 “内容” 目录下的 “Maps” 文件夹中,并重命名为 “BlasterMap”。接着,在 Visual Studio 中打开 “LobbyGameMode.cpp”,完成 “PostLogin()” 函数的重写定义。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  1. 回到虚幻引擎,打开关卡 “Lobby” ,下一步为关卡 “Lobby” 设置游戏模式而不是用原生C++类(Raw C++ class)游戏模式。在内容浏览器 “内容” 目录下的 “Blueprints” 文件夹中新建蓝图类 “BP_LobbyGameMode”,其父类为上文编译好的 “LobbyGameMode
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    /*** LobbyGameMode.cpp ***/// Fill out your copyright notice in the Description page of Project Settings./* P34 关卡与大厅之间的过渡(Transition Level And Lobby)*/
    #include "LobbyGameMode.h"	// 原来自动生成的代码是 #include "GameMode/LobbyGameMode.h",这里需要把 "GameMode/" 去掉,否则找不到文件 "LobbyGameMode.h"
    #include "GameFramework/GameStateBase.h"	void ALobbyGameMode::PostLogin(APlayerController* Newplayer)
    {Super::PostLogin(Newplayer);	// 调用父类 GameModeBase 的 PostLogin() 函数,用于成功登录后调用。int32 NumberOfPlayers = GameState.Get()->PlayerArray.Num();	// 获取上线玩家人数,调用 GameState 指针需要包含头文件 "GameFramework/GameStateBase.h"// GameState 本质是 UE5 新引入的智能指针包装器(Smart pointer wrapper)—— T 对象指针 TObjectPtr,它包含了一组玩家状态的矩阵(An array of player state)// 虚幻引擎为此提供了追踪访问(access tracking)的功能,它可以检测哪些对象正在使用// https://dev.epicgames.com/documentation/zh-cn/unreal-engine/game-mode-and-game-state-in-unreal-engine?application_version=5.0/** // GameState is used to replicate game state relevant properties to all clients. UPROPERTY(Transient)TObjectPtr<AGameStateBase> GameState;**/// 当玩家人数达到一定数量,转移至下一个关卡// 本节课使用硬编码(Hard coding),即指定从关卡 Lobby 转移到 BlasterMap,之后的课程将使用确切的变量if (NumberOfPlayers == 2) {UWorld* World = GetWorld();if (World) {bUseSeamlessTravel = true;										// 设置关卡 Lobby 转移到 BlasterMap 的方式为无缝转移World->ServerTravel(FString("/Game/Maps/BlasterMap?listen"));	// 作为监听服务器打开关卡 BlasterMap}}
    }
    /* P34 关卡与大厅之间的过渡(Transition Level And Lobby)*/
    
  2. 在内容浏览器中双击 “BP_LobbyGameMode” 进入蓝图编辑器,在右侧 “细节” 面板的 “”(Classes)选项卡下将 “默认 Pawn 类”(Default Pawn Class) 设置为 “BP_BlasterCharacter”,然后编译并进行保存。
    在这里插入图片描述

  3. 返回关卡 “Lobby” 编辑器,在右侧 “世界场景设置”(World Settings)面板中,将 “游戏模式”(GameMode)选项卡下的“游戏模式重载”(GameMode Override)改为 “BP_LobbyGameMode”。
    在这里插入图片描述

  4. 在设置好关卡 “Lobby” 的游戏模式后,此时我们不再需要场景中的 Actor “BP_BlasterCharacter”,将其删除即可,因为任何抵达该关卡的玩家都会自动在此生成一个角色。点击工具栏的 “播放”(▶)按钮启动运行,可以看到角色自动生成并 “跳入” 关卡中。
    在这里插入图片描述
    在这里插入图片描述

  5. 也可以在勾选 “BP_LobbyGameMode” 蓝图编辑器中,在右侧细节面板的 “游戏模式”(Game Mode)选项卡下勾选 “使用无缝漫游”(Use Seamlees Travel) ,这个似乎影响不大,因为我们已经在代码中设置无缝转移了。
    在这里插入图片描述


34.3 创建过渡关卡

  1. 在内容浏览器 “内容” 目录下的 “Maps” 文件夹中创建一个 “Empty Level” 过渡关卡,这里选择新建关卡类型为 “Empty Level” 是因为过渡关卡越 “小” 越好(The smaller and more simple, the better),保存关卡,命名为 “TransitionMap”。在这里插入图片描述
    在这里插入图片描述

  2. 在编辑器上方中打开 “编辑”(Edit) 菜单栏下的 “项目设置”(Project Settings),设置 “转移地图”(Transition Map)为 “TransitionMap”。
    在这里插入图片描述

  3. 确保 “GameStartupMap”、“Lobby”、“BlasterMap” 以及 “TransitionMap” 四个关卡都已经添加到 “项目设置” 的 “打包版本中要包括的地图列表” (List of maps to include in a packaged build)选项中。
    在这里插入图片描述


34.4 进行测试

  1. 在打包项目进行测试,可以通过添加已在项目中的资产来丰富关卡,因为它们看起来有些无聊(Sort of boring),具体做法如下:

    • 从 “LearningKit_Games” 目录中寻找并添加资产到 “GameStartupMap”,发挥创造力,为准备开始游戏的玩家制作一个可供预览的游戏主界面(use a bit of creativity and show the player a little bit of a preview of what they’re going to see in the game);
    • 寻找并添加资产到 “Lobby” 中,让加入游戏后等待游戏开始的玩家有自由跑动的小区域(A small area that people can run around in);
    • 最重要的是游戏地图 “BlasterMap”,这是多人匹配游戏中玩家进行枪战的地方(A multiplayer matchmaking type of game where players are shooting at each other),需要考虑放置一些障碍掩体(Obstacles)、道具和武器的拾取点(Pickups)以及其他游戏机制(Gameplay mechanics),尝试加入地形高度的变化(Experiment with changes in elevation)以及隐藏点(Hiding spots)。
      在这里插入图片描述
  2. 由于笔者比较懒且没有创造力(笑),所以直接使用从 Github 下载的 原项目的地图。
    在这里插入图片描述
    在这里插入图片描述

  3. 可以看到教学视频作者在关卡 “GameStartupMap” 和 “Lobby” 中放置并缩放了(Scale and postion)几个浮岛(Floating island),并添加了一些效果(Add some effect),在关卡 “GameStartupMap” 还放置了一个骨骼网格体 Actor 类。这里需要重新设置关卡 “Lobby” 的游戏模式为“BP_LobbyGameMode”。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

  4. 为关卡 “BlasterMap” 新建一个游戏模式蓝图类 “BP_BlasterGameMode”,并在蓝图编辑器右侧 “细节” 面板的 “”(Classes)选项卡下将 “默认 Pawn 类”(Default Pawn Class) 设置为 “BP_BlasterCharacter”,然后编译并进行保存。
    在这里插入图片描述
    在这里插入图片描述

  5. 打开关卡 “BlasterMap” 编辑界面,从左侧 “放置 Actor” (Place Actor)面板中拖拽 “玩家出生点”(Player Start) 至场景中,设置该关卡的游戏模式为“BP_BlasterGameMode”。运行关卡进行测试,玩家角色可以出生在场景中。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  6. 打包项目发送到另一台机器上,进行多人联机测试。关于如何打包项目以及配置、访问 Steam 以进行测试,可以参见笔者之前的学习笔记:

    • 《UE5_C++多人TPS完整教程》学习笔记3 ——《P4 测试多人游戏(Testing Mutiplayer)》
    • 《UE5_C++多人TPS完整教程》学习笔记7 ——《P8 为项目配置 Steam(Configuring A Project for Steam)》
    • 《UE5_C++多人TPS完整教程》学习笔记8 ——《P9 访问 Steam(Acessing Steam)》

    在两台设备上分别登录 Steam 并运行游戏,进入游戏开始界面 “GameStartupmap”。
    在这里插入图片描述
    设备 1 点击 “Host” 按钮创建服务器,进入游戏大厅 “Lobby” 等待设备 2 (小窗)加入。
    在这里插入图片描述
    设备 2 点击 “Join” 按钮加入服务器,成功加入设备 1 的服务器,此时两台设备均通过过渡关“TransitionMap” 无缝转移至游戏关卡 “BlasterMap”。
    在这里插入图片描述
    在这里插入图片描述
    两台设备均可以操控人物进行移动,并且能互相看见对方,测试成功。
    在这里插入图片描述
    在这里插入图片描述

    注意:
    如果角色没法上台阶,可以在角色蓝图 “BP_BlasterCharacter” 的 “角色移动 (CharMoveComp)” 组件里将 “可行走地面角度”(Walkable Floor Angle)的值改大(笔者用的默认数值,没出现这个问题)。
    在这里插入图片描述


    @凯特加莫在这里插入图片描述


34.5 Summary

本节课实现了关卡之间的无缝转移,我们首先分析了虚幻引擎中无缝转移与非无缝转移的工作原理与适用场景,明确了无缝转移在多人游戏中的优势;接着在 Visual Studio 中创建了 “LobbyGameMode” C++ 类并重写 “PostLogin” 函数,实现了玩家数量达标时自动触发服务器端无缝转移至游戏地图的逻辑;然后通过新建过渡关卡 “TransitionMap” 并在项目设置中配置转移地图,确保新旧关卡切换时的资源管理优化;最后通过创建蓝图游戏模式、配置关卡参数以及多机测试,成功测试了玩家从游戏大厅 “Lobby” 到游戏关卡 “BlasterMap” 的无缝转移功能。
在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/72341.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vscode 便用快捷键设置教程

文章目录 简介&#xff1a;1. go to define (跳转到函数定义的位置)2. go to declaration (跳转到函数声明的位置)3. move line &#xff08;上下移动本行代码&#xff09;3.1上下复制本行代码 4. 前进和后退&#xff08;就是前进到光标上一次停留的位置&#xff0c;和后退到那…

【实战篇】【深度解析DeepSeek:从机器学习到深度学习的全场景落地指南】

一、机器学习模型:DeepSeek的降维打击 1.1 监督学习与无监督学习的"左右互搏" 监督学习就像学霸刷题——给标注数据(参考答案)训练模型。DeepSeek在信贷风控场景中,用逻辑回归模型分析百万级用户数据,通过特征工程挖掘出"凌晨3点频繁申请贷款"这类魔…

Vue核心知识:Vue动态权限到按钮完整方案

为了进一步实现上面提到的动态路由功能&#xff0c;并且加入对每个路由的权限控制&#xff08;即增、删、改、查按钮的权限控制&#xff09;&#xff0c;我们需要对数据库、后端接口、前端的设计做一些改进和扩展。下面我将详细描述如何在现有方案的基础上加入对路由的增、删、…

swift 开发效率提升工具

安装github copliot for xcode github/CopilotForXcode brew install --cask github-copilot-for-xcode安装swiftformat for xcode brew install swiftformatXcode Swift File代码格式化-SwiftFormat

Trae智能协作AI编程工具IDE:如何在MacBook Pro下载、安装和配置使用Trae?

Trae智能协作AI编程工具IDE&#xff1a;如何在MacBook Pro下载、安装和配置使用Trae&#xff1f; 一、为什么选择Trae智能协作IDE&#xff1f; 在AI编程新时代&#xff0c;Trae通过以下突破性功能重新定义开发体验&#xff1a; 双向智能增强&#xff1a;AI不仅提供代码补全&a…

C语言:51单片机 基础知识

一、单片机概述 单片机的组成及其特点 单片机是指在一块芯片上集成了CPU、ROM、RAM、定时器/计数器和多种I/O接口电路等&#xff0c;具有一定规模的微型计算机。 特点&#xff1a; 1、单片机的存储器以ROM、RAM严格分工。 2、采用面向控制的指令系统。 3、单片机的I/O口引脚通…

【计算机网络入门】初学计算机网络(八)

目录 1. S-W协议的信道利用率 2. GBN、SR协议的信道利用率 3.术语补充 3.1 滑动窗口协议 3.2 ARQ协议、连续ARQ协议 4. 信道划分介质访问控制 4.1 时分复用&#xff08;TDM&#xff09; 4.2 统计时分复用&#xff08;STDM&#xff09; 4.3 频分复用&#xff08;FDM&a…

HarmonyOS学习第7天: 文本组件点亮界面的文字魔法棒

一、引言 在 HarmonyOS 那丰富多彩的系统界面中&#xff0c;从简洁直观的应用图标&#xff0c;到交互流畅的操作菜单&#xff0c;再到生动形象的图文展示&#xff0c;每一处细节都经过精心雕琢&#xff0c;为用户带来了独特而美妙的视觉与交互体验。而在这琳琅满目的界面元素中…

从零开始:H20服务器上DeepSeek R1 671B大模型部署与压力测试全攻略

前言 最近&#xff0c;我有幸在工作中接触到了DeepSeek R1 671B模型&#xff0c;这是目前中文开源领域参数量最大的高质量模型之一。DeepSeek团队在2024年推出的这款模型&#xff0c;以其惊人的6710亿参数量和出色的推理性能&#xff0c;引起了业界广泛关注。 作为一名AI基础…

Unity中动态切换光照贴图LightProbe的方法

关键代码&#xff1a;LightmapSettings.lightmaps lightmapDatas; LightmapData中操作三张图&#xff1a;lightmapColor,lightmapDir,以及一张ShadowMap 这里只操作前两张&#xff1a; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI;public cl…

实例分割 | yolov11训练自己的数据集

前言 因工作要求使用的都是yolov5系列的模型&#xff0c;今天学习一下最先进的yolov11&#xff0c;记录一下环境配置及训练过程。 1.项目下载及环境安装 源码位置&#xff1a;yolov11 可以看到&#xff0c;这里要求python版本大于等于3.8&#xff0c;我这里安装python3.10.…

大模型推理时的尺度扩展定律

大模型推理时的尺度扩展定律 FesianXu at 20250212 at Wechat Search Team 前言 大模型的尺度扩展定律告诉我们&#xff1a;『LLM的性能会随着模型的参数量、模型的训练量、模型的训练数据量的增加而增加』。训练存在尺度扩展定律&#xff0c;测试也存在尺度扩展定律&#xff…

Linux网络基础(协议 TCP/IP 网络传输基本流程 IP VS Mac Socket编程UDP)

文章目录 一.前言二.协议协议分层分层的好处 OSI七层模型TCP/IP五层(或四层)模型为什么要有TCP/IP协议TCP/IP协议与操作系统的关系(宏观上是如何实现的)什么是协议 三.网络传输基本流程局域网(以太网为例)通信原理MAC地址令牌环网 封装与解包分用 四.IP地址IP VS Mac地址 五.So…

网络安全-使用DeepSeek来获取sqlmap的攻击payload

文章目录 概述DeepSeek使用创建示例数据库创建API测试sqlmap部分日志参考 概述 今天来使用DeepSeek做安全测试&#xff0c;看看在有思路的情况下实现的快不快。 DeepSeek使用 我有一个思路&#xff0c;想要测试sqlmap工具如何dump数据库的&#xff1a; 连接mysql数据库&#…

AI绘画软件Stable Diffusion详解教程(2):Windows系统本地化部署操作方法(专业版)

一、事前准备 1、一台配置不错的电脑&#xff0c;英伟达显卡&#xff0c;20系列起步&#xff0c;建议显存6G起步&#xff0c;安装win10或以上版本&#xff0c;我的显卡是40系列&#xff0c;16G显存&#xff0c;所以跑大部分的模型都比较快&#xff1b; 2、科学上网&#xff0…

Linux NAT和代理服务器

目录 0.前言 1.NAT 网络地址转换 1.1 NAT 技术背景 1.2 NAT的定义与分类 1.3 NAT的工作原理 1.4 NAT的缺陷 2.代理服务器 2.1 概述 2.2 正向代理 2.3 反向代理 2.4 NAT 与代理服务器的区别和联系 3.小结 &#xff08;图像由AI生成&#xff09; 0.前言 在前面的文章中&#x…

ue5 创建多列StreeView的方法与理解

创建StreeView的多列样式怎么就像是创建单行单列差不多?貌似就是在单行单列中加入了多列widget? 示例代码 DetailTabWidget #pragma once #include "TreeViewItemBase.h"class SDetailTabWidget : public SCompoundWidget {SLATE_BEGIN_ARGS(SDetailTabWidget){…

Linux之yum详解

—— 小 峰 编 程 目录 1、Linux软件的安装方式 2、什么是yum 3、配置网络yum源 4、yum命令 【语法】 【yum常用命令】 1、Linux软件的安装方式 在CentOS系统中&#xff0c;软件管理方式通常有三种方式&#xff1a; rpm安装 、 yum安装 以及 编译安装 。 2、什么是yum…

lvgl运行机制分析

lv_timer_handler() 是 LVGL 的“心脏”&#xff1a;这个函数会依次做以下事情&#xff1a; 处理定时器&#xff08;如动画、延迟回调&#xff09;。 读取输入设备&#xff08;如触摸屏、按键的状态&#xff09;。 刷新脏区域&#xff08;仅重绘屏幕上发生变化的区域&#xf…

人大金仓国产数据库与PostgreSQL

一、简介 在前面项目中&#xff0c;我们使用若依前后端分离整合人大金仓&#xff0c;在后续开发过程中&#xff0c;我们经常因为各种”不适配“问题&#xff0c;但可以感觉得到大部分问题&#xff0c;将人大金仓视为postgreSQL就能去解决大部分问题。据了解&#xff0c;Kingba…