虚幻引擎基础入门(C++) — 【数据类型篇 04】

一、基本数据类型

UE对于C++基本数据类型进行深度重定义,禁止在UE中使用C++的基本数据类型,这样会影响引擎的跨平台特性

//UE数据类型
bool bTest01 = true;  //true,false
TCHAR ch = 'a';  //字符型,不要用char c1

uint8 a = 10;  //无符号字节
uint16 a1 = 20;  //无符号短整型
uint32 a2 = 30;  //无符号整型
uint64 a3 = 40;  //无符号"四字"

int8 b1 = -10;  //有符号字节
int16 b2 = -20;  //有符号短整型
int32 b3 = -30;  //有符号整型
int64 b4 = -40;  //有符号"四字"

float c = 3.14;  //单精度浮点型
double d = 3.14;  //双精度浮点型

类型转换

static_cast<int>()
//静态转换

reinterpret_cast<int>()
//强制转换

std::string str;
int a = atoi(str.c_str());
//将string转成char,再最终转成int

二、字符编码

  1. 虚幻引擎4中的所有字符串都作为FStrings或TCHAR数组以UTF-16 格式存储在内存中
  2. UE4也提供了如下的字符串和编码转换的宏定义(StringConv.h):
TCHAR_TO_ANSI(str)
ANSI_TO_TCHAR(str)
TCHAR_TO_UTF8(str)
UTF8_TO_TCHAR(str)

三、字符类型

  1. FString:可以被操作的字符串。开销大于其他类字符串类型

FString 字符串类型的三种写法:(必须用 TEXT宏 包裹字符串)

FString F1 = TEXT("我想出去玩!");
FString F2(TEXT("我想睡觉!"));
FString F3 = FString (TEXT("我不想上班!"));

//在屏幕上输出F1"我想出去玩!"
GEngine->AddOnScreenDebugMessage(-1, 10, FColor::Red, F1);
//在日志输出 F1 + F2 + F3(要加*)
UE_LOG(LogTemp, Log, TEXT("%s\n%s\n%s\n"), *F1, *F2, *F3);

 FString 的比较操作:(Equals 默认开启大小写)

if (F1.Equals(F2, ESearchCase::IgnoreCase)){
    UE_LOG(LogTemp, Log, TEXT("两个字符串相等"));
}else{
    UE_LOG(LogTemp, Log, TEXT("两个字符串不相等咯"));
}
if (F1 == F2)  //操作符重载==(忽略大小写)

FString 的查询操作:

//1.Contains(要查的连续子字符串, 默认忽略大小写, 默认从前往后查),返回bool
if (F1.Contains(TEXT("我"),ESearchCase::IgnoreCase,ESearchDir::FromStart)){
    UE_LOG(LogTemp, Log, TEXT("字符串包含“我”"));
}else{
    UE_LOG(LogTemp, Log, TEXT("字符串不包含“我”"));
}
//2.Find(要查的连续子字符串, 默认忽略大小写, 默认从前往后查, 默认查询的起始位置从第一个),返回int32的字符串
int32 SPlace = F3.Find(TEXT("我"),ESearchCase::IgnoreCase,ESearchDir::FromStart,-1);

FString 的检查操作:

//IsEmpty()
if (F2.IsEmpty()){
    UE_LOG(LogTemp, Log, TEXT("空字符串"));
}

FString 的路径分隔符:

F1 = F2 / F3;
UE_LOG(LogTemp, Log, TEXT("%s"), *F1);
//运行结果如下:
//我想睡觉!/我不想上班!

FString 的格式化文本操作:

FString F4 = FString::Printf(TEXT("%d--%f--%s--"), 232, 3.15f, *F2);
UE_LOG(LogTemp, Log, TEXT("%s"), *F4);
//运行结果如下:
//232--3.150000--我想睡觉!--

FString 的裁切操作:

//Split()
F1.Split(TEXT("玩"), &F2, &F3);  //以"玩"为中心截断,前面字符串赋给F2,后面赋给F3
UE_LOG(LogTemp, Log, TEXT("%s\n%s\n%s\n"), *F2, *F3, *F1);
//打印结果如下:
//我想出去玩
//!
//我想出去玩!

FName:资源命名字符串,用来存储名称(散列存储),速度快

FName 字符串类型的四种写法:(必须用 TEXT宏 包裹字符串)

FName N1 = TEXT("张三");
FName N2(TEXT("张小三"));
FName N3 = FName(TEXT("张大三"));

//用 FString 初始化 FName
FString Str = TEXT("张三三");
FName N4 = *Str;
    
//在屏幕上输出N1"张三"
GEngine->AddOnScreenDebugMessage(-1, 10, FColor::Red, N1.ToString());

//在日志输出 N1 + N2 + N3 + N4
UE_LOG(LogTemp, Log, TEXT("%s\n%s\n%s\n%s"), *N1.ToString(), *N2.ToString(), *N3.ToString(), *N4.ToString());

FName 的比较操作(Equals 默认开启大小写)(== 忽略大小写)

