一: C++工程和Gameplay框架

GameInstance

它适合放置独立于关卡的信息,比如说显示UI。

GameMode

表示游戏玩法, 包含游戏进行的规则和胜利条件等等信息,游戏模式是和关卡绑定在一起的,一个关卡只能有一个游戏模式,但是一个游戏可以有多个关卡。它通常和记录规则的GameState组合在一起。

Pawn/Character

Pawn指的是活动的游戏主体。Character是指可移动的,有碰撞的人物。其信息一般记录在PlayerState中。

PlayerController

虚幻抽象出来的一个层,用于控制Pawn行动。

需要注意的是:在新建工程文件夹中,当需要更新版本时,只需要上传“Content“、”Config“、”Source“、”Binuries“以及sln解决方案文件和UE project文件。

二:UE4基本类型与容器

基本类型:

bool大小:1 byte—— 1 byte=8 bit 取值范围:true或者false

uint8大小: 1 byte——子主题1   取值范围0~255

int32大小:4 byte—— int 取值范围-2^32 ~+2^32-1

float大小:4 byte        取值范围: 2^32 ~+2^32-1

int64大小:8 byte       取值范围-2^64 ~+2^64-1

FNames大小:12 byte    用途:FNames不区分大小写。它们为不可变,FName无法被操作。FNames的存储系统和静态特性决定了通过键进行FNames的查找和访问速度较快。FName子系统的另一个功能是使用散列表为FName转换提供快速字符串。

FString大小:12 byte     与FName和FText不同,FString可以与搜索、修改并且与其他字符串比较。不过,这些操作会导致FString的开销比不可变字符串类更大。这是因为FString对象保存自己的字符数组,而FName和FText对象保存共享字符数组的指针,并且可以完全根据索引值建立相等性。

FText大小:24 byte        一般用作显示和文本本地化

Fvector  三维向量

FVector2D  二维向量

Frotator       Pitch是围绕Y轴旋转,也叫做俯仰角;Yaw是围绕Z轴旋转,也叫偏航角;Rol是围绕X轴旋转,也叫翻滚角

容器:1、单个变量2、数组3、集合4、映射

需要注意的是:对于变量的定义,分为两种类型:一种使用默认数据类型,如bool bTestBoolean,一种是使用C++的位域模式,如 uint8 bTestB:1。使用位域可以节省内存空间。

三:UE4反射常用的宏UPROPERTY和UFUNCTION

反射数据描述了类在运行时的内容。这些数据所存储的信息包括类的名称、类中的数据成员、每个数据成员的类型、每个成员位于对象内存映像的偏移(offset),此外,它也包含类的所有成员函数信息。

在UE4反射机制中,具体来看,对于一个类(UClass),我们可以获得这个类的所有属性和方法,而对于一个类对象(UObject),我们可以调用它所拥有的方法和属性,前提是这些属性和方法被纳入到UE4的反射系统。

UPROPERTY

EditAnywhere

在编辑中可见。且可编辑

EditDefaultsOnly

只在类默认设置中可见

EditInstanceOnly

可通过属性窗口进行编辑,但只能在实例上进行,不能在原型上进行

VisibleAnywhere

在编辑中可见,且不可编辑

BlueplptReadOnly

蓝图只读

BlueprintReadWrite

蓝图可读可写

UFUNCTION

BlueprintCallable

此函数可在蓝图或关卡蓝图图表中执行。

BlueprintPure

此函数不对拥有它的对象产生任何影响,可在蓝图或关卡蓝图图表中执行。

BlueprintlmplementableEvent

需要在蓝图里面重载

BlueprintNativeEvent

此函数旨在被蓝图覆盖掉,但是也具有默认原生实现。用于声明名称与主函数相同的附加函数,但是末尾添加了lmplementation,是写入代码的位置。如果未找到任何蓝图覆盖,该自动生成的代码将调用Implementation方法。

CalllnEditor

可通过细节(Details) 面板中的按钮在编辑器中的选定实例上调用此函数。

元数据说明集:UPROPERTY(..., meta=())

举例:UPROPERTY(EditAnywhere, meta=(ClampMin=”10”, ClampMax=”100”)),表示下面定义的变量在10~100之间。

四: UE4类型的枚举UE4类型的结构体

先讲一下UE4中的命名规范,

Axxxxx 表示继承自Actor类

Uxxxxx 表示继承自Object类

Fxxxxx 表示C++中自己创建的

Exxxxx 表示枚举类型

Ixxxxx 表示接口类型

Sxxxx 表示Slate

枚举定义方式:

