初学UE5 C++①

news2024/10/7 2:25:16

游戏类

1.创建所需项的类

2.创建游戏模式类,在该类上实现所需项,引入头文件和构造函数时实例化


三种时间函数类型函数和提示类型


FName、FString、FText类型相互转化

 FName用FName

FString用ToString()

FText用FText::FromString、FromName

//转化
FString MyString = TEXT("I am String");
FName MyName = FName("I am Name");
FString x = TEXT("I am a FString");
FText MyText = FText::FromString(x);

//FString-》FName
FName fName = FName(*MyString);//将string解引用为字符数组?
//FText->FName
fName = FName(*(MyText.ToString()));

//FName->FString
FString fString = fName.ToString();
//FText->Fstring
fString = MyText.ToString();

//FString-》FText
FText fText = FText::FromString(MyString);
//FName->FText
fText = FText::FromName(MyName);

数组容器

	TArray<int>arr;

	//增
	arr.Add(10);
	arr.Add(25);
	arr.Add(40);
	arr.Add(60);
	arr.AddUnique(35);
	arr.AddUnique(40);
	printArr();
	//删
	arr.Remove(10);//移除10元素
	arr.RemoveSingle(40);//移除第一个40
	arr.RemoveAt(1);//移除第一个
	arr.Empty();//移除所有元素
	arr.Reset();//全部为0
	printArr();
	//改
	arr.Insert(80, 0);//在index处插入,原元素后移
	int& b = arr[0];
	b = 24;
	printArr();
	//查
	arr.Contains(10);//是否包含
	arr.Find(24);//是否包含,是返回index,不是返回-1
	arr.FindLast(24);
void ASGameMode::printArr() {
	for (auto It= arr.CreateConstIterator();It;It++)
	{
		UE_LOG(LogTemp,Warning,TEXT("%d"),*It);
		GEngine->AddOnScreenDebugMessage(-1, 5.F, FColor::Blue, FString::Printf (TEXT("%d"),*It));
	}
}

 

键值容器

TMap<int, int>map;
	map.Emplace(0, 1);
	map.Emplace(1, 3);
	map.Emplace(2, 5);

	//删
	map.Remove(1);//按Key删除
	map.Empty();

	//查找
	map.Contains(2);//按key查找
	int* isFind= map.Find(5);//找5,返回指针
	const int*isFindKey= map.FindKey(2);//值找键

	//获取查找
	TArray<int>arrkey;
	TArray<int>arrayVal;
	map.GenerateKeyArray(arrkey);
	map.GenerateValueArray(arrayVal);
void ASGameMode::printmap()
{
	for (auto& TestMap:map) {
		GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Blue, FString::Printf(TEXT("key:%d,Value:%d"), TestMap.Key,TestMap.Value));
		UE_LOG(LogTemp,Display,TEXT("key:%d,Value:%d"), TestMap.Key, TestMap.Value);
	}
}

 

集合容器

TSet<FString>FruitSet;
//增
FruitSet.Add(TEXT("Apple"));
FruitSet.Add(TEXT("Orange"));
FruitSet.Add(TEXT("Banana"));
FruitSet.Emplace("Purple");//比add好,在插入集合时,避免创建临时文件
PrintFruit();
TSet<FString> TestSet2;
TestSet2.Emplace(TEXT("aaa"));
TestSet2.Emplace(TEXT("bbb"));
TestSet2.Emplace(TEXT("ccc"));
FruitSet.Append(TestSet2);
PrintFruit();
FruitSet.Remove(TEXT("aaa"));
FruitSet.Reset();
FruitSet.Empty();
PrintFruit();
int32 len=FruitSet.Num();
bool isFind=FruitSet.Contains(TEXT("bbb"));
FString* isFind2=FruitSet.Find(TEXT("ccc"));

TArray<FString> FruitArr = FruitSet.Array();

TSet<FString>TS2 = { TEXT("a"),TEXT("aa") ,TEXT("aaa") ,TEXT("aaaa") };
//长度排序
TS2.Sort([](FString A, FString B)
	{return A.Len() > B.Len(); });
void ASGameMode::PrintFruit()
{
	for (auto& TestSet : FruitSet) {
		GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Blue, FString::Printf(TEXT("%s"),* TestSet));
		UE_LOG(LogTemp, Display, TEXT("%s"), *TestSet);
	}
}

 

TSet<FString>MySet;
MySet.Add(TEXT("abc"));
FSetElementId index = MySet.Add(TEXT("bbc"));
MySet[index] = TEXT("abd");