if (N1 == N2){
    UE_LOG(LogTemp, Log, TEXT("两个字符串相等"));
}if (N1.IsEqual(N2)){
    UE_LOG(LogTemp, Log, TEXT("两个字符串不相等咯"));
}

FString 的检查操作:

//IsNone() 是否为空
if (N1.IsNone()){
    UE_LOG(LogTemp, Log, TEXT("空字符串"));
}

//IsValid() 是否有效(空字符串也是有效的)
if (N1.IsValid()){
    UE_LOG(LogTemp, Log, TEXT("有效字符串"));
}

3、 FText:显示字符串,处理用户的显式文本。支持格式化文本,方便构建国际化操作,不提供修改函数,无法进行内容修改

//六种 FText字符串 的创建方式:

#define LOCTEXT_NAMESPACE "Space"  //声明LOCTEXT宏的本地文本的命名空间

void AMyGameModeBase::BeginPlay()
{
    Super::BeginPlay();

    //1.构建一个空白文本
    FText F1 = FText::GetEmpty();

    //2.使用宏构建 NSLOCTEXT(空间名称,键值名称,内容)
    //(只有使用宏构建的FText 才能被文本器收集,罗列到本地的操作面板中)
    FText F2 = NSLOCTEXT("UE5", "k1", "嘿哈嚯");

    //3.使用宏构建 LOCTEXT(键值名称,内容)
    //步骤:先声明空间名称 -> 创建对象 -> 卸载宏
    FText F3 = LOCTEXT("k2", "嘿哈嚯嘿嘿");

    //4.将 FString 转为 FText
    //(缺点:不能被文本收集器收集)
    FString str(TEXT("嘿哈嚯嘿嘿哈哈哈哈"));
    FText F4 = FText::FromString(str);

    //5.将 FName 转为 FText
    //(缺点:也不能被文本收集器收集)
    FName name(TEXT("张三三三"));
    FText F5 = FText::FromName(name);
    //在屏幕上输出F2"嘿哈嚯"
    GEngine->AddOnScreenDebugMessage(-1, 10, FColor::Red, F2.ToString());

    //在日志输出F2 + F3 + F4 + F5
    UE_LOG(LogTemp, Log, TEXT("%s\n%s\n%s\n%s\n%s"), *F2.ToString(), *F3.ToString(), *F4.ToString(), *F5.ToString());

    //6.FText 转换
    //① 数字转换:数字int32 转换为 FText
    FText F6_1 = FText::AsNumber(10);

    //② 百分比转换:浮点0.3 转换为 FText(30%)
    FText F6_2 = FText::AsPercent(0.3);

    //③ 金钱转换:
    FText F6_3 = FText::AsCurrency(666, TEXT("$"));

    //④ 日期转换:将秒转换为年月日(单位:秒)
    FText F6_4 = FText::AsDate(66666666666);



  //7.FRText 的比较操作:比较两个FText是否相同
    //① EqualTo():返回布尔值,不忽略大小写
    if (F2.EqualTo(F3)) {}

    //② EqualToCaseIgnored():忽略大小写
    if (F2.EqualToCaseIgnored(F3)) {}

}
#undef LOCTEXT_NAMESPACE  //卸载LOCTEXT宏

总结

        以上就是今天要讲的内容,本文仅仅简单介绍了虚幻引擎中的数据类型的使用。

Epic Games今天宣布,正式发布“虚幻引擎4”(Unreal Engine 4/UE4),相关所有资源也一并放出。# h9 u6 O( p! y& D) q4 K7 P9 ~# N   只要每个月花19美元,你就能到全部资源,包括拿过来就能用的虚幻编辑器(Unreal Editor),GitHub上的完整C++源代码(支持微软Visual Studio/苹果Xcode),还有完整的生态系统:论坛、维基、问答、协作。8 t8 q& _* ?7 K. D) S6 W 一大波新游戏要来了 虚幻4引擎正式发布, s! f+ v' w9 M j3 y: ^   而在虚幻引擎4游戏的销售中,Epic将抽取5%的毛收入提升,也就是你的游戏赚了100万美元,就要交给Epic 5万美元。   回到技术方面,Epic号称虚幻引擎4是他们多年来心血的结晶,而且现在只是第一版,才刚刚开始。C++代码里你可以看到大量的创新,比如说支持虚拟立体偷窥Oculus VR,支持Linux操作系统,以及支持Valve SteamWorks、StreamBox,而且还可以通过HTML5在网页浏览器内开发游戏(页游)。   平台支持PC、PS4、Xbox One、iOS、Google等等。   虚幻引擎4基于DirectX 11,拥有新的材料流水线、蓝图视觉化脚本、直观蓝图调试、内容浏览器、人物动画、Matinee影院级工具集、全新地形和植被、后期处理效果、热重载(Hot Reload)、模拟与沉浸式视角、即时游戏预览、AI人工智能、音频、中间件集成等一系列全新特性。   虚幻引擎4现已开始提供授权。 现在提供网盘下载地址,毕竟到官方下载很麻烦,还要$,呵呵,10分很值得,代码风格很好,注释很爽!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值