UENUM(BlueprintType)

enum EcustomColorType   //或者enum class EcustomColorType :uint8

{

RED,

BLUE,

YELLOW

};

结构体定义方式:

USTRUCT(BliueprintType)

Struct FtestStruct

{

GENERATED USTRUCT BODY()

Int32 ss;

}

五: Aactor、Component、Uobject

Aactor、Component:汽车与轮子的关系

Uobject:四大功能:反射、垃圾回收(GC)、序列化、COD(class object default)

六:基本类型转换

{
//FString To FName
FString Str = TEXT("TestString");
FName Name = FName(*Str);
//FName To FString
FString TargetFString = Name.ToString();
} {
//std::string to FString
std::string stdStr = "TestString";
FString MyStr(stdStr.c_str()); //FString To char*
char* c = TCHAR_TO_UTF8(*MyStr);
// FString to std::string
std::string TargetString(c); } {
//FString to Int32
FString Str = TEXT("TestString");
int32 i = FCString::Atoi(*Str);
//or
i = atoi(TCHAR_TO_UTF8(*Str)); // FString to float
int32 f = FCString::Atof(*Str);
//or
f = atof(TCHAR_TO_UTF8(*Str)); //FString To bool
bool bNewbool = Str.ToBool(); // Int32 to FString
FString TStr = FString::FromInt(123);
// float to FString
FString TStr1 = FString::SanitizeFloat(36.23f);
// bool to FString
int32 b = true;
FString Out= b ? TEXT("true"): TEXT("false");
}
{
//FString to TCHAR*
FString Str1(TEXT("TestString"));
const TCHAR* MyTChar = *Str1; //FString to FText
FText MyText = FText::FromString(Str1); //FText to FName
FName Name = FName(*MyText.ToString()); //FName to FText
FText MyText1 = FText::FromName(Name); }
{
//FString To TArray<uint8> FString Str = "Hello UE4";//原数据 TArray<uint8> outDataArray;//目标数据 TCHAR* CharData = Str.GetCharArray().GetData();
int32 Len = FCString::Strlen(CharData);
for (int i = 0; i < Len; i++)
{
uint8* dst = (uint8*)TCHAR_TO_UTF8(CharData);
CharData++;
outDataArray.Add(*dst);
}
//FString To TArray<uint8>
FBase64::Decode(Str, outDataArray); //TArray<uint8> To FString
const std::string cstr(reinterpret_cast<const char*>(outDataArray.GetData()), outDataArray.Num());
FString MyStr1(cstr.c_str()); //TArray<uint8> To FString
FString DestStr = FBase64::Encode(outDataArray); }
{
//枚举转字符串
enum ETempEnum
{
One,
Two,
Three,
};
{
//通过枚举类型的名字找到对应枚举类型的COD class object defalut
const UEnum* EnumPtr = FindObject<UEnum>(ANY_PACKAGE, TEXT("ETempEnum"), true);
if (EnumPtr)
{
FString str = EnumPtr->GetNameStringByIndex(ETempEnum::Two);
}
}
//字符串转枚举
{
//通过枚举类型的名字找到对应枚举类型的COD class object defalut
const UEnum* EnumPtr = FindObject<UEnum>(ANY_PACKAGE, TEXT("ETempEnum"), true);
if (EnumPtr)
{
ETempEnum OutEnum= (ETempEnum)EnumPtr->GetIndexByNameString(TEXT("Three"));
}
}
}
//额外补充
{
//FString To Md5
FString String("sdsafasfasf");
FMD5::HashAnsiString(*String); // FString To Sha1
FSHA1 Sha1Gen;
Sha1Gen.Update((unsigned char*)TCHAR_TO_ANSI(*String), FCString::Strlen(*String));
Sha1Gen.Final(); FString Sha1String;
for (int32 i = 0; i < 20; i++)
{
Sha1String += FString::Printf(TEXT("%02x"), Sha1Gen.m_digest[i]);
} }

