UE5基本数据类型
- bool: 表示布尔值,只有两个取值:
true
或false
,用于表示逻辑条件。 - int8: 表示 8 位的有符号整数,范围是 −128−128 到 127127。
- uint8: 表示 8 位的无符号整数,范围是 00 到 255255。
- int16: 表示 16 位的有符号整数,范围是 −32,768−32,768 到 32,76732,767。
- uint16: 表示 16 位的无符号整数,范围是 00 到 65,53565,535。
- int32: 表示 32 位的有符号整数,范围是 −2,147,483,648−2,147,483,648 到 2,147,483,6472,147,483,647,通常是最常用的整数类型。
- longlong: 表示 64 位的有符号整数,范围非常大,一般用于需要更大数值的情况,占用 8 个字节。
- float: 表示 32 位的单精度浮点数,适合处理小数部分的数值,常用于需要进行物理运算、3D 模型坐标等场景。
- ptrint: 表示指针大小的整数,大小依赖于平台(32 位或 64 位),用于存储指针或地址。
2. 禁止使用 C++ 的基本数据类型:
UE4(虚幻引擎)中推荐使用自己的数据类型(如上所述),而不是直接使用 C++ 的原生数据类型,如 int
、char
、float
等。这是因为虚幻引擎是跨平台的,而不同平台对基础数据类型的大小和实现可能有所不同。使用 UE 提供的跨平台基础类型,可以确保代码在不同平台(如 Windows、Linux、主机游戏设备等)上的一致性,避免平台差异导致的错误或问题。
3 字符串
UE 中的字符串类型:FString、FName 和 FText
FString
- 用途:
FString
是 UE 中最常用的字符串类型,适用于程序端的字符串操作。它是一个动态大小的字符串类,可以存储任何长度的文本。通常用于存储临时数据,比如文件路径、日志信息、调试文本、配置文件内容等。 - 特点:
- 支持对字符串进行复杂的操作(拼接、截取、查找等)。
- 由于它是动态分配内存的,所以可以方便地处理变化长度的文本。
- 它的内存管理较为复杂,通常涉及堆内存,因此在性能敏感的场景中不适合频繁使用。
FName
- 用途:
FName
主要用于 标识符 或 名称记录。它并不是为了存储大量文本而设计的,而是为了优化内存使用和性能,尤其是在涉及到大量相同字符串的场景中(例如对象名、资源名等)。当你有很多重复的字符串时,FName
可以避免多次存储相同的字符串,提高效率。 - 特点:
- 它是基于
FNameEntry
的内存管理机制,所有相同的字符串都只存储一次。 - 与
FString
不同,FName
是不可变的,也就是说它不支持像FString
那样的动态操作。 FName
存储的是字符串的引用(即指向已存储字符串的标识符),而不是整个字符串本身。- 它在执行比较时比
FString
快,因为它直接比较内部存储的索引值,而不是每次比较整个字符串。
- 它是基于
FText
- 用途:
FText
主要用于 国际化(i18n) 和 本地化(l10n) 相关的字符串,适合用于用户界面(UI)展示。FText
支持翻译,并且能够根据不同语言和文化设置提供不同的显示内容。 - 特点:
FText
用于 UI 显示文本,确保文本能根据玩家的语言设置进行翻译和本地化处理。- 它提供了对文本的多语言支持(例如,支持不同的字符串翻译、文化格式化等),是处理多语言项目的关键类。
- 与
FString
和FName
不同,FText
具有更高的内存开销,因为它需要支持本地化的文本数据结构。 FText
的本地化是通过 "Text Localization" 系统进行的,允许对字符串进行翻译和格式化,确保在不同的地区和语言中显示正确的内容。
2. FString、FName 和 FText 的用途:
- FString 用于程序端:它适合用于程序内部的字符串处理,尤其是在非 UI 相关的地方。例如,在游戏逻辑中,使用
FString
可以方便地进行字符串的拼接、处理和转换。 - FName 用于记录名称:由于
FName
采用优化的内存管理,它适用于标识对象或资源的名称。举例来说,在游戏开发中,很多时候你需要比较或者存储大量的对象名、资源名、类名等,这时使用FName
可以有效节省内存并提高性能。比如,在 Unreal 中,很多对象(例如材质、蓝图、声音文件等)都使用FName
来标识其名字。 - FText 用于 UI 端:在 UI 上显示的文本通常需要支持多语言和文化的格式化。这时
FText
就是最佳选择。例如,游戏中的对话框、按钮文字、任务提示等,使用FText
可以方便地管理不同语言的翻译。
#include "CoreMinimal.h"
#include "Engine/Engine.h"void ExampleStringConversions()
{// Using TEXT macro to define a wide character stringFName myName = TEXT("PlayerCharacter");FString myStringFromFName = myName.ToString();// From FString to FName using TEXT macroFString myStringToFName = TEXT("PlayerCharacter");FName myNameFromFString(*myStringToFName);// From FText to FStringFText myText = FText::FromString(TEXT("Hello World"));FString myStringFromFText = myText.ToString();// From FString to FTextFString myStringToFText = TEXT("Hello World");FText myTextFromFString = FText::FromString(myStringToFText);
}
#include "CoreMinimal.h"
#include "Engine/Engine.h"void ExampleFStringFunctions()
{// 构造函数FString str1 = TEXT("Hello");FString str2(TEXT("World"));// 字符串拼接FString concatenatedStr = str1 + TEXT(" ") + str2;str1.Append(TEXT(" Universe"));// 查找和替换int32 index = concatenatedStr.Find(TEXT("World"));if (index != INDEX_NONE){concatenatedStr.ReplaceInline(TEXT("World"), TEXT("Universe"));}// 分割和连接TArray<FString> parts;FString longStr = TEXT("Apple,Banana,Cherry");longStr.ParseIntoArray(parts, TEXT(","), true);FString joinedStr = FString::Join(parts, TEXT(";"));// 大小写转换FString upperStr = concatenatedStr.ToUpper();FString lowerStr = concatenatedStr.ToLower();// 修剪空格FString spacedStr = TEXT(" Trim Me ");FString trimmedStr = spacedStr.TrimStartAndEnd();// 长度检查int32 length = concatenatedStr.Len();bool isEmpty = concatenatedStr.IsEmpty();// 格式化FString formattedStr;formattedStr.Printf(TEXT("Formatted String: %s, Length: %d"), *concatenatedStr, length);// 输出结果UE_LOG(LogTemp, Log, TEXT("Concatenated: %s"), *concatenatedStr);UE_LOG(LogTemp, Log, TEXT("Appended: %s"), *str1);UE_LOG(LogTemp, Log, TEXT("Replaced: %s"), *concatenatedStr);UE_LOG(LogTemp, Log, TEXT("Parsed Parts: %s"), *joinedStr);UE_LOG(LogTemp, Log, TEXT("Upper Case: %s"), *upperStr);UE_LOG(LogTemp, Log, TEXT("Lower Case: %s"), *lowerStr);UE_LOG(LogTemp, Log, TEXT("Trimmed: %s"), *trimmedStr);UE_LOG(LogTemp, Log, TEXT("Length: %d"), length);UE_LOG(LogTemp, Log, TEXT("Is Empty: %s"), isEmpty ? TEXT("True") : TEXT("False"));UE_LOG(LogTemp, Log, TEXT("Formatted: %s"), *formattedStr);
}
相关文章:

