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

独立游戏《星尘异变》UE5 C++程序开发日志3——UEC++特供的数据类型

本篇日志将介绍FString,FText、FName的用法和相互转换,以及容器TMap,TArray的增删查改

一、字符串相关数据类型:FString、FText、FName

FString是最接近std::string的类型,字符串本身可以看做一个存储char型的动态数组,也可以使用'+'来进行字符串连接

FName是不可修改的字符串类型,其会在定义时生成一个哈希值,适合作为TMap的键

FText最主要的功能是向玩家展示不同的语言包括中文,可以在DataTable中进行设置

UPROPERTY(EditAnywhere,BlueprintReadWrite)
FString S1 = "a";
UPROPERTY(EditAnywhere, BlueprintReadWrite)
FName S2 = "b";
UPROPERTY(EditAnywhere, BlueprintReadWrite)
FText S3 = FText::FromString("c");//FText无法直接用字符串赋值

(三种字符串在蓝图中显示的颜色是不同的)

三种数据类型是可以互相转化的,这里我们统一使用FString作为跳板:

S1 = S3.ToString();//FText向FString转化
S1 = S2.ToString();//FName向FString转化
S2 = FName(S1);//FString向FName转化
S3 = FText::FromString(S1);//FString向FText转化

FString和std::string之间也是可以相互转化的:

S4 = TCHAR_TO_UTF8(*S1);//FString向std::string转化
S1 = UTF8_TO_TCHAR(S4.c_str());//std::string向FString转化

二、容器:TArray,TMap

TArray是一种动态数组,类似于std::array或std::vector,下面是其常用的增删改查方法:

TArray<int>Array;
Array.Add(3);//添加一个元素到末尾
Array[0] = 5;//可以进行随机访问
auto x = Array.FindByPredicate([](const int& x) {return x > 3; });//返回找到的第一个符合条件的的值的指针,没找到返回nullptr
UE_LOG(LogTemp, Warning, TEXT("%d"), *x);
Array.RemoveAt(0);//删除某个索引值对应的元素

TMap是一个哈希表,类似于std::unordered_map,其提供了针对例如FString的UE特殊数据类型的哈希函数,使用方法如下:

TMap<FString, int>Map;
Map.Add("A", 1);//在哈希表中添加一个键值对
//Map["B"] = 2;//注意TMap不能像std::unordered_map一样自动创建一个"B",2的键值对,而是会报错
if(Map.Contains("A"))
{UE_LOG(LogTemp, Warning, TEXT("warning:%d"), Map["A"]);//注意在用键求值是要先查询是否存在Map["A"] = 2;
}
Map.Remove("A");//移除哈希表中对应的元素

下一篇日志我将介绍UE中函数的声明和定义

http://www.lryc.cn/news/328075.html

相关文章:

  • 递归方法的理解
  • css之flex布局文本不换行不显示省略号的解决方法
  • 华清远见STM32U5开发板助力2024嵌入式大赛ST赛道智能可穿戴设备及IOT选题项目开发
  • 若依框架实现不同端用户登录(后台管理用户和前台会员登录——sping security多用户)
  • 【解決|三方工具】Obi Rope 编辑器运行即崩溃问题
  • 岭师大数据技术原理与应用-序章-软工版
  • Leetcode 680. 验证回文串 II
  • 网络安全接入认证-802.1X接入说明
  • iPhone的iOS系统:定义移动智能体验,引领科技潮流之巅
  • 计算机网络:传输控制协议(Transmission Control Protocol-TCP协议
  • GEE实践应用|热岛效应(一)地表温度计算
  • Java查找算法知识点(含面试大厂题和源码)
  • 67、yolov8目标检测和旋转目标检测算法部署Atlas 200I DK A2开发板上
  • A Little Is Enough: Circumventing Defenses For Distributed Learning
  • 文心一言 VS 讯飞星火 VS chatgpt (225)-- 算法导论16.3 7题
  • 【计算机】——51单片机——持续更新
  • QT资源添加调用
  • LeetCode-49. 字母异位词分组【数组 哈希表 字符串 排序】
  • 绘制特征曲线-ROC(Machine Learning 研习十七)
  • .Net 知识杂记
  • 海豚【货运系统源码】货运小程序【用户端+司机端app】源码物流系统搬家系统源码师傅接单
  • 01---java面试八股文——mybatis-------10题
  • 增强现实(AR)的开发工具
  • 用Unity制作正六边形拼成的地面
  • Spark部署详细教程
  • 慧天[HTWATER]:创新城市水务科技,引领行业变革
  • vscode调试Unity
  • JavaScript是如何实现页面渲染的
  • 【YOLOv8 代码解读】数据增强代码梳理
  • 安卓调试桥ADB