UE4中C++编程(一)的更多相关文章

  1. UE4 中的 C++ 编程介绍

    https://docs.unrealengine.com/latest/CHN/Programming/Introduction/index.html UE4 中的 C++ 编程介绍 Unreal ...

  2. UE4 中Struct Emum 类型的定义方式 笔记

    UE4 基础,但是不经常用总是忘记,做个笔记加深记忆: 图方便就随便贴一个项目中的STRUCT和 Enum 的.h 文件 Note:虽然USTRUCT可以定义函数,但是不能加UFUNCTION 标签喔 ...

  3. UE4 中在 Actor 中动态 Create Component 与ChildActor 的 小笔记

    Note:旧版本的UE4 的Attach 和12.13版本有些不一样 创建Component: UCpp_MyComponent* temp_imageCom = NewObject<UCpp_ ...

  4. UE4中使用数据表(Data Table)

    本文依据官方文档数据驱动游戏性元素整理而来. 做过游戏的应该都清楚,如果游戏稍微有点规模,那么使用数据驱动来做游戏一般是必不可少的一步,一般也就是策划通过本表的方式来解决.下面我们来简单说一下UE4中 ...

  5. 充分利用 UE4 中的噪声

    转自:https://www.unrealengine.com/zh-CN/blog/getting-the-most-out-of-noise-in-ue4 UE4 推出基于材质的程序式噪声已经有一 ...

  6. Android中JNI编程的那些事儿(1)

    转:Android中JNI编程的那些事儿(1)http://mobile.51cto.com/android-267538.htm Android系统不允许一个纯粹使用C/C++的程序出现,它要求必须 ...

  7. 可爱的 Python : Python中函数式编程,第一部分

    英文原文:Charming Python: Functional programming in Python, Part 1 摘要:虽然人们总把Python当作过程化的,面向对象的语言,但是他实际上包 ...

  8. VB.NET中网络编程的另一种方案----system.net中的HttpWebRequest类的使用

    VB.NET中网络编程的另一种方案---- system.net中的HttpWebRequest类的使用 在VB.net中进行网络编程,除了我之前写的随笔中的使用WinHttp组件进行编程,还有另一种 ...

  9. VB.NET中网络编程所需组件WinHTTP的添加

    VB.NET中网络编程所需组件: WinHTTP组件:项目-->添加引用-->COM选项卡-->Microsoft WinHTTP Services,version 5.1--> ...

随机推荐

  1. 使用AC自动机解决文章匹配多个候选词问题

    解决的问题 KMP算法用于单个字符串匹配,AC自动机用于文章中匹配多个候选词. 流程 第一步,先将候选词先建立前缀树. 第二步,以宽度优先遍历的方式把前缀树的每个节点设置fail指针, 头节点的fai ...

  2. 深入浅出WPF-01.WPF缘起

    WPF缘起 自2012年起,根据公司需要,开始进入界面开发工作.公司是医疗器械行业,很多操作都是基于PC进行的,所以桌面应用开发尤为重要.原有项目都是基于MFC进行的开发,而且是VC6.0的技术,维护 ...

  3. APScheduler(python 定时任务框架)最简单使用教程

    有时候需要部署一些很简单的python定时任务,使用APScheduler是很好的选择.只需要简单的设置几个参数,就可以实现定时.定分甚至秒来跑. 第一步:用pip安装APScheduler pip ...

  4. 1-SQL Server2019安装

    sql server2019安装 首先去官网下载(下载express版本): 打开安装程序 选择自定义 更改一下安装目录,点击安装 等待安装 等安装完成后,出现如下页面 选择SQL Server独立安 ...

  5. 如何基于Jupyter notebook搭建Spark集群开发环境

    摘要:本文介绍如何基于Jupyter notebook搭建Spark集群开发环境. 本文分享自华为云社区<基于Jupyter Notebook 搭建Spark集群开发环境>,作者:apr鹏 ...

  6. 洛谷4631 [APIO2018] Circle selection 选圆圈 (KD树)

    qwq纪念AC450 一开始想这个题想复杂了. 首先,正解的做法是比较麻烦的. qwqq 那么就不如来一点暴力的东西,看到平面上点的距离的题,不难想到\(KD-Tree\) 我们用类似平面最近点对那个 ...

  7. SpringBoot-Thymeleaf模板引擎

    模板引擎,我们其实大家听到很多,其实jsp就是一个模板引擎,还有用的比较多的freemarker,包括SpringBoot给我们推荐的Thymeleaf,模板引擎有非常多,但再多的模板引擎,他们的思想 ...

  8. yum源安装nginx

    nginx使用yum源安装 安装步骤 使用yum源安装依赖 yum install yum-utils 配置nginx.repo的yum文件 vim /etc/yum.repos.d/nginx.re ...

  9. suricata的模块和插槽

    参考资料 suricata官方文档https://suricata.readthedocs.io/en/latest/performance/runmodes.html#different-runmo ...

  10. HTML中的emment

    emment的优点和使用方法: 优点:Emment是前端开发者必备的工具,使用它可以大大提高前端开发效率. 使用方法:Emment的使用方法非常简单,直接在编辑器上输入HTML和CSS代码的缩写,然后 ...