UE4切换关卡

该博客介绍了如何在游戏中实现场景之间的切换。通过创建一个名为ALevelTranslateVolume的类,当角色与该类的Box组件发生碰撞时,会触发加载新的场景。在角色类中设置了一个接口switchLevel用于根据名称切换关卡。在ALevelTranslateVolume的BeginPlay方法中设置了碰撞事件监听,当角色与Box碰撞时,调用switchLevel切换到指定的新场景。

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

当设计完成一个场景中的游戏的时候或者角色在一个场景中结束战斗后,需要切换到另外一个场景中,这就需要场景的切换了。
新建一个场景切换的Box,当角色和Box发生碰撞的时候,就会自动加载另外一个场景。
首先定义这个Box类:ALevelTranslateVolume

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "LevelTranslateVolume.generated.h"

UCLASS()
class FIRSTPROJECT_API ALevelTranslateVolume : public AActor {
	GENERATED_BODY()

public:
	// Sets default values for this actor's properties
	ALevelTranslateVolume();

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Translate")
	class UBoxComponent* levelTranslateVolume = nullptr;

	class UBillboardComponent* billboard = nullptr;

	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category="Translate")
	FName newLevelName;

protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;

public:
	// Called every frame
	virtual void Tick(float DeltaTime) override;

	UFUNCTION()//如果不添加这个宏,函数就不起作用
	virtual void onBeginOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);
};

// Fill out your copyright notice in the Description page of Project Settings.


#include "LevelTranslateVolume.h"
#include "Components/BoxComponent.h"
#include "Components/BillboardComponent.h"
#include "MainCharacter.h"

// Sets default values
ALevelTranslateVolume::ALevelTranslateVolume() {
	// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = true;

	levelTranslateVolume = CreateDefaultSubobject<UBoxComponent>(TEXT("LevelTranslate"));
	RootComponent = levelTranslateVolume;

	billboard = CreateDefaultSubobject<UBillboardComponent>(TEXT("Billboard"));
	billboard->SetupAttachment(GetRootComponent());

	newLevelName = "SunTemple";
}

// Called when the game starts or when spawned
void ALevelTranslateVolume::BeginPlay() {
	Super::BeginPlay();

	levelTranslateVolume->OnComponentBeginOverlap.AddDynamic(this, &ALevelTranslateVolume::onBeginOverlap);

}

// Called every frame
void ALevelTranslateVolume::Tick(float DeltaTime) {
	Super::Tick(DeltaTime);

}

void ALevelTranslateVolume::onBeginOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult) {
	if (OtherActor){
		AMainCharacter* mainCharacter = Cast<AMainCharacter>(OtherActor);
		if (mainCharacter){
			mainCharacter->switchLevel(newLevelName);
		}
	}
}


在角色类中设置切换开关的接口:

//根据名称切换不同的关卡
void switchLevel(FName name);
void AMainCharacter::switchLevel(FName name) {
	UWorld* world = GetWorld();
	if (world){
		FString mapName = world->GetMapName();
		FName currentMapName(*mapName);
		if (currentMapName != name){
			UGameplayStatics::OpenLevel(world, name);
		}
	}
}

创建ALevelTranslateVolume对应的蓝图类,并且把创建好的蓝图类拖动到场景中,并且设置新地图名称
在这里插入图片描述

aaa

### 使用传送门实现在 Unreal Engine 5 中切换关卡 在 Unreal Engine 5 (UE5) 中实现通过传送门切换关卡的功能涉及多个方面的工作,包括但不限于创建传送门机制、处理不同关卡之间的转换逻辑以及确保玩家重生点的准确性。 #### 创建基础传送门结构 为了建立基本的传送门框架,在场景编辑器中放置两个立方体作为视觉上的“入口”和“出口”。这两个物体应该被赋予碰撞组件以便检测玩家何时接近它们。对于更复杂的项目来说,可能还需要考虑使用蓝图脚本来控制这些行为[^1]。 ```cpp // C++ 示例:为传送门添加触发事件 void ATeleportDoor::BeginPlay() { Super::BeginPlay(); // 假设 TriggerVolume 是指定了触发区域的一个 Box Collision 组件 if(TriggerVolume != nullptr){ TriggerVolume->OnComponentBeginOverlap.AddDynamic(this, &ATeleportDoor::OnOverlapBegin); } } ``` #### 编写蓝图逻辑以支持跨地图旅行 当玩家触碰其中一个传送门时,应启动一个序列来改变当前的游戏世界并重新定位玩家的位置。这可以通过调用 `Open Level` 节点完成,并指定目标级别名称;同时传递额外参数如 `bUseStreaming` 设置为 true 来启用异步加载特性[^2]。 ![Blueprint Logic](https://example.com/blueprint_logic.png) - **设置出生点**:根据所选目的地调整玩家初始坐标与方向。此过程可以在接收端的地图内部署特定的 Actor 或者利用 UE 的默认机制——即 Player Start Actors 定义新位置[^3]。 - **保存状态数据**:如果希望保持某些属性不变(比如生命值、装备等),则需设计一套方案用于存储并在必要时刻恢复这类信息。 #### 地形与其他环境要素准备 考虑到无缝过渡的需求,预先规划好各张地图间的连接方式至关重要。特别是涉及到大型开放世界的开发时,合理运用 Landscape 工具集可以帮助塑造连贯的地貌特征,减少因视角突然转变带来的割裂感[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wb175208

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值