《Unreal大象无形》读书笔记

一、对象销毁

 

纯C++类销毁

尽量不要使用new、delete方案,可以使用智能指针。智能指针会使用引用计数来完成自动的内存释放。

使用MakeShareable函数可以来转化普通指针为智能指针。

TSharedPtr<YourClass> YourClassPtr = MakeShareable(new YourClass());

 

UObject类

无法使用智能指针来管理UObject对象。

UObject类采用自动垃圾回收机制。当一个类的成员变量包含指向UObject的对象,同时又带有UPROPERTY宏定义,那么这个成员变量将会触发引用计数机制。

垃圾回收器会定期从根节点Root开始检查,当一个UObject没有被别的任何UObject引用,就会被垃圾回收。可以通过AddToRoot函数来让一个UObject一直不被回收。

Actor类

Actor类对象可以通过调用Destroy函数来请求销毁。

 

二、从C++到蓝图

 

UPROPERTY

当需要将一个UObject类的子类的成员变量注册到蓝图中时,只需要借助UPROPERTY宏即可。

UPROPERTY(BlueprintReadWrite, VisibleAnywhere,Category="Object")

 

  • BlueprintReadWrite 可从蓝图读取或写入此属性。此说明符与 BlueprintReadOnly 说明符不兼容。
  • VisibleAnywhere 说明此属性在所有属性窗口中可见,但无法被编辑。此说明符与“Edit”说明符不兼容。
  • Blueprintable - 该类可以由蓝图扩展。
  • BlueprintReadOnly - 该属性可以从蓝图读取,但不能写入蓝图。
  • EditAnywhere - 该属性可以在原型和实例上的属性窗口中编辑。
  • Category - 定义该属性将出现在编辑器“细节(Details)”视图下面的哪个部分。这对于整理结构而言十分有用。
  • BlueprintCallable - 该函数可以从蓝图调用。仅用于组播委托。应公开属性在蓝图代码中调用。

 

UFUNCTION

UFUNCTION(BlueprintCallable, Category="Object")

可选的还有:

BlueprintImplementEvent:表示这个成员函数有其蓝图的子类实现,不应该尝试在C++中给出函数的实现,这会导致错误。

BlueprintNativeEvent:表示这个成员函数提供一个“C++的默认实现”,同时也可以被蓝图重载。需要提供一个“函数名_Implement”的函数实现,放置于.cpp中。

 

说明符众多,不便在此一一列出,但可以参考下面的链接:

UCLASS说明符列表

UPROPERTY说明符列表

UFUNCTION说明符列表

USTRUCT说明符列表

 

三、引擎相关的类

 

1. FPaths类

FPaths::GameDir() 游戏根目录

FPaths::FileExists() 文件是否存在

FPaths::ConvertRelativePathToFull() 转变相对路径为绝对路径

 

2.使用Log类

FString dir = FPaths::ProjectPluginsDir(); UE_LOG(LogTemp, Log, TEXT("%s"), *dir);

 

第一个参数是Log的分类,第二个参数是Log的类型,分为Log,Warning,Error。Log灰色,Warning黄色,Error红色。具体输出内容为TEXT宏,有三种常用符号:

1.%s字符串(Fstring)

2.%d整形数据(int32)

3.%f浮点型(float)

 

3.文件的读写与访问

FString str = FPaths::ProjectDir() + TEXT("Setting.xml"); if (FPlatformFileManager::Get().GetPlatformFile().FileExists(*str)) { }

FPlatformFileManager::Get().GetPlatformFile()获得一个IPlatformFile类型的引用,这个接口提供了通用的文件访问接口。

 

4.字符串处理

FName 是无法被修改的字符串,不管出现多少次,在字符串表中只被存储一次。

FText 提供本地化支持。

FString 是唯一提供修改操作的字符串类。

 

5.ImageWrapper

转换图片类型;从硬盘导入图片作为贴图。

 

图片文件自身的数据是压缩后的数据,称为CompressedData

图片对应的真正的RGBA数据,是没有压缩的,与格式无关,称为RawData

所有的图片格式,都可以抽象为一个CompressedData和RawData的组合。

 

读取JPG图片:

  1. 从文件中读取为TArray的二进制数据
  2. 使用SetCompressData填充为压缩数据
  3. 将压缩后的数据借助ImageWrapper的GetRaw转换为RGB数据
  4. 填充RGB数据到UTexture的数据中

 

转换PNG图片到JPG:

  1. 从文件中读取为TArray的二进制数据
  2. 使用SetCompressData填充为压缩数据
  3. 将压缩后的数据借助ImageWrapper的GetRaw转换为RGB数据
  4. SetRaw将RGB数据填充到JPG类型的ImageWrapper中
  5. 使用GetCompressData获得压缩后的JPG数据
  6. 最后用FFileHelper写入到文件中

 

6.模块机制

虚幻源码目录包含四大部分:Runtime,Development,Editor,Plugin

每个部分有包含了很多个模块。

一个模块文件夹包含:Public文件夹,Private文件夹,模块构建文件.build.cs

只有通过XXX_API宏暴露的类和成员函数才能被其他模块访问。

 

1. 模块包含文件结构:

 

模块名.build.cs (模块构建文件,告知UBT如何配置自己的编译和构建环境)

p

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值