UE5基本数据类型
bool: 表示布尔值,只有两个取值:true 或 false,用于表示逻辑条件。int8: 表示 8 位的有符号整数,范围是 −128−128 到 127127。uint8: 表示 8 位的无符号整数,范围是 00 到 255255。int16: 表示 16 位的有符号整数&am…...
Next.js 系统性教学:中间件与国际化功能深入剖析
更多有关Next.js教程,请查阅: 【目录】Next.js 独立开发系列教程-CSDN博客 目录 一、Next.js 中间件 (Middleware) 功能解析 1.1 什么是中间件? 1.2 Next.js 中间件的工作机制 1.3 中间件的功能应用 身份验证与授权 请求重定向 修改请…...

鸿蒙HarmonyOS元服务应用开发实战完全指导
内容提要 元服务概述 元服务开发流程 第一个元服务开发 元服务部署与运行 一、服务概述 1、什么是元服务 在万物互联时代,人均持有设备量不断攀升,设备种类和使用场景更加多样,使得应用开发、应用入口变得更加复杂。在此背景下&#x…...
CT中的2D、MPR、VR渲染、高级临床功能
CT中的2D、MPR、VR渲染 在CT(计算机断层扫描)中,2D、MPR(多平面重建)、VR(体积渲染)是不同的图像显示和处理技术,它们各自有独特的用途和优势。下面分别介绍这三种技术:…...

