UEC++游戏模式、变量和容器

游戏模式重载类及函数重写(.h)

AMyGameMode();//游戏模式重载类

//游戏开始运行时,执行BeginPlay()函数
virtual void BeginPlay()override;
//游戏运行时,每帧执行Tick()函数
virtual void Tick(float DeltaTime)override;
//游戏退出或切换关卡会执行EndPlay()函数
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason)override;

 游戏模式获取及函数重载(.cpp)

AMyGameMode::AMyGameMode() {
	//游戏模式重载类(获取C++)
	DefaultPawnClass = AMyPawn::StaticClass();//获取默认Pawn类
	HUDClass = AMyHUD::StaticClass();//获取HUD类
	PlayerControllerClass = AMyPlayerController::StaticClass();//获取玩家控制器类
	GameStateClass = AMyGameState::StaticClass();//获取游戏状态类
	PlayerStateClass = AMyPlayerState::StaticClass();//获取玩家状态类
	SpectatorClass = AMySpectatorPawn::StaticClass();//获取旁观者类

    // 设置默认Pawn为我们的蓝图角色
    static ConstructorHelpers::FClassFinder<APawn> PlayerPawnBPClass(TEXT("/Game/TopDown/Blueprints/BP_TopDownCharacter"));
    if (PlayerPawnBPClass.Class != nullptr){
	    DefaultPawnClass = PlayerPawnBPClass.Class;
    }
    // 设置默认控制器为我们的蓝图控制器
    static ConstructorHelpers::FClassFinder<APlayerController> PlayerControllerBPClass(TEXT("/Game/TopDown/Blueprints/BP_TopDownPlayerController"));
    if(PlayerControllerBPClass.Class != NULL){
	    PlayerControllerClass = PlayerControllerBPClass.Class;
    }
}

void AMyGameMode::BeginPlay(){
	Super::BeginPlay();
}

void AMyGameMode::Tick(float DeltaTime){
	Super::Tick(DeltaTime);
}

void AMyGameMode::EndPlay(const EEndPlayReason::Type EndPlayReason){
	Super::EndPlay(EndPlayReason);
}

变量声明(.h)

//布尔类型变量声明
bool varBool;
//整形32位变量声明
int32 varInt32;
//整形64为变量声明
int64 varInt64;
//浮点16位变量声明
FFloat16 varFloat16;
//浮点32位变量声明
FFloat32 varFloat32;
//浮点双精度变量声明
double varDouble;
//字节类型变量声明
BYTE varByte;
//字符串变量声明
FString varString;
//命名变量声明
FName varName;
//文本变量声明
FText varText;
//向量类型变量声明
FVector varVector;
//旋转类型变量声明
FRotator varRotator;
//变换类型变量声明
FTransform varTransform;

日志输出及打印到屏幕(.cpp)

//临时日志输出 LogTemp临时日志类别名称 Warning日志记录级别 TEXT输出打印的内容
//日志级别 Error(错误)>Warning(警告)>Display(显示)
UE_LOG(LogTemp, Error, TEXT("My Name is UE5!"));
UE_LOG(LogTemp, Warning, TEXT("My Name is UE5!"));
UE_LOG(LogTemp, Display, TEXT("My Name is UE5!"));
//打印到屏幕上
/*参数 key 会获取一个唯一的整型值,用于防止同一消息被多次添加
* 参数 TimeToDisplay 会获取一个浮点值,用于表示消息在显示多少秒后消失
* 参数 DisplayColor 用于指定文本显示的颜色
* 参数 DebugMessage 是要显示的消息。你可以像使用日志那样,在屏幕调试消息中使用格式说明符和变量*/
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("My Name is UE5!"));

基础数据类型(.cpp) 

//基础数据类型的输出打印
int32 MyInt = 10;
float MyFloat = 5.f;
bool MyBool = true;
char MyChar = 'A';
FString MyString1 = TEXT("MyString1");
FVector MyVector = FVector(0, 0, 0);
UE_LOG(LogTemp, Warning, TEXT("%d"), MyInt);
UE_LOG(LogTemp, Warning, TEXT("%f"), MyFloat);
UE_LOG(LogTemp, Warning, TEXT("%d"), MyBool);
UE_LOG(LogTemp, Warning, TEXT("%c"), MyChar);
UE_LOG(LogTemp, Warning, TEXT("%s"), *MyString1);
UE_LOG(LogTemp, Warning, TEXT("%s"), *MyVector.ToString());

容器TArray(.h)

//TArray是数组容器,特点:速度快,内存消耗小,安全性高
TArray<int32>MyArray;//创建整形32位数组
//打印数组
void PrintF();

容器TArray增删改查(.cpp)

//增
MyArray.Add(10);//将当前元素添加到数组中
MyArray.Add(20);
MyArray.Add(30);
MyArray.AddUnique(20);//若数组中存在当前元素,则不添加当前元素到数组中
MyArray.AddUnique(40);//若数组中不存在当前元素,则添加当前元素到数组中
PrintF();//调用打印数组
//删
MyArray.Remove(20);//移除数组中所有等值元素
MyArray.RemoveAt(0);//移除数组中索引值的元素
MyArray.RemoveSingle(10);//移除首个匹配的元素
MyArray.Empty();//清空数组
MyArray.Reset();//重置数组,所有元素重置为0
//改
MyArray.Insert(60, 0);//在0号索引值插入60
int32& temp = MyArray[0];
temp = 50;//创建变量,将数组中0号索引值改为变量的值
//查
MyArray.Contains(10);//查找数组中是否包含当前元素值
MyArray.Find(10);//正向查找数组中第一个匹配的元素值,找到返回true,否则返回false
MyArray.FindLast(10);//反向查找数组中第一个匹配的元素值,找到返回true,否则返回false
//打印数组
void AMyGameMode::PrintF(){
	//创建迭代器打印数组
	for (auto It = MyArray.CreateConstIterator(); It; It++) {
		UE_LOG(LogTemp, Warning, TEXT("%d"), *It);
		GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Blue, FString::Printf(TEXT("%d"), *It));
	}
}

