0%

UE 资源加载

资源引用一般分为资源硬引用和软引用

硬引用:对象 A 引用对象 B,A 加载到内存时B也加载,会导致内存使用量迅速增加。构造时引用:是硬应用的1种,在构造时加载资产并赋给变量。

软引用:仅储存资源对象的资源路径(本质是关联到硬盘上的网络链接),加载A时B不会主动加载到内存中,按需加载。

1
2
3
4
5
6
7
//硬引用(直接引用)
UStaticMeshComponent* StaticMeshComp;
//软引用
FSoftObjectPath softObectPath; //软对象路径
FSoftClassPath SoftClassPath; //软类路径
TSoftObjectPtr<AActor> SoftObjectPtr; //软对象引用
TSoftClassPtr<AActor> SoftCalssPtr; //软类引用
阅读全文 »

1 UE反射的原理

1.1 UE是如何实现反射机制

Unreal Engine(UE)通过一套宏、元数据和自定义的对象系统实现了反射机制。这些机制允许在运行时获取类型信息、访问和修改对象的属性和方法。以下是UE反射机制的核心部分及其实现方式:

1.1.1 核心组件

  • UObject和UClass
  • 宏系统
  • 元数据系统
  • 反射API

1. UObject和UClass
UObject:所有支持反射的类都必须继承自UObjectUObject是UE的所有反射类的基类,提供了反射所需的基础设施。
UClassUClassUObject的元类,包含了反射信息,如类的名称、属性和方法。

阅读全文 »

UE4 GC

UE4采用了标记-清扫垃圾回收方式,是一种经典的垃圾回收方式。一次垃圾回收分为两个阶段。第一阶段从一个根集合出发,遍历所有可达对象,遍历完成后就能标记出可达对象和不可达对象了,这个阶段会在一帧内完成。第二阶段会渐进式的清理这些不可达对象,因为不可达的对象将永远不能被访问到,所以可以分帧清理它们,避免一下子清理很多UObject,比如map卸载时,发生明显的卡顿。

阅读全文 »

UE内存优化篇章

UE性能优化GPU篇章

UE性能优化CPU篇章

瓶颈定位

主要定位出性能开销的问题,确定接下来的优化方向,以及后续的细致的分析的具体的优化工作。

每一帧来说,这三者的执行顺序依次为:Game Thread → Draw Thread → GPU Thread,一帧的总耗时,取决于三者中开销最严重、即耗时最长的线程。

手机上的性能问题主要是由这七部分构成:CPU逻辑CPU渲染图形API(提交)GPU渲染内存带宽加载时间

阅读全文 »

UE Gameplay框架

多线程的基本知识

C++11Thead线程库的基本使用(链接

创建一个线程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <thread>
using namespace std;

void printHelloWorld() {
cout << "Hello World" << endl;
}

int main() {

thread thread1(printHelloWorld);
if (thread1.joinable())
{
thread1.join();
}
return 0;
}
阅读全文 »

Lua面向对象

在Lua语言中可以使用函数setmetatable来设置或修改任意表的元表

我们只能为表设置元表;如果要为其他类型的值设置元表,则必须通过C代码或者调试库完成(该限制存在的主要原因是为了防止过度使用对某类型的所有值生效的元表。Lua语言老版本中的经验表明,这样的全局设置经常导致不可重用的代码)。字符串标准库为所有的字符串都设置了同一个元表,而其他类型在默认情况中都没有元表。

Lua语言会按照如下步骤来查找元方法:如果第一个值有元表且元表中存在所需要的元方法,那么Lua语言就是用这个元方法,与第二个值无关;如果第二个值有元表且元表中存在所需的方法,Lua语言就是用这个元方法;否则,Lu语言就抛出异常。

阅读全文 »

UE编辑器偏好设置-源码中没有rider选项

环境 window,引擎版本4.27

解决方法:

将 Rider 启动文件的绝对路径写入到 RiderLocations.txt ,该文件在 /UE4安装目录/Engine/Plugins/Developer/RiderSourceCodeAccess/Resources/RiderLocations.txt

1
2
3
4
5
6
7
8
9
# Add absolute path to the Rider's binary file. Example:
# Windows:
# C:\\Program Files\\Toolbox\\Tools\\apps\\Rider For Unreal Engine\\ch-0\\211.7442.67\\bin\rider64.exe
# MacOS:
# /Users/alexander.pirogov/Library/Application Support/JetBrains/Toolbox/apps/Rider For Unreal Engine/ch-0/212.4488.6/Rider.app
# Linux:
# /home/user/.local/share/JetBrains/Toolbox/apps/Rider/ch-0/211.7442.29/bin/rider.sh

F:\JetBrains Rider 2022.2.4\bin\rider64.exe

重启项目