利用docker-compose来搭建flink集群
1.前期准备 (1)把docker,docker-compose,kafka集群安装配置好 参考文章: 利用docker搭建kafka集群并且进行相应的实践-CSDN博客 这篇文章里面有另外两篇文章的链接,点进去就能够看到 (2&…...

力扣打卡10:K个一组翻转链表
链接:25. K 个一组翻转链表 - 力扣(LeetCode) 这道题需要在链表上,每k个为一组,翻转,链接。 乍一看好像比较容易,其实有很多细节。比如每一组反转后怎么找到上一组的新尾,怎么找到…...

深度学习详解
深度学习(Deep Learning,DL)是机器学习(Machine Learning,ML)中的一个子领域,利用多层次(深层)神经网络来自动从数据中提取特征和规律,模仿人脑的神经系统来进…...

鸿蒙分享(一):添加模块,修改app名称图标
码仓库:https://gitee.com/linguanzhong/share_harmonyos 鸿蒙api:12 新建公共模块common 在entry的oh-package.json5添加dependencies,引入common模块 "dependencies": {"common": "file:../common" } 修改app名称&…...

【Redis】not support: redis
1、查看redis进程 2、查看是否安装redis扩展,此处以宝塔为例...

【集群划分】含分布式光伏的配电网集群电压控制【33节点】
目录 主要内容 模型研究 1.节点电压灵敏度的计算 2.Kmeans聚类划分 3.集群K值 部分代码 运行结果 下载链接 主要内容 该程序参考文献《含分布式光伏的配电网集群划分和集群电压协调控制》,基于社团检测算法,实现基于电气距离和区域电压调节能…...

嵌入式蓝桥杯学习5 定时中断实现按键
Cubemx配置 打开cubemx。 前面的配置与前文一样,这里主要配置基本定时器的定时功能。 1.在Timer中点击TIM6,勾选activated。配置Parameter Settings中的预分频器(PSC)和计数器(auto-reload Register) 补…...

【Java】类似王者荣耀游戏
r77683962/WangZheYouDianRongYao 运行效果图: 类似王者荣耀游戏运行效果图_哔哩哔哩_bilibili...
C++<基本>:union是没有构造函数和析构函数的
今天发现当我在union中包含了多个结构体时,结构体有默认构造函数时,编译报错。 问题点: union不支持构造函数和析构函数union中的元素本身也是不支持构造函数和析构函数的。包含union的结构体也不支持构造函数和析构函数。 出错代码如下&a…...
SQL中IN和NOT操作符的用法
1. IN操作符(布尔逻辑) 在SQL中,IN 是一个用于检查某个字段值是否包含在给定的多个可能值中的布尔操作符。它经常与条件表达式一起使用,通常出现在WHERE子句中。 用法: IN操作符用来确定某个字段的值是否存在于给定…...
C++平常学习用的
4.1 友元函数 4.2 友元类 5.2 类模板 7.2 虚函数dynamic_cast运算 7.2 纯虚函数和抽象类...

JAVA |日常开发中Servlet详解
JAVA |日常开发中Servlet详解 前言一、Servlet 概述1.1 定义1.2 历史背景 二、Servlet 的生命周期2.1 加载和实例化2.2 初始化(init 方法)2.3 服务(service 方法)2.4 销毁(destroy 方法) 三、Se…...

QT实战--QTreeWidget实现两种行颜色+QListWidget样式
本文主要介绍了QTreeWidget实现两种行颜色、点击打开父节点以及设置父子节点之间距离,同时附带介绍了QListWidget样式 树效果图: 列表效果图: 1.树样式的实现 1)使用代码: m_pLeftTreeWidget = new QTreeWidget(this);m_pLeftTreeWidget->setObjectName("suolue_t…...
RPA在IT运维中的实践:自动化监控与维护
一、引言 1. IT运维面临的挑战与RPA的机遇 在IT运维领域,日常的监控、维护和故障响应等工作占据了大量的时间和资源。随着技术的发展,RPA技术提供了自动化这些重复性任务的可能性,从而释放IT团队的潜力,让他们能够专注于更复杂和…...
C# 设置方法执行超时,则执行下一个方法
最近在开发过程中遇到了一个问题,在进行通讯连接时,如果没有连接的话会延时几十秒,而且还设置不了连接超时时间,于是我就想着有没有一种可以判断这个方法的执行时间超过多少秒,就跳出执行其他方法,经过大量…...

【iOS】UIImagePickerController
【iOS】UIImagePickerController 前言 笔者简单学习了iOS开发如何调用本地的一个相册的内容,下面简单介绍一下相关内容。 介绍 UIImagePickerController是iOS平台上的一个类,用于在应用程序中访问设备的照片库、相机和视频录制功能。它提供了一个用户…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...

Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...

MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...

Axure 下拉框联动
实现选省、选完省之后选对应省份下的市区...

【java面试】微服务篇
【java面试】微服务篇 一、总体框架二、Springcloud(一)Springcloud五大组件(二)服务注册和发现1、Eureka2、Nacos (三)负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...

网页端 js 读取发票里的二维码信息(图片和PDF格式)
起因 为了实现在报销流程中,发票不能重用的限制,发票上传后,希望能读出发票号,并记录发票号已用,下次不再可用于报销。 基于上面的需求,研究了OCR 的方式和读PDF的方式,实际是可行的ÿ…...
精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑
精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑 在电子商务领域,转化率与网站性能是决定商业成败的核心指标。今天,我们将深入解析不同类型电商平台的转化率基准,探讨页面加载速度对用户行为的…...
Netty自定义协议解析
目录 自定义协议设计 实现消息解码器 实现消息编码器 自定义消息对象 配置ChannelPipeline Netty提供了强大的编解码器抽象基类,这些基类能够帮助开发者快速实现自定义协议的解析。 自定义协议设计 在实现自定义协议解析之前,需要明确协议的具体格式。例如,一个简单的…...