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

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++ 的原生数据类型,如 intcharfloat 等。这是因为虚幻引擎是跨平台的,而不同平台对基础数据类型的大小和实现可能有所不同。使用 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);
}

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

相关文章:

  • Next.js 系统性教学:中间件与国际化功能深入剖析
  • 鸿蒙HarmonyOS元服务应用开发实战完全指导
  • CT中的2D、MPR、VR渲染、高级临床功能
  • 利用docker-compose来搭建flink集群
  • 力扣打卡10:K个一组翻转链表
  • 深度学习详解
  • 鸿蒙分享(一):添加模块,修改app名称图标
  • 【Redis】not support: redis
  • 【集群划分】含分布式光伏的配电网集群电压控制【33节点】
  • 嵌入式蓝桥杯学习5 定时中断实现按键
  • 【Java】类似王者荣耀游戏
  • C++<基本>:union是没有构造函数和析构函数的
  • SQL中IN和NOT操作符的用法
  • C++平常学习用的
  • JAVA |日常开发中Servlet详解
  • QT实战--QTreeWidget实现两种行颜色+QListWidget样式
  • RPA在IT运维中的实践:自动化监控与维护
  • C# 设置方法执行超时,则执行下一个方法
  • 【iOS】UIImagePickerController
  • 现代企业营销模式创新:链动 2+1 模式 AI 智能名片商城小程序的应用与价值
  • springboot+Loki+Loki4j+Grafana搭建轻量级日志系统
  • 服务器守护进程化
  • 灵途科技亮相2024世界传感器大会 分享光纤光源技术突破
  • day35—蓝桥杯2024年第16届校赛模拟第二期-T4(最小花费)
  • 【CSS in Depth 2 精译_068】11.2 颜色的定义(下):CSS 中的各种颜色表示法简介
  • 游戏引擎学习第38天
  • P1223 排队接水(贪心)
  • 关于springBoot+vue项目中配置SSL证书问题
  • GUI的最终选择:Tkinter
  • Photohop关于数位板没有压力感,PS画笔的钢笔压力总是显示感叹号的问题解放方法