//预留内存
TSet<FString> NewSet2;
NewSet2.Reserve(10);

for (int32 i=0;i<10;i++)
{
	NewSet2.Add(FString::Printf(TEXT("No:%d"), i));
}
for (int32 i=0;i<10;i+=2)
{
	NewSet2.Remove(FSetElementId::FromInteger(i));
}
NewSet2.Shrink();//删除末端空白元素
NewSet2.Compact();//删除空白元素

 

基本类型打印

	int32 myInt = 10;
	float myFloat = 5.f;
	bool myBool = true;
	char myChar = 'c';
	FString myString = TEXT("xxx");
	FVector myVector = FVector(1,1,1);

	UE_LOG(LogTemp,Display,TEXT("%d,%f,%d,%c,%s,%s"), myInt, myFloat, myBool, myChar, *myString, *myVector.ToString());

UPROPERTY宏

	//在哪些地方可见
UPROPERTY(VisibleAnywhere)
	int32 Int32_VisibleAnywhere;
UPROPERTY(VisibleDefaultsOnly)
	int32 Int32_VisibleDefaultsOnly;
UPROPERTY(VisibleInstanceOnly)
	int32 Int32_VisibleInstanceOnly;

	//在哪些地方可编辑
UPROPERTY(EditDefaultsOnly)
	FVector V3_EditDefaultsOnly;
UPROPERTY(EditAnywhere)
	FVector V3_EditAnywhere;
UPROPERTY(EditInstanceOnly)
	FVector V3_EditInstanceOnly;

	//在蓝图中可get和getset
UPROPERTY(EditAnywhere,BlueprintReadOnly)
	int32 int32_EditAnywhere_BlueprintReadOnly;
UPROPERTY(EditAnywhere,BlueprintReadWrite)
	int32 int32_EditAnywhere_BlueprintReadWrite;

	//目录
UPROPERTY(EditAnywhere,BlueprintReadWrite,Category="MyIntValue")
	int32 valueB1;
	//子目录
UPROPERTY(EditAnywhere,BlueprintReadWrite,Category="MyIntValue|MySubIntValue")
	int32 ValueB2;

	//起别名
UPROPERTY(EditAnywhere,BlueprintReadWrite,meta=(DisplayName="displayName"))
	int32 ValueB3;

	//条件控制编辑,上者影响下者是否能修改
UPROPERTY(EditAnywhere,BlueprintReadWrite,meta=(DisplayName="Controller"))
	bool isController;
UPROPERTY(EditAnywhere,BlueprintReadOnly,meta=(EditCondition="isController"))
	float ValueB4;

	//变量提示
UPROPERTY(EditAnywhere,BlueprintReadOnly,meta=(ToolTip="isControllerTrue"))
bool isTrue;

函数

//暴露在蓝图,可调用
UFUNCTION(BlueprintCallable,category="MyFunction")
void PrintF1();
//纯虚函数,仅返回值
UFUNCTION(BlueprintCallable,BlueprintPure,category="MyFunction")
bool PrintF2();

//不能定义(CPP不实现),只能重载
//无返回值的是事件、有返回值的是函数
UFUNCTION(BlueprintImplementableEvent)
void Test1();
UFUNCTION(BlueprintImplementableEvent)
int Test2();
UFUNCTION(BlueprintImplementableEvent)
void Test3(const FString &MyString);
UFUNCTION(BlueprintImplementableEvent)
int Test4(const FString& MyString);

//在C++中声明蓝图重载或不重载
//有连线-用连线的方法(重载),否则用CPP写好的方法(不重载)
UFUNCTION(BlueprintNativeEvent)
	void TestA();
UFUNCTION(BlueprintNativeEvent)
	int TestB();
UFUNCTION(BlueprintNativeEvent)
	void TestC(const FString& MyString);
UFUNCTION(BlueprintNativeEvent)
int TestD(const FString& MyString);

//起别名
UFUNCTION(BlueprintCallable,Category="MyFunction",meta=(Display="MyPrintTest"))
	void Printtest();

重载不重载那个要加_implementation


void AMyPawn::TestA_Implementation()
{
}

void AMyPawn::TestB_Implementation()
{
}

void AMyPawn::TestC_Implementation(const FString& MyString)
{
	UE_LOG(LogTemp, Display, TEXT("%s"), *MyString);
}

void AMyPawn::TestD_Implementation(const FString& MyString)
{
}

枚举 

位置同UCLASS

法1

