使用虚幻引擎(UE5)实现Actor携带过关卡功能(附完整工程源码)
引言: 在虚幻引擎中,每个关卡都被视作一个独立的世界,即UWorld类型。这些世界遵循各自的规则,尽管不同关卡可能共享相似的规则,但它们并不是同一套规则。这有点像不同国家虽然有相似的法律,如都将盗窃视为犯罪,但各自的法律体系是独立的。
虚幻引擎设计了一种机制,即在任一时刻,只允许一个世界(关卡)存在。因此,当我们从一个关卡移动到另一个时,当前关卡的对象会被销毁,新关卡的对象与旧关卡的对象是相互独立的。
那么,有没有办法将对象从一个关卡带到另一个关卡呢?答案是肯定的!这需要利用虚幻引擎提供的无缝漫游功能。
注意:无缝漫游功能无法直接通过蓝图实现,必须借助C++代码。
操作步骤: 1、启用无缝漫游功能,这需要在游戏模式的代码中进行设置,或者通过游戏模式的蓝图面板进行配置(两者选择其一)。
ACarryThroughGameModeBase::ACarryThroughGameModeBase()
{
//应用无缝漫游 Gamemode构造函数中设置
bUseSeamlessTravel =
true
;
}
或是在面板中设置

2、C++中Gamemode重写父类GetSeamlessTravelActorList函数
virtual void GetSeamlessTravelActorList(bool bToTransition, TArray<AActor*>& ActorList) override;
大家需要注意,此函数在切换关卡使用无缝漫游时会被调用,调用时,需要将漫游过关卡的Actor添加到参数ActorList中,即可将Actor携带过关。
实现代码参照
void
ACarryThroughGameModeBase::GetSeamlessTravelActorList(
bool
bToTransition, TArray<AActor*>& ActorList)
{
//需要优先调用,蓝图传入会覆盖ActorList
K2_GetSeamlessTravelActorList(ActorList);
//将自身存储数组数据追加到List数组中
ActorList.Append(TravelActorList);
//必须调用父类函数
Super::GetSeamlessTravelActorList(bToTransition, ActorList);
}
其中K2_GetSeamlessTravelActorList是我添加的函数,用于向蓝图暴露,蓝图可重写,函数声明如下
UFUNCTION(BlueprintImplementableEvent, DisplayName=
"GetSeamlessTravelActorList"
)
void
K2_GetSeamlessTravelActorList(TArray<AActor*>& ActorList);
TravelActorList是我在GameMode中添加的用来存储保存过关Actor的数组。
ACarryThroughGameModeBase.h源码
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/GameModeBase.h"
#include "CarryThroughGameModeBase.generated.h"
/**
*
*/
UCLASS()
class
CARRYTHROUGH_API ACarryThroughGameModeBase :
public
AGameModeBase
{
GENERATED_BODY()
ACarryThroughGameModeBase();
protected
:
virtual
void
GetSeamlessTravelActorList(
bool
bToTransition, TArray<AActor*>& ActorList)
override
;
UFUNCTION(BlueprintCallable)
void
AddTravelActorList(AActor* Actor);
UFUNCTION(BlueprintImplementableEvent, DisplayName=
"GetSeamlessTravelActorList"
)
void
K2_GetSeamlessTravelActorList(TArray<AActor*>& ActorList);
protected
:
UPROPERTY()
TArray<AActor*> TravelActorList;
};
#include "CarryThroughGameModeBase.h"
ACarryThroughGameModeBase::ACarryThroughGameModeBase()
{
//应用无缝漫游
bUseSeamlessTravel =
true
;
}
void
ACarryThroughGameModeBase::GetSeamlessTravelActorList(
bool
bToTransition, TArray<AActor*>& ActorList)
{
//需要优先调用,蓝图传入会覆盖ActorList
K2_GetSeamlessTravelActorList(ActorList);
//将自身存储数组数据追加到List数组中
ActorList.Append(TravelActorList);
//必须调用父类函数
Super::GetSeamlessTravelActorList(bToTransition, ActorList);
}
void
ACarryThroughGameModeBase::AddTravelActorList(AActor* Actor)
{
TravelActorList.Add(Actor);
}
蓝图中重写函数截图

BP_Gaemode继承自ACarryThroughGameModeBase
3、启动切换关卡
切换关卡时注意需要独立进程启动,并且不要使用Openlevel节点!可使指令节点,启用无缝切换地图。

指令命令参照(注意分割空格):ServerTravel /Game/Maps/l02
也可以在C++中调用代码切换,源码结构如下:
/**
* Jumps the server to new level. If bAbsolute is true and we are using seemless traveling, we
* will do an absolute travel (URL will be flushed).
*
* @param URL the URL that we are traveling to
* @param bAbsolute whether we are using relative or absolute travel
* @param bShouldSkipGameNotify whether to notify the clients/game or not
*/
bool
ServerTravel(
const
FString& InURL,
bool
bAbsolute =
false
,
bool
bShouldSkipGameNotify =
false
);
源码位置:UWorld
效果展示


切换后Actor原有状态不变,数据不变。在一些设计中,仍需要考虑携带过关的Actor是否会关联其他对象,关联对象是否要被携带过关,所以这也是一个复杂的设计。
引擎版本: 5.1
本站所有文章、资源等一切内容,皆为在本站的注册网友所发布、上传、提供,如您发现任何内容侵犯了您的合法权益,请携版权等相关证明致信vamwxyz@gmail.com 与我们联系 ,我们将第一时间进行处理。本站周1-周5每日稳定更新优质资源20+,开通永久SVIP全站资源永久免费!
本站防失联地址,请务必收藏:VAMW.XYZ
VAM » 使用虚幻引擎(UE5)实现Actor携带过关卡功能(附完整工程源码)

常见问题FAQ
- 关于解压密码和游戏资源使用方式的简要说明
- 本站默认解压密码为发布页网址:vamw.xyz 注意是小写,如果有其他密码也都在资源页面详细说明了,请认真查看,任何资源请下载后解压、切勿在线解压!VAM场景和人物形象资源下载解压缩后,放到VAM游戏目录里的AddonPackages文件夹后重启游戏即可,如D:\VAM\vam1.22.0.3\AddonPackages;更多教程请点击打开
- 海外用户怎么支付怎么下载?How can overseas users make payments and download?
- 本站支持“支付宝”、“微信”、“paypal”方式支付,如需“paypal”支付,请点击链接 https://paypal.me/vamwxyz;本站所有资源存储于“百度云网盘”,海外用户亦可通过本站教程下载安装注册“百度云网盘”进行资源的下载使用,点击查看教程
Our website supports payments via "Alipay", "WeChat" and "PayPal". If you want to pay with "PayPal", please click here https://paypal.me/vamwxyz;. All the resources on our website are stored in "Baidu Cloud Disk". Overseas users can also download, install and register "Baidu Cloud Disk" according to the tutorials on our website to download and use the resources. Click here to view the tutorials
- 怎么推广赚钱,怎么免费加入VIP?
- 高佣金活动进行中:本站开启用户推广赚钱模式,所有用户可以通过文章页或个人中心的的推广链接进行推广赚钱,普通用户推广佣金为15%;永久VIP推广佣金为30%,所有通过你的推广链接注册的用户,在后续发生的所有消费或充值会员的行为,您都有佣金拿!满50可申请提现!普通用户可以在金额达到充值会员金额的时候申请加入会员!赶快行动吧! 点此查看详情