首页
Python
Java
前端
数据库
Linux
Chatgpt专题
开发者工具箱
ue4专题
【UE4源代码观察】观察Core模块
话题 Core模块是整个引擎中最核心的模块,在之前的博客【UE4源代码观察】可视化所有模块的依赖情况中有统计,它被983个模块引用,恐怕除了第三方的模块外基本所有模块都有引用。我想首先观察其中的内容,然后再做测试:将Core模块拷贝到之前【UE4源代码观察】手动建立一个使用UBT进行编译的空白工程建立的空白工程中,看能否将它成功编译,理论上讲,“核心”不应再依赖太多其他的东西,所以我应该不会再需
阅读更多...
【UE4源代码观察】在空白工程中测试跨模块调用函数
目的 在之前的博客【UE4源代码观察】手动建立一个使用UBT进行编译的空白工程中,成功让UBT工作起来了。现在我想要测试编译出的多个模块之间是否能互相调用,我记录下测试的过程。最终工程见 工程GIT链接。 实践 第一部分 首先仿照TestA模块建立TestB模块。 在TestB.h文件中声明了一个函数 int TestBFunc(int x, int y); 并在TestB.cpp中
阅读更多...
【UE4源代码观察】观察FEngineLoop中各函数的调用顺序
当启动编辑器时,Launch模块是启动模块,在Windows平台中 LaunchWindows.cpp 的 WinMain函数是入口,而 FEngineLoop 管理了程序的初始化与主循环。他的成员函数如下: public:/*** Pre-Initialize the main loop, and generates the commandline from standard ArgC/Arg
阅读更多...
【UE4源代码观察】手动建立一个使用UBT进行编译的空白工程
我想观察UE4是怎么编译的,于是查阅官方文档,了解到UE4有一套自己的编译工具:UnrealBuildTool,简称UBT。关于UBT的官方文档参阅:虚幻编译工具。我想尝试自己手动建立一个使用UBT进行编译的空白工程。不过首先,先了解下UBT的编译流程中一些文件所扮演的角色 UBT的编译流程中一些文件所扮演的角色 模块 每个模块都由一个 .build.cs 文件声明,它存储在 Source
阅读更多...
【UE4源代码观察】可视化所有模块的依赖情况
思路 UE4引擎的模块非常多,我想要观察他们的依赖情况。于是我写了程序读取所有模块的.Build.cs文件,记录每个模块依赖的模块(当前是看PublicDependencyModuleNames和PrivateDependencyModuleNames。但后来经评论提醒我发现AddEngineThirdPartyPrivateStaticDependencies也应该视作是“依赖”但没统计,后续
阅读更多...
简单梳理UE4的Houdini官方插件代码
前言 Houdini官方插件名字叫 “Houdini Engine”,它搭建了Houdini数据与UE4数据间的桥梁。我接触这个插件已经有段时间了,我想是时候梳理一下插件的结构了。(当前我用的UE4版本是4.24.2,Houdini版本18.0.348) 需要说明的是,这篇博客主要是从代码出发的。我准备先分析插件整体的代码结构,再逐个翻阅每个文件试图搞明白他角色。但如果不准备研究代码结构和实现
阅读更多...
【UE4源代码观察】观察TargetPlatform模块
前情提要与本次目标 在之前的博客《【UE4源代码观察】观察 RHI、D3D11RHI、RenderCore 这三个模块的依赖关系》中,我将RHI、D3D11RHI、RenderCore这三个模块加入了我的空白工程中并确保可以成功编译。然而当时RenderCore模块有一个比较大的缺失:没有让shader相关的功能正常编译,因为它需要TargetPlatform模块中的内容。 因此,这次我想观察
阅读更多...
【UE4源代码观察】尝试调试UBT
前言 在之前的博客《【UE4源代码观察】手动建立一个使用UBT进行编译的空白工程》中我尝试动手搭建了一个用UBT进行编译的空白的工程。但是对UBT其中的逻辑并不理解。 后来在学习UE4源代码的过程中,又了解了它的一些行为。目前,对我影响较大的是:1.他会有一些逻辑去添加一些宏。2.他会有一些逻辑去给修改ModuleRules(和.build.cs中内容的角色一样)。这时候我发现一些和预期不太一
阅读更多...
试用UE4的纹理数组(UTexture2DArray)
UTexture2DArray 我发现在我目前使用的版本(4.25)中,官方已经实现了纹理数组(可能在4.24或更早版本就已经实现了)。 纹理数组,其含义不言而喻。一个重要作用是可以使用更多的纹理而不受制于sampler数目限制。 这一篇里我想对官方的纹理数组进行一下简单的试用。 试用 0. 启用纹理数组 虽然我看到了代码中有UTexture2DArray这个类,不过一开始并没有在编辑器
阅读更多...
UE4性能观察的基础
目标 关于性能分析,官方给出了些文档: 《性能及分析 | Unreal Engine Documentation》是一个目录,收集了相关的文档。 《性能与概要分析概述 | Unreal Engine Documentation》是一个整体的指南。 不过,我想从自己的思路出发讨论这个问题,收集相关资料并尝试其中的工具。所讨论的内容不限于官方文档。 讨论“游戏性能观察” 粗略来讲,我觉得“性能
阅读更多...
【UE4 C++】使用自定义的结构体做TMap中的Key
使用UE4的TMap TMap是UE4中一个基础的容器类(在一些其他的场合也叫作“Dictionary”),表明了【键】-【值】一一对应的关系。 比如,我想统计一个场景中每个Actor出现的次数,就可以创建一个Map来存储信息: TMap<AActor*, int> testMap; 尝试在UE4中使用自定义的结构体作为【键】,编译失败 我自定义的结构体如下: struct Test
阅读更多...
UE4尝试用C++创建蓝图并添加变量
目标 使用C++创建蓝图资源,并尝试给蓝图添加变量。 (引擎版本4.26) 步骤0. 创建测试用插件 使用编辑器工具栏按钮为模板创建插件。 使用这个模板的理由是它初始会有个按钮,可以用来触发操作: 之后将会替换这其中所触发的操作。 步骤1. 创建蓝图 对KismetEditorUtilities.h进行include,因为创建蓝图需要用到其中的方法: #include"Kismet
阅读更多...
翻译Houdini官方对UE4新版插件的介绍:Houdini Engine for Unreal - V2
原视频:Houdini For Unreal - YouTube 目录 介绍0. 总览1. 简介HoudiniEngine2. UE4的HoudiniEngine - 第二版为什么要做“第二版” ?What's new? - 核心What's new? - 输出(1)What's new? - 输出(2)What's new? - 输入What's new? - 参数What's new?
阅读更多...
斯坦福UE4 C++课学习补充25:寻路EQS
文章目录 一、创建EQS二、修改行为树三、查询上下文 一、创建EQS 场景查询系统EQS:可用于收集场景相关的数据。然后该系统可以使用生成器,通过各种用户定义的测试就这些数据提问,返回符合所提问题类型的最佳项目Item。 EQS的一些使用范例包括:找到最近的回复剂或弹药、判断出威胁最大的敌人,或者找到能看到玩家的视线 参考链接:https://dev.epicgames.c
阅读更多...
虚幻4学习---UE4中的字符串转换
https://blog.csdn.net/Szu_IT_Man/article/details/78799718#converting-fstring-to-stdstring
阅读更多...
UE4全景插件Nvidia Ansel Photography
Nvidia 的 Ansel 工具使 PC 玩家能更便捷地从游戏中采集高精度图像并进行分享。将 Ansel ue4 插件整合到游戏中的方法简单而快捷。 可在 Nvidia Ansel 站点 查看 Ansel 终端用户总览。 虚幻引擎 4 中可用的 Ansel 功能有: Free Camera - 在拍照前将摄像机调整到最佳角度 Super Resolution - 进行高于游
阅读更多...
UE4 BuildCookRun中的Archive的含义
在UE4中,Archive、Cook、Stage、Package、Build的次序是怎么样的? 整体打包过程如下: Build -> Cook-> Stage -> Package -> Archive。其中,Archive 的含义是从Staged目录中拷贝文件到一个额外的目录即Archive目录。被称为“归档”。 调试方式 选择以上程序,并指定这些参数进行调试: -Scripts
阅读更多...
[官方直播预告] 第12期 | UE4 C++进阶之路!
不知道大家都复工了吗?无论是在办公室还是在家办公,大家都要时时注意防护。我们不是医生护士,也不是社会新闻记者,可以去前线冲锋陷阵。但我们可以用自己的方式作出贡献——保护好自己是我们力所能及的支持方式。 为了陪伴大家度过宅在家的漫长时光,虚幻引擎策划了“2020虚幻春季线上系列”。将每周为大家带来精彩的技术直播,让大家在家里边学习边战“疫”。相信出门迎接阳光的日子很快就会到来。 这一期的直播讲师
阅读更多...
《Exploring in UE4》RootMotion详解
前言 Rootmotion在前面几篇文章中都有提到过,他的功能就是在游戏中让动画与速度达到完美的匹配,有着非常优秀表现的效果。那么,Rootmotion的原理是什么呢?在UE里面是如何处理的?这篇文章会详细的从源码的角度帮你分析其中的原理。 本篇文章适合有一定经验的虚幻/游戏开发者,不过为了照顾部分刚接触虚幻引擎的萌新(大佬),也会对一些引擎中的基本概念做出讲解。 知乎原文链接:https://
阅读更多...
UE4_材质_湿度着色器及Desaturation算法_ben材质教程
学习笔记,不喜勿喷!侵权立删,祝愿美好生活越来越好。 效果图: 原图: 1、使用初学者内容包的材质 我们这里使用虚幻自带的材质M_Brick_Clay_Old,复制一个更名为M_Brickclayoldwet材质。 2、添加去饱和度Desaturation节点 添加几个功能,让表面看起来是湿的,是什么能使表面看起来是湿的呢?东西的表面吸收水会使表面颜色变深,
阅读更多...
UE4->Plugin 认识UE4插件 1
原创文章,转载请注明出处。 本文带大家认识UE4的插件, Plugin UE4 Engine中插件代码占很大一部分,可参考下图,里面的Editor, Developer, Runtime, Slate举例都是大家比较熟悉的几个 1>看下图的中Json,其实就是我们的.plugin文件 {"FileVersion": 3, //文件版本"Version": 1, //Plugin版本"Ve
阅读更多...
UE4文件操作,持续更新中
注意:用到DesktopPlatform模块的东西,在Shipping下存在崩溃。 引擎版本: 4.25.0 个人的解决方案:将Develope下DesktopPlatform相关的几个模块拷贝出来,拿出到自己的Plugin下。列举出我的图。回头做一篇详细的流程,其实也简单,就是拷贝出来大部分都喜欢自己改成自己的名字,但是改了名字之后注意在FModuleManager:: load的等
阅读更多...
UE4 随笔之打包失败 分配连续内存分配不出的原因
原创文章,转载请标注。 现象是这样的 看了下代码,是分配连续内存分配不出来,整个pak文件太大了。 注意几点: 1>MergeActor先去MergeInstanceActor, 后去按材质合并整体。如果超过100万三角面的(此时需要酌情处理,可能超100万也不用管, 但是你的资源都是100万面几十M上百M的那就有问题了);原则上不允许有100M以上的文件出现。 2>减面
阅读更多...
UE4随笔 Landscape动态Attach之后没有碰撞怎么解决?
本帖纯属个人原创,如有转载请注明出处 很多时候需求是这样的,想达到场景中所有的Actor统一旋转的功能。纯代码无观赏性,大家有实际需求的自然能看懂。 接到这样的需求,大家就会想将所有的actor全部都attach到一个父节点上,编辑器中Landscape无法进行Attach, 并且InstancedFoliageActor场景中也没有。那么就需要我们在代码中动态的进行Attach。 下面
阅读更多...
UE4随笔 获取UMG控件的实际大小/获取屏幕缩放比例
本帖纯属个人原创,如有转载请注明出处 很多时候, 我们要计算UMG控件占屏幕的实际大小, 自适应之后也会有相应的数值 通过如下代码即可: FVector2D vSize = UIObj->Image_Left->GetCachedWidget().Get()->GetCachedGeometry().GetAbsoluteSize(); 获取屏幕缩放比例, 当然通过原C++WinAPI
阅读更多...
UE4随笔 通过MergeActor->MergeMaterial的模型没有复杂碰撞?怎么解
本帖纯属个人原创,如有转载请注明出处 本片主要记录针对MergeMaterial单个材质出来的模型没有复杂碰撞的解决方案,此处应该是引擎的Bug, 引擎版本4.25.0 通过上图的属性情况合并出来的StaticMesh如下图 我们发现上图中的StaticMesh并没有复杂碰撞,怎么破呢? 尝试过Auto Convex Collision, 但是发现不管用。用如下的方法就好了。
阅读更多...