UENUM(BlueprintType)
namespace MyEnumType 
{
	enum MyCustomEnum 
	{
		type1,
		type2,
		type3
	};
}
	UPROPERTY(EditAnywhere,BlueprintReadWrite,Category="MyEnum")
		TEnumAsByte<MyEnumType::MyCustomEnum> MyCustomEnumInst;

 法2


UENUM(BlueprintType)
enum class MyCustomEnum2 :uint8
{
	a UMETA(DisplayName="type1"),
	b UMETA(DisplayName="type2"),
	c UMETA(DisplayName="type3")
};
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyCustomStruct")
		MyCustomEnum2 myCustomStruct;

  

 结构体

//命名必须以F开头
USTRUCT(BlueprintType)//作为蓝图类型,可被蓝图调用
struct FMyStruct
{
	GENERATED_USTRUCT_BODY()
	UPROPERTY(EditAnywhere,BlueprintReadWrite,Category="MyTestStruct")
	int32 Health;
	UPROPERTY(EditAnywhere,BlueprintReadWrite,Category="MyTestStruct")
	FString MyName;
};
	//结构体
	UPROPERTY(EditAnywhere,BlueprintReadWrite,Category="MyCustomStruct")
		FMyStruct myCustomStruct;

 

其他

蓝图生成时暴露

	//蓝图生成时暴露
	UPROPERTY(EditAnywhere,BlueprintReadWrite,Category="MyExposeOnSpawn",meta=(ExposeOnSpawn="ExposeOnSpawnValue"))
		float Health;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1206345.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【nlp】2.1 认识RNN模型

认识RNN模型 1 什么是RNN模型2 RNN模型的作用3 RNN模型的分类:1 什么是RNN模型 RNN(Recurrent Neural Network),,中文称作循环神经网络,它一般以序列数据为输入, 通过网络内部的结构设计有效捕捉序列之间的关系特征,一般也是以序列形式进行输出。 一般单层神经网络结构:…

SAP-SD-外向交货单交期不符

创建外向交货单时报错 销售订单的交期还没到&#xff0c;所以不能做外向交货单 但是货已经加工完成&#xff0c;现在想交货 查看销售订单的交货期为12月15日&#xff08;va03&#xff09; 在VL01N里修改“选择日期为12月15日”就可以了。

C与汇编深入分析

汇编怎么调用C函数 直接调用 BL main传参数 在arm中有个ATPCS规则&#xff08;ARM-THUMB procedure call standard&#xff09;&#xff08;ARM-Thumb过程调用标准&#xff09;。 约定r0-r15寄存器的用途&#xff1a; r0-r3&#xff1a;调用者和被调用者之间传递参数r4-r11…

一些可以参考的文档集合15

之前的文章集合: 一些可以参考文章集合1_xuejianxinokok的博客-CSDN博客 一些可以参考文章集合2_xuejianxinokok的博客-CSDN博客 一些可以参考的文档集合3_xuejianxinokok的博客-CSDN博客 一些可以参考的文档集合4_xuejianxinokok的博客-CSDN博客 一些可以参考的文档集合5…

7天入门python系列之第五天python项目练习

第七天 Python项目实操 编者打算开一个python 初学主题的系列文章&#xff0c;用于指导想要学习python的同学。关于文章有任何疑问都可以私信作者。对于初学者想在7天内入门Python&#xff0c;这是一个紧凑的学习计划。但并不是不可完成的。 学到第7天说明你已经对python有了一…

2.3 Windows驱动开发:内核字符串转换方法

在内核编程中字符串有两种格式ANSI_STRING与UNICODE_STRING&#xff0c;这两种格式是微软推出的安全版本的字符串结构体&#xff0c;也是微软推荐使用的格式&#xff0c;通常情况下ANSI_STRING代表的类型是char *也就是ANSI多字节模式的字符串&#xff0c;而UNICODE_STRING则代…

2.4 Windows驱动开发:内核字符串拷贝与比较

在上一篇文章《内核字符串转换方法》中简单介绍了内核是如何使用字符串以及字符串之间的转换方法&#xff0c;本章将继续探索字符串的拷贝与比较&#xff0c;与应用层不同内核字符串拷贝与比较也需要使用内核专用的API函数&#xff0c;字符串的拷贝往往伴随有内核内存分配&…

ffmpeg扩展支持H265视频流的flv封装

ffmpeg扩展支持H265视频流的flv封装 由于Adobe暂停了对RTMP/FLV标准的更新&#xff0c;所以目前标准中没有支持HEVC视频编码格式。为避免各终端和服务器间的兼容性问题&#xff0c;FFmpeg也没有在RTMP/FLV的协议实现中进行HEVC的相关扩展。CDN联盟制定了相关的协议扩展规范&am…

