初学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.创建游戏模式类,在该类上实现所需…...
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值即可,sysctl -p /etc/sysctl.conf net.ipv4.conf.all.accept_redirects0 net.ipv4.tcp_tw_reuse1 n…...
wx.canvasToTempFilePath生成图片保存到相册
微信小程序保存当前画布指定区域的内容导出生成指定大小的图片,记录一下 api:wx.canvasToTempFilePath 效果: 代码:wxml <canvas style"width: {{screenWidth}}px; height: {{canvasHeight}}px;" canvas-id"my…...
HDU1276:士兵队列训练问题 ← STL queue
【题目来源】http://acm.hdu.edu.cn/showproblem.php?pid1276【题目描述】 某部队进行新兵队列训练,将新兵从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列,剩下…...
JS 读取excel文件内容 和 将json数据导出excel文件
一、实现将json数据导出为excel文件 1、通过原生js实现 核心方法: function JSONToExcelConvertor(JSONData, FileName, title, filter) {if (!JSONData)return;//转化json为objectvar arrData typeof JSONData ! object ? JSON.parse(JSONData) : JSONData;va…...
ASP.NET限流器的简单实现
一、滑动时间窗口 我为RateLimiter定义了如下这个简单的IRateLimiter接口,唯一的无参方法TryAcquire利用返回的布尔值确定当前是否超出设定的速率限制。我只提供的两种基于时间窗口的实现,如下所示的基于“滑动时间窗口”的实现类型SliddingWindowRateL…...
汇编语言循环左移和循环右移如何实现的,详细的比喻一下
汇编语言中的循环左移(ROL)和循环右移(ROR)是两种基本的位操作,通常用于低级编程任务,如加密、解密、数据处理等。我将使用一个详细的比喻来解释这两种操作,以使其更易于理解。 循环左移&#…...
ChromeDriver 各版本下载地址
chromedriver 115及115之后版本下载地址:https://googlechromelabs.github.io/chrome-for-testing/ chromedriver 115之前版本下载地址:http://chromedriver.storage.googleapis.com/index.html...
计算机网络之物理层
物理层 1. 物理层的基本概念 2.物理层下面的传输媒体 传输媒体可分为两类,一类是导引型传输媒体,另一类是非导引型传输媒体。 3.传输方式 3.1 串行传输和并行传输 串行传输:串行传输是指数据是一个比特依次发送的,因此在发送端…...
沉浸式航天vr科普馆VR太空主题馆展示
科普教育从小做起,现在我们的很多地方小孩子游乐体验不单单只有草坪玩耍体验,还有很多科普知识的体验馆和游玩馆。虽然现在我们还不能真实的上太空或者潜入海底,但是这些现在已经可以逼真的展示在我们面前。通过一种虚拟现实技术手段。人们带…...
AI电话机器人能否代替人工?优缺点介绍
AI电话机器人是一种基于人工智能技术的自动语音系统,它可以模拟人类的语音交互,执行客服、销售、调查等任务。随着人工智能的发展,AI电话机器人的功能越来越强大,它们在某些领域已经能够替代人工执行任务。那么,AI电话…...
Java —— 多态
目录 1. 多态的概念 2. 多态实现条件 3. 重写 重写与重载的区别 4. 向上转型和向下转型 4.1 向上转型 4.2 向下转型 5. 多态的优缺点 6. 避免在构造方法中调用重写的方法 我们从字面上看"多态"两个字, 多态就是有多种状态/形态. 比如一个人可以有多种状态, …...
UI自动化测试(弹出框,多窗口)
一、弹出框实战 1、在UI自动化测试中经常会遇到Alert弹出框的场景。Alert类是对话框的处理,主要是对alert警告框。confirm确认框,promp消息对话框。 text():获取alert的文本 dismiss ():点击取消 accept():接受 send-keys():输入 from selenium import …...
Python爬虫程序网络请求及内容解析
目录 引言 一、网络请求 1. 导入必要的库 2. 发送请求 3. 处理响应 二、内容解析 1. HTML解析 2. 查找特定元素 3. 查找多个元素 4. 使用选择器选择元素 三、应用示例:爬取网站文章并解析标题和内容 1. 发送请求并解析HTML内容 2. 查找文章元素并提取标…...
C嘎嘎模板
> 作者简介:დ旧言~,目前大二,现在学习Java,c,c,Python等 > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:了解什么是模板,并且能熟练运用函数模…...
数据结构和算法八股与手撕
数据结构和算法八股文 第一章 数据结构 1.1 常见结构 见http://t.csdnimg.cn/gmc3U 1.2 二叉树重点 1.2.1 各种树的定义 满二叉树:只有度为0的结点和度为2的结点,并且度为0的结点在同一层上 完全二叉树:除了最底层节点可能没填满外&…...
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的简单使用(push、pull)1、将本地文件推送至gitee初始化配置用户名及邮箱将本地文件提交至gitee补充 2、将远程仓库文件拉取至本地直接拉拉至其他本地文件夹 一、gitee 注册 官网:http…...
分类预测 | MATLAB实现基于Isomap降维算法与改进蜜獾算法IHBA的Adaboost-SVM集成多输入分类预测
分类预测 | MATLAB实现基于Isomap降维算法与改进蜜獾算法IHBA的Adaboost-SVM集成多输入分类预测 目录 分类预测 | MATLAB实现基于Isomap降维算法与改进蜜獾算法IHBA的Adaboost-SVM集成多输入分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 Isomap-Adaboost-IHBA-…...
如何解决3d max渲染效果图全白这类异常问题?
通过3d max渲染效果图时,经常会出现3Dmax渲染效果图全黑或是3Dmax渲染效果图全白这类异常问题。可能遇到这类问题较多的都是新手朋友。不知如何解决。 3dmax渲染出现异常的问题,该如何高效解决呢?今天小编这里整理几项知识点,大家…...
实测,用 AI (Stitch + Codex) 给产品做个官网
作为一个写了 10 年代码的老程序员,这几年听得最多的一句话就是: “AI 已经可以写代码、做设计了。” 但说实话,我一直是半信半疑的状态(停留在 Cursor 刚出来的那会儿)。 于是,今天我决定不看别人说&…...
三步解决Windows 11卡顿难题:开源工具Win11Debloat让系统效率提升3倍
三步解决Windows 11卡顿难题:开源工具Win11Debloat让系统效率提升3倍 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to de…...
iOS内购避坑指南:从沙盒测试到正式上线的完整流程(附常见错误解决方案)
iOS内购全流程实战:从沙盒测试到生产环境的避坑手册 当你第一次集成iOS内购(IAP)时,是否遇到过这些场景?用户付款后商品迟迟未到账、沙盒测试时收据验证总是失败、审核阶段一切正常但上线后出现大量丢单...这些问题往往…...
保姆级教程:在YOLOv8中手把手集成Coordinate Attention注意力模块(附完整配置文件)
零基础实战:在YOLOv8中集成Coordinate Attention注意力模块全流程解析 当你第一次看到Coordinate Attention(坐标注意力)这个名词时,可能会被它高大上的论文术语吓到。但别担心,今天我们就用最接地气的方式࿰…...
六音音源修复工具:洛雪音乐跨版本兼容解决方案
六音音源修复工具:洛雪音乐跨版本兼容解决方案 【免费下载链接】New_lxmusic_source 六音音源修复版 项目地址: https://gitcode.com/gh_mirrors/ne/New_lxmusic_source 问题溯源:洛雪音乐的音源服务中断危机 在数字音乐生态中,软件版…...
从Hive表平滑迁移到实时湖仓?试试用Apache Paimon的Format Table零成本接入
从Hive表平滑迁移到实时湖仓?Apache Paimon的Format Table零成本接入实战 1. 实时湖仓转型的痛点与破局之道 在传统大数据架构中,Hive作为批处理的核心组件已经服务了无数企业十数年。但随着实时分析需求的爆发式增长,单纯依靠Hive的T1模式越…...
打破游戏边界:Sunshine构建你的无缝云游戏体验
打破游戏边界:Sunshine构建你的无缝云游戏体验 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 想象一下这样的场景:你在客厅的智能电视上玩着3A大作&#x…...
影刀RPA实战:用Python字符串处理提升自动化效率(附5个常用脚本)
影刀RPA实战:5个Python字符串处理脚本解决自动化难题 在影刀RPA的自动化流程中,字符串处理就像流水线上的精密工具,直接决定了数据处理的准确性和效率。当我们需要从混乱的日志中提取关键信息、清洗客户提交的表格数据或转换不同系统的文本格…...
3步解锁Windows运行安卓应用:APK-Installer轻量解决方案
3步解锁Windows运行安卓应用:APK-Installer轻量解决方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 在数字化办公与娱乐融合的今天,安卓应用…...
从“Hello World”到区域赛银牌:我的ACM算法打怪升级全记录(附各阶段工具包)
从“Hello World”到区域赛银牌:我的ACM算法打怪升级全记录 记得大一刚接触编程时,连最简单的冒泡排序都要调试半天。三年后站在领奖台上,回想这段旅程,最珍贵的不是奖牌,而是那些深夜debug的坚持和突破自我的瞬间。这…...
