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.rhkb.cn/news/486720.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SpringMVC】参数传递 重定向与转发 REST风格

文章目录 参数传递重定向与转发REST风格 参数传递 ModelAndView&#xff1a;包含视图信息和模型数据信息 public ModelAndView index1(){// 返回页面ModelAndView modelAndView new ModelAndView("视图名");// 或// ModelAndView modelAndView new ModelAndView(…

软件工程 概述

软件 不仅仅是一个程序代码。程序是一个可执行的代码&#xff0c;它提供了一些计算的目的。 软件被认为是集合可执行的程序代码&#xff0c;相关库和文档的软件。当满足一个特定的要求&#xff0c;就被称为软件产品。 工程 是所有有关开发的产品&#xff0c;使用良好定义的&…

【数字化】华为企业数字化转型-认知篇

导读&#xff1a;企业数字化转型的必要性在于&#xff0c;它能够帮助企业适应数字化时代的需求&#xff0c;提升运营效率&#xff0c;创新业务模式&#xff0c;增强客户互动&#xff0c;从而在激烈的市场竞争中保持领先地位并实现可持续发展。通过学习华为企业数字化转型相关理…

Android学习15--charger

1 概述 最近正好在做关机充电这个&#xff0c;就详细看看吧。还是本着保密的原则&#xff0c;项目里的代码也不能直接用&#xff0c;这里就用的Github的。https://github.com/aosp-mirror 具体位置是&#xff1a;https://github.com/aosp-mirror/platform_system_core/tree/mai…

Leetcode刷题(81~90)

算法是码农的基本功&#xff0c;也是各个大厂必考察的重点&#xff0c;让我们一起坚持写题吧。 遇事不决&#xff0c;可问春风&#xff0c;春风不语&#xff0c;即是本心。 我们在我们能力范围内&#xff0c;做好我们该做的事&#xff0c;然后相信一切都事最好的安排就可以啦…

ARINC 标准全解析:航空电子领域多系列标准的核心内容、应用与重要意义

ARINC标准概述 ARINC标准是航空电子领域一系列重要的标准规范&#xff0c;由航空电子工程委员会&#xff08;AEEC&#xff09;编制&#xff0c;众多航空公司等参与支持。这些标准涵盖了从飞机设备安装、数据传输到航空电子设备功能等众多方面&#xff0c;确保航空电子系统的兼…

【数据库】关系代数和SQL语句

一 对于教学数据库的三个基本表 学生S(S#,SNAME,AGE,SEX) 学习SC(S#,C#,GRADE) 课程(C#,CNAME,TEACHER) &#xff08;1&#xff09;试用关系代数表达式和SQL语句表示&#xff1a;检索WANG同学不学的课程号 select C# from C where C# not in(select C# from SCwhere S# in…

学习记录:js算法(一百一十八):连接所有点的最小费用

文章目录 连接所有点的最小费用思路一 连接所有点的最小费用 给你一个points 数组&#xff0c;表示 2D 平面上的一些点&#xff0c;其中 points[i] [xi, yi] 。 连接点 [xi, yi] 和点 [xj, yj] 的费用为它们之间的 曼哈顿距离 &#xff1a;|xi - xj| |yi - yj| &#xff0c;其…

Java项目实战II基于微信小程序的小区租拼车管理信息系统 (开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着城市化进程的加速&#xff0c;小区居民对于出行方…

数据结构与算法之美:单链表

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《数据结构与算法之美》、《编程之路》、《题海拾贝》 欢迎点赞&#xff0c;关注&#xff01; 目录 …

样品前处理工作站自动化操作

样品前处理工作站通过集成多种技术和自动化模块&#xff0c;实现了对样品的高效、精准处理。以下是实现自动化操作的关键步骤和原理&#xff1a; 1、集成多种技术&#xff1a;工作站通常集成了液体处理、固相萃取、离心、过滤等多种技术。这些技术的结合使得工作站能够完成从样…

redis安装和使用教程【保姆级】

1.下载 通过网盘分享的文件&#xff1a;redis 链接: https://pan.baidu.com/s/1Tu1KZkf33YJFdul8s6SzqQ?pwd8888 提取码: 8888 2.启动 进入根目录&#xff0c;使用redis-server redis.windows.conf命令启行启动Redis服务&#xff0c; 如下图所示为启动成功&#xff0c;默认…

RabbitMq 基础

文章目录 一、初识 MQ1.1 同步调用&#xff1a;1.2 异步调用&#xff1a; 二、RabbitMQ三、SpringAMQP3.1 依赖和配置文件3.2 消息发送和接收&#xff1a;3.2.1 消息发送&#xff1a;3.2.2 消息接收&#xff1a; 3.3 WorkQueues 模型&#xff1a;3.4 交换机类型&#xff1a;3.4…

建筑行业数据分析如何做?

导读&#xff1a;在谈数字化转型之前&#xff0c;先来谈谈数据的价值。数字化转型的基础是数据&#xff0c;是数字化的基本的生产资料&#xff0c;数据的质量直接决定了数字化的能力、所能达到的深度和广度。目前做的数据可视化项目总感觉只是数据展现而已&#xff0c;而不达不…

电脑投屏到电脑:Windows,macOS及Linux系统可以相互投屏!

本篇其实是电脑远程投屏到另一台电脑的操作介绍。本篇文章的方法可用于Windows&#xff0c;macOS及Linux系统的相互投屏。 为了避免介绍过程中出现“这台电脑”投屏到“那台电脑”的混乱表述&#xff0c;假定当前屏幕投出端是Windows系统电脑&#xff0c;屏幕接收端是Linux系统…

随时随地掌控数据:如何使用手机APP远程访问飞牛云NAS

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

2024-12-04OpenCV视频处理基础

OpenCV视频处理基础 OpenCV的视频教学&#xff1a;https://www.bilibili.com/video/BV14P411D7MH 1-OpenCV视频捕获 在 OpenCV 中&#xff0c;cv2.VideoCapture() 是一个用于捕获视频流的类。它可以用来从摄像头捕获实时视频&#xff0c;或者从视频文件中读取帧。以下是如何使用…

ubuntu安装navicat,并使用navicat连接mysql服务

1.安装宝塔&#xff1a; 登录宝塔官网&#xff1a;https://www.bt.cn/new/download.html 使用对应命令安装宝塔&#xff0c;然后搭建mysql环境。 2.安装navicat 有需要教程的私我&#xff0c;我再更新整理出来 &#xff01;&#xff01;&#xff01; 有需要教程的私我&#xf…

深度学习:MindSpore自动并行

随着模型规模的逐渐增大&#xff0c;需要的算力逐渐增强&#xff0c;但是算力需求增长速度远高于芯片算力增长速度。现在唯一的解决方案只有通过超大规模集群训练大模型。 大集群训练大模型的挑战 内存墙 200B参数量的模型&#xff0c;参数内存占用745GB内存&#xff0c;训练…

Qt Designer Ui设计 功能增加

效果展示 输入密码&#xff0c;密码错误&#xff0c;弹出提示 密码正确&#xff0c;弹出提示并且关闭原窗口 代码&#xff08;只提供重要关键主代码&#xff09;lxh_log.py代码&#xff1a; import sysfrom PySide6.QtWidgets import QApplication, QWidget, QPushButtonfrom …