容器TMap(.h)

//TMap是映射容器,里面的数据是成对出现(Key,Value),Value值通过Key值来获取,且Key值唯一
TMap<int32, int32>MyMap;//创建整形32位映射
//打印映射
void PrintMap();

容器TMap增删改查(.cpp)

//增
MyMap.Emplace(0, 1);//将Key值和Value值添加到映射中
MyMap.Emplace(1, 2);
MyMap.Emplace(2, 3);
PrintMap();
//删
MyMap.Remove(0);//移除Key值为0的元素值
MyMap.Empty();//清空映射
//查
MyMap.Contains(1);//查找匹配的Key值是否存在,找到返回true,否则返回false
int32* isFind = MyMap.Find(6);//查找匹配的Key值是否存在,找到返回true,否则返回flase,仅查找一次,返回的是指针
const int32* isfind2 = MyMap.FindKey(2);//反向查找,通过查找Value值获取Key值,返回的是指针
//分别获取Keys和Values
TArray<int32>TestKeys;
TArray<int32>TestValues;
MyMap.GenerateKeyArray(TestKeys);
MyMap.GenerateValueArray(TestValues);

void AMyGameMode::PrintMap(){
	//创建别名打印映射
	for (auto& TestMap : MyMap) {
		UE_LOG(LogTemp, Warning, TEXT("Key:%d Value:%d"), TestMap.Key, TestMap.Value);
		GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Blue, FString::Printf(TEXT("Key:%d Value:%d"), TestMap.Key, TestMap.Value));
	}
}

容器TSet(.h)

//TSet是集容器,通常情况下存储唯一元素
TSet<FString>MySet;//创建字符串集
//打印集
void PrintSet();

容器TSet(.cpp)

//添加元素
MySet.Add(TEXT("Banana"));//将当前元素添加到集中
MySet.Add(TEXT("Grapefruit"));
MySet.Add(TEXT("Apple"));
MySet.Emplace(TEXT("Orange"));//将当前元素添加到集中,Emplace可以避免插入集中创建的临时文件
//合并元素
TSet<FString>MySet2;
MySet2.Add(TEXT("zhangsan"));
MySet2.Add(TEXT("lisi"));
MySet2.Add(TEXT("wangwu"));
MySet.Append(MySet2);//将MySet2里的值合并到MySet集
//PrintSet();
//移除元素
MySet.Remove(TEXT("Banana"));//移除当前元素值
MySet.Reset();//清空集保留内存
MySet.Empty();//清空集释放内存
//查找元素
int32 Count = MySet.Num();//Num函数查询集中保存的元素数量
bool isFind1 = MySet.Contains(TEXT("Banana"));//Contains()函数查询是否包含特定的元素,找到返回true,否则返回false
FString* isFind2 = MySet.Find(TEXT("Banana"));//Find返回指向元素数值的指针,如果映射不包含改键,则返回NULL
//Array函数
TArray<FString>FruitArray = MySet.Array();//函数返回TArray,其中填充了TSet中每一个元素副本
//排序
TSet<FString>TestSet = { TEXT("a"),TEXT("aa"),TEXT("aaaa") };
TestSet.Sort([](FString A, FString B) {return A.Len() > B.Len(); });
//运算符
TSet<FString>NewSet;
NewSet = MySet;//将MySet里面的值赋值给NewSet
NewSet.Add("TEXT(OneOne)");
//[]
FSetElementId Index = NewSet.Add(TEXT("TwoTwo"));//根据FSetElementId访问集对应元素的引用
TestSet[Index] = TEXT("One");
//ReServe
TSet<FString>NewSet1;
NewSet1.Reserve(10);//预先分配内存,若输入的Number大于元素个数,则产生闲置内存(Slack)
//Shrink
for (int32 i = 0; i < 10; i++) {
	NewSet1.Add(FString::Printf(TEXT("NewSet%d"), i));//添加元素
}
for (int32 i = 0; i < 10; i += 2) {
	NewSet1.Remove(FSetElementId::FromInteger(i));//删除元素,产生闲置内存
}
NewSet1.Shrink();//删除末端的空元素
//Compact将容器中所有空白元素集合到一起,放到末尾一起删除
NewSet1.Compact();//注意:Compact可能会改变元素之间的顺序,如果不想改变顺序,可以使用CompactStable
NewSet1.Shrink();

void AMyGameMode::PrintSet(){
	//创建别名打印集
	for (auto& TestSet : MySet) {
		UE_LOG(LogTemp, Warning, TEXT("%s"), *TestSet);
		GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Blue, FString::Printf(TEXT("%s"), *TestSet));
	}
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Woody_Dark

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

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

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

打赏作者

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

抵扣说明:

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

余额充值