当前位置: 首页 > news >正文

初学UE5 C++①

目录

游戏类

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

FName、FString、FText类型相互转化

数组容器

键值容器

集合容器

基本类型打印

UPROPERTY宏

函数

枚举 

法1

 法2

 结构体

其他

蓝图生成时暴露


游戏类

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);//移除第一个40arr.RemoveAt(1);//移除第一个arr.Empty();//移除所有元素arr.Reset();//全部为0printArr();//改arr.Insert(80, 0);//在index处插入,原元素后移int& b = arr[0];b = 24;printArr();//查arr.Contains(10);//是否包含arr.Find(24);//是否包含,是返回index,不是返回-1arr.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;

相关文章:

初学UE5 C++①

目录 游戏类 三种时间函数类型函数和提示类型 FName、FString、FText类型相互转化 数组容器 键值容器 集合容器 基本类型打印 UPROPERTY宏 函数 枚举 法1 法2 结构体 其他 蓝图生成时暴露 游戏类 1.创建所需项的类 2.创建游戏模式类&#xff0c;在该类上实现所需…...

ElasticSearch6.8.1 常见错误

1.vm.max_map_count max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] 1.1 修改 /etc/sysctl.conf 只添加最后vm值即可&#xff0c;sysctl -p /etc/sysctl.conf net.ipv4.conf.all.accept_redirects0 net.ipv4.tcp_tw_reuse1 n…...

wx.canvasToTempFilePath生成图片保存到相册

微信小程序保存当前画布指定区域的内容导出生成指定大小的图片&#xff0c;记录一下 api&#xff1a;wx.canvasToTempFilePath 效果&#xff1a; 代码&#xff1a;wxml <canvas style"width: {{screenWidth}}px; height: {{canvasHeight}}px;" canvas-id"my…...

HDU1276:士兵队列训练问题 ← STL queue

【题目来源】http://acm.hdu.edu.cn/showproblem.php?pid1276【题目描述】 某部队进行新兵队列训练&#xff0c;将新兵从一开始按顺序依次编号&#xff0c;并排成一行横队&#xff0c;训练的规则如下&#xff1a;从头开始一至二报数&#xff0c;凡报到二的出列&#xff0c;剩下…...

JS 读取excel文件内容 和 将json数据导出excel文件

一、实现将json数据导出为excel文件 1、通过原生js实现 核心方法&#xff1a; function JSONToExcelConvertor(JSONData, FileName, title, filter) {if (!JSONData)return;//转化json为objectvar arrData typeof JSONData ! object ? JSON.parse(JSONData) : JSONData;va…...

ASP.NET限流器的简单实现

一、滑动时间窗口 我为RateLimiter定义了如下这个简单的IRateLimiter接口&#xff0c;唯一的无参方法TryAcquire利用返回的布尔值确定当前是否超出设定的速率限制。我只提供的两种基于时间窗口的实现&#xff0c;如下所示的基于“滑动时间窗口”的实现类型SliddingWindowRateL…...

汇编语言循环左移和循环右移如何实现的,详细的比喻一下

汇编语言中的循环左移&#xff08;ROL&#xff09;和循环右移&#xff08;ROR&#xff09;是两种基本的位操作&#xff0c;通常用于低级编程任务&#xff0c;如加密、解密、数据处理等。我将使用一个详细的比喻来解释这两种操作&#xff0c;以使其更易于理解。 循环左移&#…...

ChromeDriver 各版本下载地址

chromedriver 115及115之后版本下载地址&#xff1a;https://googlechromelabs.github.io/chrome-for-testing/ chromedriver 115之前版本下载地址&#xff1a;http://chromedriver.storage.googleapis.com/index.html...

计算机网络之物理层

物理层 1. 物理层的基本概念 2.物理层下面的传输媒体 传输媒体可分为两类&#xff0c;一类是导引型传输媒体&#xff0c;另一类是非导引型传输媒体。 3.传输方式 3.1 串行传输和并行传输 串行传输&#xff1a;串行传输是指数据是一个比特依次发送的&#xff0c;因此在发送端…...

沉浸式航天vr科普馆VR太空主题馆展示

