初学UE5 C++①

游戏类

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.mfbz.cn/a/141302.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

零代码搭建:无需编程基础,轻松搭建数据自己的能源监测管理平台

零代码搭建能源管理平台&#xff0c;其核心是通过使用图形用户界面和可视化建模工具&#xff0c;来减少编写代码的工作量以及技能要求。平台拥有丰富的预定义组件&#xff0c;可以帮助管理人员快速构建应用程序。并可自定义区域框架&#xff0c;在搭建自己区域时&#xff0c;能…

说说对React Hooks的理解?解决了什么问题?

一、是什么 Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性 至于为什么引入hook,官方给出的动机是解决长时间使用和维护react过程中常遇到的问题,例如: 难以重用和共享组件中的与状态相关的逻辑逻辑复杂的组件难以开…

Juniper PPPOE双线路冗余RPM配置

------------------ 浮动静态路由 set routing-options static route 0.0.0.0/0 next-hop pp0.0 qualified-next-hop pp0.1 preference 10 ----------------- RPM测试的内容,包括从哪个接口发起测试,测试ping等等 #指定探针类型用ICMP请求 #探测的目标地址 #探测间隔 #探测阈…

编译原理-语法分析-自上而下分析

文章目录 语法分析器的功能自上而下分析面临的问题LL&#xff08;1&#xff09;分析法左递归的消除直接左递归非直接左递归 消除左递归的算法消除回溯、提左因子FIRST提左因子FOLLOW集 LL(1)的分析条件LL(1)文法构造FIRST和FOLLOW集合构造每个文法符号的FIRST集合构造FOLLOW集合…

windows安装nginx

一、下载安装Nginx 1、官网下载地址&#xff1a;nginx: download 2、下载教程&#xff1a;选择最新的Stable version&#xff08;稳定版本&#xff09;下载到本地 3、下载完成后&#xff0c;解压放入本地非中文的文件夹中&#xff1a; 4、启动nginx&#xff1a;切勿直接双击n…

Django路由层

路由层&#xff08;urls&#xff09; Django的路由层是负责将用户请求映射到相应的视图函数的一层。在Django的MVT架构中&#xff0c;路由层负责处理用户的请求&#xff0c;然后将请求交给相应的视图函数进行处理&#xff0c;最后将处理结果返回给用户。 在Django中&#xff0c…

Redhat7设置国内可用yum源

问题&#xff1a; 因为最近安装了redhat7&#xff0c;在使用的时候提示系统未注册订阅&#xff0c;无法使用官方的yum源进行安装软件。为此&#xff0c;我使用centos7国内的yum源替换redhat的官方的yum源实现软件安装。 “This system is not registered with an entitlement …

机器学习算法实战实战案例代码详解

文章目录 1.问题建模数据预处理 结果分析数据探索特征工程特征选择模型融合 1.问题建模 导入库 import numpy as np import pandas as pd from sklearn.model_selection import KFold from sklearn.metrics import mean_squared_error from sklearn.preprocessing import One…

EtherCAT转Modbus网关的 EtherCAT从站配置案例

兴达易控EtherCAT转Modbus网关&#xff08;XD-MDEC20 &#xff09;是一款具备ETHERCAT从站功能的通讯网关&#xff0c;其主要作用是将ETHERCAT网络和MODBUS-RTU网络连接起来。该网关可作为ETHERCAT总线中的从站使用&#xff0c;同时也能够连接到MODBUS-RTU总线中&#xff0c;作…

Topk问题!(面试高频常考)

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; 剑指offer &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言&#x1f324;️什么是Top-k问题&#xff1f;&#x1f324;️常见的Top-K问题类型☁️寻找…

Halcon 练习(1):模板匹配

文章目录 前言相关视频链接模板匹配介绍Halcon平台使用动态区域截取代码优化固定选取位置添加打印信息添加匹配个数 个人能力不足 前言 Halcon平台的使用需要学习新的知识&#xff0c;这里专门开个新的专栏用来练习Halcon平台使用。 相关视频链接 WPF/HALCON机器视觉合集 模板…

Java16新增特性

前言 前面的文章&#xff0c;我们对Java9、Java10、Java11、Java12 、Java13、Java14、Java15 的特性进行了介绍&#xff0c;对应的文章如下 Java9新增特性 Java10新增特性 Java11新增特性 Java12新增特性 Java13新增特性 Java14新增特性 Java15新增特性 今天我们来一起看一下…

​软考-高级-系统架构设计师教程(清华第2版)【第4章 信息安全技术基础知识(P160~189)-思维导图】​

软考-高级-系统架构设计师教程&#xff08;清华第2版&#xff09;【第4章 信息安全技术基础知识&#xff08;P160~189&#xff09;-思维导图】 课本里章节里所有蓝色字体的思维导图

2023最新版本 从零基础入门C++与QT(学习笔记) -2- 命名空间的使用

&#x1f38f;在不同的命名空间变量名可相同 创建(如下方代码块) &#x1f384;分析一下构成 &#x1f388;-1- namespace 关键字命名空间 &#x1f388;-2- wm9 空间名称 &#x1f388;-3-括号里边正常定义变量即可 namespace wm9 {int a 99;char b A;float c 9.99;char…

C语言——计算n的阶乘

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int i;int n 0;int s1;scanf("%d",&n);for(i1; i<n; i){s*i;}printf("s%d\n",s);return 0; }

JVM:卡表元素如何维护?(写屏障)

写屏障 上面使用记忆集解决了缩减GC Roots扫描范围的问题&#xff0c;现在又抛出来一个新的问题&#xff0c;卡表元素如何维护的呢&#xff1f;&#xff0c;例如它们何时变脏、谁来把它们变脏等。 何时变脏这个问题应该很明确的&#xff0c;原则上应该发生在引用类型字段赋值…

032-从零搭建微服务-定时服务(一)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff08;后端&#xff09;&#xff1a;mingyue: &#x1f389; 基于 Spring Boot、Spring Cloud & Alibaba 的分布式微服务架构基础服务中心 源…

Python 列表 pop()函数使用详解

pop函数使用详解 目录 pop函数使用详解 1、按照索引删除元素 1.1、正数索引 1.2、负数索引 1.3、不指定索引 2、返回被删除的元素 3、不同类型的元素 4、常见错误 pop() 可以「删除」列表中的元素&#xff08;默认最后一个&#xff09;。 语法 list.pop( index ) 参…

Java多线程编程秘籍:各种方案一网打尽,不要错过!

一、多线程实现方式 Java 中实现多线程的方式主要有四种&#xff1a; 继承 Thread 类&#xff1a;这是一种最简单的实现方式&#xff0c;直接继承 Thread 类&#xff0c;重写 run() 方法即可。实现 Runnable 接口&#xff1a;这是一种更加灵活的实现方式&#xff0c;不需要继承…

Zigbee智能家居方案设计

背景 目前智能家居物联网中最流行的三种通信协议&#xff0c;Zigbee、WiFi以及BLE&#xff08;蓝牙&#xff09;。这三种协议各有各的优势和劣势。本方案基于CC2530芯片来设计&#xff0c;CC2530是TI的Zigbee芯片。 网关使用了ESP8266CC2530。 硬件实物 节点板子上带有继电器…