目录


AGameMode
AGameMode 是 AGameModeBase 的派生类,它扩展了多玩家支持和一些传统功能。虽然所有新项目默认使用 AGameModeBase,但如果你需要这些额外的功能,可以选择继承自 AGameMode。同时,也可以通过继承 AGameState 来管理游戏状态。

Game Mode 蓝图
可创建派生自GameMode类的蓝图,并将它们用作项目或关卡的默认GameMode 派生自 GameMode的蓝图可进行以下默认设置:
默认Pawn类
HUD类
玩家控制器类
GameState类
PlayerState类
Spectator类
GameMode 的蓝图非常便捷,因为你可以直接通过调整变量来改变其行为,而无需修改代码。这使得同一个 GameMode 可以灵活应用于多个关卡,不需要依赖硬编码的资源引用或每次都请求开发团队做代码变动
设置GameMode

生命周期
Actor生命周期官方文档有详细介绍,这里只介绍常用
-
BeginPlay() :运行时执行一次
-
Tick(float DeltaTime) :运行时每帧执行一次
-
EndPlay(const EEndPlayReason::Type EndPlayReason) :停止运行或者切换关卡时执行一次
ADemoGameMode继承AGameMode
DemoGameMode.h
#pragma once
#include "CoreMinimal.h"
#include "DemoPawn.h"
#include "DemoHUD.h"
#include "DemoPlayerController.h"
#include "DemoGameState.h"
#include "DemoPlayerState.h"
#include "GameFramework/GameMode.h"
#include "DemoGameMode.generated.h"
UCLASS()
class DEMO_API ADemoGameMode : public AGameMode
{
GENERATED_BODY()
public:
ADemoGameMode();
public:
//游戏开始时执行一次
virtual void BeginPlay() override;
//游戏运行时每帧执行一次
virtual void Tick(float DeltaTime) override;
//游戏结束时或者切换关卡时执行一次
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
};
DemoGameMode.cpp
#include "GameMode/DemoGameMode.h"
ADemoGameMode::ADemoGameMode()
{
DefaultPawnClass = ADemoPawn::StaticClass();
HUDClass = ADemoHUD::StaticClass();
PlayerControllerClass = ADemoPlayerController::StaticClass();
GameStateClass = ADemoGameState::StaticClass();
PlayerStateClass = ADemoPlayerState::StaticClass();
}
void ADemoGameMode::BeginPlay()
{
Super::BeginPlay();
}
void ADemoGameMode::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
void ADemoGameMode::EndPlay(const EEndPlayReason::Type EndPlayReason)
{
Super::EndPlay(EndPlayReason);
}
日志打印
第一个输入参数LogTemp是提供给DEFINE_LOG_CATEGORY宏的类别名称。你可以在位于CoreGlobals.h的引擎中找到这些类别。要自行创建自定义日志记录类别。
第二个输入参数Warning是一个日志详细级别,用于将警告打印到控制台和日志文件中。你可以设置不同的日志详细程度,调整日志的换行模式,或者设置日志的文本颜色。
第三个输入参数Text是C语言库函数printf样式中字符串文字的格式。
void ADemoGameMode::BeginPlay()
{
Super::BeginPlay();
//LogTemp : 临时日志,不会保存到文件中
//Warning : 警告日志,黄色 记录级别
//TEXT : 打印内容
//日志级别常用三种:显示(Display)、警告(Warning)、错误(Error)
UE_LOG(LogTemp, Display, TEXT("Hello Unreal Engine!"));
UE_LOG(LogTemp, Warning, TEXT("Hello Unreal Engine!"));
UE_LOG(LogTemp, Error, TEXT("Hello Unreal Engine!");
}

void ADemoGameMode::BeginPlay()
{
Super::BeginPlay();
//将文本打印到屏幕上(和蓝图里的打印字符串一样)
UEngine->AddOnScreenDebugMessage(-1,5.0f,FColor::Blue,TEXT("Hello Unreal Engine!"));
}
变量类型
#pragma once
#include "CoreMinimal.h"
#include "DemoPawn.h"
#include "DemoHUD.h"
#include "DemoPlayerController.h"
#include "DemoGameState.h"
#include "DemoPlayerState.h"
#include "GameFramework/GameMode.h"
#include "DemoGameMode.generated.h"
UCLASS()
class DEMO_API ADemoGameMode : public AGameMode
{
GENERATED_BODY()
public:
ADemoGameMode();
public:
//运行时执行
virtual void BeginPlay() override;
//运行时每一帧都调用
virtual void Tick(float DeltaTime) override;
//运行结束时或者切换关卡时执行
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
//变量类型
//布尔
bool MyBool;
//字节
BYTE MyByte;
//整形32位
int32 Myint32;
//整形64位
int64 MyInt64;
//浮点
float MyFloat;
//FName字符串
FName MyName;
//FString字符串
FString MyString;
//FText字符串
FText MyText;
//向量FVector(x,y,z)
FVector MyVector;
//旋转FRotator(x,y,z) x轴旋转Roll y轴旋转Pitch z轴旋转Yaw
FRotator MyRotation;
//旋转FTransform(P,R,S)位置(Position)+旋转(Rotation)+缩放(Scale)
FTransform MyTransform;
};
1174

被折叠的 条评论
为什么被折叠?



