UEC++基础(二)基础知识

目录

AGameMode

Game Mode 蓝图

生命周期

日志打印

变量类型


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;

};

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值