C++引用 引用做函数参数

一.引用的定义和语法 // 给a取别名为b int &b a; // 修改b的值&#xff0c;a的值也会被修改&#xff0c;因为他们都指向同一个内存空间 b 20; 二.引用的注意事项 1.引用必须初始化如 int&b; 是错误的&#xff0c;因为没有初始化。 2.引用在初始化后&#xff0c;不…

二维码智慧门牌管理系统升级,实现综合运营可视化

文章目录 前言一、升级解决方案概述二、重点指标综合展示三、综合运营可视化 前言 随着科技的发展和城市化进程的加速&#xff0c;传统的门牌管理系统已经无法满足现代社会的需求。为了解决这一问题&#xff0c;一款二维码智慧门牌管理系统应运而生&#xff0c;为城市管理和运…

Jenkins Docker Swarm插件 配置的坑

配置 Docker Host URI 注意&#xff0c;这里要用 http://&#xff01;&#xff01;&#xff01;如果按照提示里用了 tcp:// 则会报错&#xff0c;异常信息如下&#xff1a; 2023-11-13 16:28:42.6830000 [id34] WARNING o.e.j.s.h.ContextHandler$Context#log: Error while s…

如何在TS中使用JS库

在 TypeScript 中使用 JavaScript 库&#xff0c;几种常用的方法。 直接使用&#xff1a;如果 JavaScript 库不提供 TypeScript 类型定义文件&#xff08;.d.ts&#xff09;&#xff0c;您可以直接在 TypeScript 代码中使用该库。您可以通过在 TypeScript 代码的开头添加 //ts-…

【C/PTA——8.数组2(课内实践)】

C/PTA——8.数组2&#xff08;课内实践&#xff09; 7-1 求矩阵的局部极大值7-2 求矩阵各行元素之和7-3 判断上三角矩阵7-4 点赞 7-1 求矩阵的局部极大值 #include<stdio.h> int main() {int m, n, i, j;int arr[100][100];scanf("%d %d", &m, &n);for…

PHP在自己框架中引入composer

目录 1、使用composer之前先安装环境 2、 在项目最开始目录添加composer.json文本文件 3、写入配置文件 composer.json 4、使用composer安装whoops扩展 5、引入composer类并且使用安装异常显示类 1、使用composer之前先安装环境 先安装windows安装composer并更换国内镜像…

部署 KVM 虚拟化平台

虚拟化技术的演变过程分为软件模拟、虚拟化层翻译、容器虚拟化三个阶段 1 软件模拟的技术方式 软件模拟是通过软件完全模拟CPU、网卡、芯片组、磁盘等计算机硬件&#xff0c;因为是软件模拟&#xff0c;所以理论上可以模拟任何硬件&#xff0c;甚至不存在的硬件。但是由于是软…

SAP-SD-一个无交货数量的项目是不允许的,项目将被删除

创建外向交货单时报错 初步判断是没有销售订单库存&#xff0c;普通库存1000&#xff0c;从普通库存转移100到销售订单库存&#xff0c;移动类型413 转移完成 再VL01N就可以了

数据结构 顺序表和链表

1.线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列 线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串.. 线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条直线…

数据仓库入门简介

一&#xff0c;数组仓库介绍 数据仓库 &#xff08;英语&#xff1a;Data Warehouse&#xff0c;简称数仓、DW&#xff09;是一个为数据分析而设计的企业级数据管理系统。它旨在 支持企业决策过程中的数据分析和业务智能 。数据仓库的基本原理是将不同来源的数据整合到一个中心…

机器学习6:逻辑回归

假设我们有一个二元分类问题&#xff0c;有两个特征&#xff08;x1, x2&#xff09;和对应的类别标签&#xff08;y&#xff09;。给定 以下训练数据集&#xff1a; 我们定义逻辑回归模型的假设函数和损失函数。假设函数使用 sigmoid 函 数来将线性函数的输出转换为概率值&…

计算机毕业设计项目选题推荐(免费领源码)SSM+Mysql电商微信小程序09228

摘 要 随着微信小程序的使用越来越广泛&#xff0c;在传统的商业模式中&#xff0c;对于各类生活日常商品&#xff0c;人们习惯于到各种商家店铺购买。然而在快节奏的新时代中&#xff0c;人们不一定能为购买商品腾出时间&#xff0c;更不会耐心挑选自己想要的商品。所以设计一…