本文只解析一些UE4特有的一些数据类型,一些常用的类型如布尔(Bool),整型(Int)等不再赘述。

 

UE4的基本数据类型有以下几种:

 

 

 

命名(FName)

在C++中,命名被写成FName

使用时需添加头文件:

#include "UObject/NameTypes.h"

 

我们来看下官方给的解释

 意思是说:Name是一种文本,并且当游戏中需要查找操作时,使用Name会比使用String更快一些。

除此之外,Name还无法被修改,这意味着Name无法执行对字符串的操作如翻转等,

不区分大小写(当WITH_CASE_PRESERVING_NAME设置为1是可以保留大小写)

 

不区分大小写的例子:

如下建立两个实例TitleCaseNamecamelCaseName

 

我们分别使用ToString将二者打印出来

结果要么他们都是MyActivity或者都是myActivity,二者变成哪个取决于哪一个变量首先被存储。

 

 字符串(FString)

在C++中字符串被写成FString 

要使用是需要加上头: 

#include "Containers/UnrealString.h"

 

FString的基本用法和 std::string 的用法基本一致,都是一个可改变长度的文本。

 

在网上看到关于FString 主要出现的问题都是中文乱码问题

例如:

如果书写程序为:

FString Str = "你好";

这时候就会出现乱码,解决方法是改成这样

FString Str = TEXT("你好");

 

 究其原因,所有使用FString的变量,UE4都会采用的是UTF-16编码将他们存储在内存中,而前一段代码中“你好”则是gb2312编码(简体中文),自然UE4中的编码会出错。

所以在导入文件或者保存什么表格进UE4中时一定要记得把编码改成UTF-8 or UTF-16.

 

 文本(FText)

要使用是需要加上头: 

#include "Internationalization/Text.h"

 

官方的对FText的解释是:

在UE4中,文本本地化的主要组件是FText类。所有面向用户的文本都应使用此类

同时,FText可以和FString互相通过函数进行转换,值得注意的是,FText是可以包含本地化数据(localization data)的,而FString不具有。所以在从FText转化为FString时会丢失数据。想要不丢失数据可以使用Text Value Marshalling来进行转化。

:至于什么是本地化数据,暂时还没有搞清楚,感觉也用不到,之后遇到了再回来补充。

 

FText给用户的接口有Slate/UMG和HUD/Canvas,也就是在游戏中展示给玩家看到的一些文本内容,我们都可以使用FText。

 

向量(FVector): 

使用时需要加上头:

#include "Math/Vector.h"

 

官方解释:向量是一个具有浮点精度的由三个不同的分量X,Y,Z所组成的一个组合(X,Y,Z)。

使用的方法也很简单,在UE4的世界里面采用的是笛卡尔坐标系,我们可以通过向量来准确的定位一个组件的具体位置。

 

 旋转体(FRotator)

头文件:

 #include "Math/Rotator.h"

 

官方解释:FRotator是一个用来存放旋转变换信息的一个容器。

它有三个参数:Pitch(俯角--Y),Roll(滚角--X),Yaw(偏角--Z)。分别表示绕Y轴,X轴,Z轴旋转的角度

 

变换(FTransform):

官方解释:由缩放旋转(作为四元数)和平移组成的变换。

为什么是这三个呢?用过UE4蓝图的朋友应该就知道了

 

 

这是物体在世界中位置最重要的三个值。

又由于,这三个值不同的变化顺序会影响到物体变化后的位置。

所以在UE4中 FTransform的默认变化顺序为:

Scale(缩放) -> Rotate(旋转) -> Translate(平移).

并且对于一个组合变换C = A * B,则首先会进行A的变换再进行B变换。

 

参考链接:

 Unreal – FName non-preserved case sensitivitiy | by Peter Brooks | Medium

Character Encoding | Unreal Engine Documentation

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/CatSevenMillion/p/16622422.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!