科普教育从小做起&#xff0c;现在我们的很多地方小孩子游乐体验不单单只有草坪玩耍体验&#xff0c;还有很多科普知识的体验馆和游玩馆。虽然现在我们还不能真实的上太空或者潜入海底&#xff0c;但是这些现在已经可以逼真的展示在我们面前。通过一种虚拟现实技术手段。人们带…...

AI电话机器人能否代替人工?优缺点介绍

AI电话机器人是一种基于人工智能技术的自动语音系统&#xff0c;它可以模拟人类的语音交互&#xff0c;执行客服、销售、调查等任务。随着人工智能的发展&#xff0c;AI电话机器人的功能越来越强大&#xff0c;它们在某些领域已经能够替代人工执行任务。那么&#xff0c;AI电话…...

Java —— 多态

目录 1. 多态的概念 2. 多态实现条件 3. 重写 重写与重载的区别 4. 向上转型和向下转型 4.1 向上转型 4.2 向下转型 5. 多态的优缺点 6. 避免在构造方法中调用重写的方法 我们从字面上看"多态"两个字, 多态就是有多种状态/形态. 比如一个人可以有多种状态, …...

UI自动化测试(弹出框,多窗口)

一、弹出框实战 1、在UI自动化测试中经常会遇到Alert弹出框的场景。Alert类是对话框的处理&#xff0c;主要是对alert警告框。confirm确认框&#xff0c;promp消息对话框。 text():获取alert的文本 dismiss ():点击取消 accept():接受 send-keys():输入 from selenium import …...

Python爬虫程序网络请求及内容解析

目录 引言 一、网络请求 1. 导入必要的库 2. 发送请求 3. 处理响应 二、内容解析 1. HTML解析 2. 查找特定元素 3. 查找多个元素 4. 使用选择器选择元素 三、应用示例&#xff1a;爬取网站文章并解析标题和内容 1. 发送请求并解析HTML内容 2. 查找文章元素并提取标…...

C嘎嘎模板

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;了解什么是模板&#xff0c;并且能熟练运用函数模…...

数据结构和算法八股与手撕

数据结构和算法八股文 第一章 数据结构 1.1 常见结构 见http://t.csdnimg.cn/gmc3U 1.2 二叉树重点 1.2.1 各种树的定义 满二叉树&#xff1a;只有度为0的结点和度为2的结点&#xff0c;并且度为0的结点在同一层上 完全二叉树&#xff1a;除了最底层节点可能没填满外&…...

windiws docker 部署jar window部署docker 转载

Windows环境下从安装docker到部署前后端分离项目(springboot+vue) 一、前期准备 1.1所需工具: 1.2docker desktop 安装 二、部署springboot后端项目 2.1 部署流程 三、部署vue前端项目 3.1相关条件 3.2部署流程 四、前后端网络请求测试 一、前期准备 1.1所需工具: ①docke…...

使用git上传代码至gitee入门(1)

文章目录 一、gitee注册新建仓库 二、git的下载三、git的简单使用&#xff08;push、pull&#xff09;1、将本地文件推送至gitee初始化配置用户名及邮箱将本地文件提交至gitee补充 2、将远程仓库文件拉取至本地直接拉拉至其他本地文件夹 一、gitee 注册 官网&#xff1a;http…...

分类预测 | MATLAB实现基于Isomap降维算法与改进蜜獾算法IHBA的Adaboost-SVM集成多输入分类预测

分类预测 | MATLAB实现基于Isomap降维算法与改进蜜獾算法IHBA的Adaboost-SVM集成多输入分类预测 目录 分类预测 | MATLAB实现基于Isomap降维算法与改进蜜獾算法IHBA的Adaboost-SVM集成多输入分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 Isomap-Adaboost-IHBA-…...

如何解决3d max渲染效果图全白这类异常问题?

通过3d max渲染效果图时&#xff0c;经常会出现3Dmax渲染效果图全黑或是3Dmax渲染效果图全白这类异常问题。可能遇到这类问题较多的都是新手朋友。不知如何解决。 3dmax渲染出现异常的问题&#xff0c;该如何高效解决呢&#xff1f;今天小编这里整理几项知识点&#xff0c;大家…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...