基本概念 UE4 对 UObject 对象提供垃圾回收 UE4 对原生对象不提供垃圾回收,需要手动进行清理 方式 malloc / free new / delete new与malloc的区别在于,new在分配内存完成之后会调用构造函数. 缺点 如果不及时清理,则会占用内存,或者导致内存泄漏 如果不小心提前清理,则会导致野指针 UE4 提供共享指针库来管理内存,它是C++11智能指针的自定义实现 分类 TSharedPtr UniquePtr TWeakPtr TSharedRef 优点 防止…
同步加载 同步加载会造成进程阻塞. FObjectFinder / FClassFinder 在构造函数加载 ConstructorHelpers::FObjectFinder ConstructorHelpers::FClassFinder 参考 [UE4 C++ 基础知识]<10>资源的引用 LoadObject 一般用来加载资源对象 UMaterial* M_Cube = LoadObject<UMaterial>(nullptr, TEXT("Material'/…
枚举 UENUM宏搭配BlueprintType可以将枚举暴露给蓝图,不使用的话,仅能在C++使用 //定义一个原生enum class enum class EMyType { Type1, Type2, Type3, }; UENUM(BlueprintType) enum class ECurrentState : uint8 { Idle UMETA(DisplayName="空闲"), Attack UMETA(DisplayName="攻击"), Rol…
概述 UE4里,提供的多线程的方法: 继承 FRunnable 接口创建单个线程 创建 AsyncTask 调用线程池里面空闲的线程 通过 TaskGraph 系统来异步完成一些自定义任务 支持原生的多线程 std::thread 在GameThread线程之外的其他线程中 不要 spawning / modifying / deleting UObjects / AActors 不要使用定时器 TimerManager 不要使用任何绘制接口,例如 DrawDebugLine,然有可能崩溃 如果…
基本数据类型 TCHAR TCHAR就是UE4通过对char和wchar_t的封装 char ANSI编码 wchar_t 宽字符的Unicode编码 使用 TEXT() 宏包裹作为字面值 TCHAR* TCharString = TEXT("Hello, World!"); // 引擎字符串(TCHAR*) -> ANSI字符串(char*) char* CharString = TCHAR_TO_ANSI(TCharString); // 引擎字符串(TCHAR*) ->…
2种引用方式 硬引用(Hard Reference) 即对象 A 引用对象 B,并导致对象 B 在对象 A 加载时加载 硬引用过多会导致运行时很多暂时用不到的资源也被加载到内存中 大量资源会导致进程阻塞,致使程序情动事件过长 用不大的资源也在内存中,会占用内存 软引用(Soft Reference) 即对象 A 通过间接机制(例如字符串形式的对象路径)来引用对象 B 软引用可以减少加载负担,可以缩短程序启动时间 软引用不会主动加载到内存中,在需要时加载,用完释放 蓝图中的资源引用 C++ 中资源…
概述 TArray 是UE4中最常用的容器类.其速度快.内存消耗小.安全性高. 其设计时未考虑扩展问题,因此建议在实际操作中勿使用 新建(new) 和 删除(delete) 创建或销毁 TArray 实例 TArray元素为数值类型时,被销毁时其中的元素也将被销毁.若在另一TArray中创建TArray变量,其元素将复制到新变量中,且不会共享状态. 创建 TArray<int32> IntArray; 添加元素 init 填充多个相同值 IntArray.Init(10, 5); //==&g…
概念 定义 UE4中的delegate(委托)常用于解耦不同对象之间的关联:委托的触发者不与监听者有直接关联,两者通过委托对象间接地建立联系. 监听者通过将响应函数绑定到委托上,使得委托触发时立即收到通知,并进行相关逻辑处理. 委托,又称代理,本质是一个特殊类的对象,它内部可以储存(一个或多个)函数指针.调用参数和返回值. 蓝图示例 声明委托 委托签名声明可存在于全局范围内.命名空间内.甚至类声明内.此类声明可能不在于函数体内 可以是返回一个值的函数. 最多4个"载荷"变量. 最多8个…
概述 TMap主要由两个类型定义(一个键类型和一个值类型),以关联对的形式存储在映射中. 将数据存储为键值对(TPair<KeyType, ValueType>),只将键用于存储和获取 映射有两种类型:TMap 和 TMultiMap TMap 中的键是唯一的 TMultiMap 可存储多个相同的键 TMap 也是值类型,支持通常的复制.赋值和析构函数运算,以及它的元素的强所有权.在映射被销毁时,它的元素都会被销毁.键和值也必须为值类型. TMap 是散列容器,这意味着键类型必须支持 GetT…
概述 TaskGraph 系统是UE4一套抽象的异步任务处理系统 TaskGraph 可以看作一种"基于任务的并行编程"设计思想下的实现 通过TaskGraph ,可以创建任意多线程任务, 异步任务, 序列任务, 并行任务等,并可以指定任务顺序, 设置任务间的依赖, 最终形成一个任务图, 该系统按照设定好的依赖关系来分配任务图中的任务到各个线程中执行, 最终执行完整个任务图. TaskGraph适合简单的任务或者想实现有依赖关系的线程,复杂的任务推荐使用 Runnable 或者 Asy…