本文只解析一些UE4特有的一些数据类型,一些常用的类型如布尔(Bool),整型(Int)等不再赘述。
UE4的基本数据类型有以下几种:
命名(FName):
在C++中,命名被写成FName
使用时需添加头文件:
#include "UObject/NameTypes.h"
我们来看下官方给的解释
意思是说:Name是一种文本,并且当游戏中需要查找操作时,使用Name会比使用String更快一些。
除此之外,Name还无法被修改,这意味着Name无法执行对字符串的操作如翻转等,
不区分大小写(当WITH_CASE_PRESERVING_NAME设置为1是可以保留大小写)
不区分大小写的例子:
如下建立两个实例TitleCaseName和camelCaseName
我们分别使用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