- 博客(189)
- 收藏
- 关注
原创 UE4_EditorUtilityWidget上读取到大量数据优化方法
经过一段时间的使用,创建编辑器UI引起的卡顿主要有以下两方面。短时间内大量创建UI,像Vertical Box这种类型的容器,短时间创建几百个子容器不会造成卡顿,但是如果创建成千上万,就会引起卡顿。从其他地方的数据接口获取了累计上万的数据,存放到了UI上。往往是根据获取到数据从而创建UI,造成双重卡顿。数据量大,创建的UI多。UI创建问题如果不需要双滚轮的效果,可以使用TreeView和ListView这样容器,它们在根据几万条数据创建大量UI时,做了一定的UI上的优化,优化原理,类似分页。虽
2022-04-11 16:56:41 1380
原创 UE_使用Instanced Mesh Component 和 Spline 在蓝图和c++中区别
关于Instanced Static Mesh Component的原理参阅UE4 ISM(实例化静态网格体)理解想实现一个简单的围栏效果,效果如下:蓝图里的实现呢,比较简单。通过使用Instanced Static Mesh Component和Spline Component组件就能把逻辑实现。一在蓝图里实现上述逻辑,在Consturct Script的脚本里会自动把上述逻辑,添加的实例销毁,而c++里需要手动调用不然上次生成的实例还在。二在蓝图里添加AddSplineMeshC
2022-03-21 17:13:36 3259 4
原创 UE4_编辑器UMG关闭窗口不能立刻销毁UMG
问题描述运行UMG,使之创建显示到视口效果如下:点击关闭按钮,再次运行该UMG,使之显示到视口。通过在c+中获取该UMG的数量,发现数量为2,不是所预计得1。导致编写得代码出现bug。修改办法截图如下:该解决办法不是实用所有程序,因为之前的伙伴把创建该umg的逻辑放到了如下的位置,使用路径映射得方式进行创建。...
2022-02-13 16:49:45 1298
原创 UE4_编辑器开发:根据鼠标拖动的资产,高亮提示UI的制作方法 (1)
如图:鼠标拖动了一个模型的Asset,在编辑器中会可以放置模型的地方会有提示效果,绿色表示可以放置到UI栏,红色表示不可以放。仿照UE4 上述的这套表现,实现拖动材质向指定的UI上拖动放置,可以放置,提示绿色,不可以放置,提示红色。效果如下:可以放置提示绿色:不可以放置提示红色:「 根据鼠标拖动的资产,高亮提示UI的制作方法 (1)」...
2022-02-11 17:29:34 2299
原创 UE4_UMG:ScrollBox 鼠标右键点击事件失效
使用场景在UMG中的UI树级结构如下:生成的效果如下:当BIM图层下的内容足够多的时候,ScrollBox会产生滚动条。产生滚动条之后,之前的鼠标右键事件失灵了。无法呼出如下菜单,直接开寄。本以为是上层的Border的结构的Visiblity影响,摆烂半天。发现在ScrollBox有如下选项,关闭即可解决鼠标右键响应事件。「 ScrollBox 鼠标右键点击事件失效 」...
2022-02-11 17:16:38 1388
原创 UE4:自定义Slate 点击保存 出现USlot ReleaseSlateResources() 异常
Error:(TSharedPtr<SWidget>'s) are being released in the UWidget's ReleaseSlateResources()
2022-01-21 18:08:52 648
原创 UE4_C++ WorldContextObject
据别人说:Actor具备挂载组件的能力,因此可以通过Scene组件,拥有Transform,因而具有坐标的概念。Object不具备挂载组件的能力,因此不具备坐标概念。因此UObject要想获得WorldContext只能通过中介,让能够直接获取世界实例的实例把世界信息间接告诉UObjectmeta=(WorldContext="WorldContextObject") 通过meta,自动获取调用它的对象,将其赋值给它指定的参数(meta=(WorldContext="WorldContextOb
2021-12-22 17:42:51 2380
原创 UE4_C++ 拼接Json嵌套结构
在ue4 端要生成如下的一种嵌套Json发送到服务端{"id":"1","name": "A","children": [ { "id": "1588", "name": "标高 ", "children": [ { "id": "-2000032", "name": "楼板", "children": [
2021-12-21 20:33:35 1829
原创 UE5_踩坑指南
Expecting to find a type to be declared in a module rules named ‘RD’ in UE5Rules, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null. This type must derive from the ‘ModuleRules’ type defined by Unreal Build Tool.错误原因:链接:https://forums.unrealengine.
2021-11-05 10:19:49 2807
原创 UE4_BIM替换材质处理流程
UE4 处理BIM流程RevitBIM的处理软件Revit百度云网盘链接:https://pan.baidu.com/s/1HW1E6_zcm6u-qkDG9Tj8cA提取码:BNBNDataSmith链接:https://www.unrealengine.com/zh-CN/datasmith/plugins有Revit版本安装流程安装Revit,是Autodesk 出品的软件,网上破解很多安装DataSmith的插件到Revit安装成功后,在软件里会有如下截图所示:
2021-11-04 10:03:04 2443 2
原创 UE4_Editor Utility Widegt 获取鼠标位置
在Editor UMG 下无法获取Controller,因此就只能另辟蹊径获取鼠标的位置通过获取鼠标的实时位置,可以实现鼠标右键,在当前位置创建右键菜单等相关操作Editor UMG 的层级结构如下:Border的锚点在屏幕左上角通过事件OnMouseBttonDown实现...
2021-10-25 11:42:02 1789 1
原创 UE_Python批量删除Private目录下文件_Py 转 EXE
UE4插件开发中会用到不想把Private 目录下的.h提供给其他人的需求,所以制作一个批量化的删除Private文件目录的代码就十分必要了。测试代码import osdef local_rm(dirPath, is_private=False): if os.path.exists(dirPath): files = os.listdir(dirPath) for file in files: // 如果想删除其他的文件目录的,改动这个地方就
2021-10-14 09:38:12 154
原创 UE4_DatatTable数据保存
UE4 提供了很多数据持久的工具,很多…1,2,3网上使用UE4 c++ 操作DataTable的也很多,不接入别人的链接了。使用C++ 操作DataTable修改数据也没啥大的问题坑爹的地方:修改完数据之后,重启编辑器之后,修改的数据恢复之前的默认值了解决办法:引入模块EditorScriptingUtilities引入头文件#include "EditorAssetLibrary.h"使用代码const TSoftObjectPtr<UDataTable> Sour
2021-10-11 14:19:41 1180 2
原创 UE4_使用模板_遍历Actor 和 遍历DataTable
使用模板遍历Actor模板定义template <typename T>void UGlobalHelperTool::FindAllActors(UWorld* World, TArray<T*>& Out){ for (TActorIterator<T> It(World); It; ++It) { Out.Add(*It); }}使用// 其中ABNBasePostProcessVolume 是自定义的Actor类//
2021-09-28 16:12:31 1675 1
原创 UE4_编辑器下获得GetWorld()
编辑器下获得UWorld,代码GEditor->GetEditorWorldContext().World()刚开始一直以为没有引入GEditor的模块不断的测试发现GetEditorWorldContext()也需要引入模块UnrealEd
2021-09-28 15:36:52 4675
原创 UE4_UStruct 遍历
一个结构体中存在一个Val变量,Val变量的类型是FVector4,想从c++层面去遍历获得Val的值上图是很早之前的一个Property继承关系图。当然,在4.25UProperty被FProperty夺笋。好处呢,见下:没有继承UObject后的开销提高了引擎启动时间提高GC处理时间明显内存使用量的减少打包后包体体积减少自定义结构体的遍历USTRUCT(BlueprintType, meta=(HiddenByDefault))struct FPostProcessSetti.
2021-09-16 16:17:42 1953
原创 UE4_DataTable使用c++创建的结构体无法编辑变量值
错误现象如下,创建的属性字段,无法在编辑器中进行编辑初步排查以为是c++属性字段的宏设置问题,截图如下USTRUCT(BlueprintType)struct FTimePropertyConfig : public FTableRowBase{ GENERATED_USTRUCT_BODY() UPROPERTY(EditAnywhere, BlueprintReadWrite,Category = "SkySystemLib|Time") FString ElementName;
2021-08-24 15:06:36 644 1
原创 UE4_插件开发引用第三方库编译报错[Error C4668]
C:\Program Files (x86)\Windows Kits\10\include\10.0.16299.0\um\winioctl.h(7542): error C4668: '_WIN32_WINNT_WIN10_TH2' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif' C:\Program Files (x86)\Windows Kits\10\include\10.0.16299...
2021-07-27 17:32:21 2711 1
原创 UE4_Error:VS 2019 error: no 32-bit compiler toolchain found
在使用vs2019编译vs2015开发的项目时,突然报错报错信息如下vs 2019 error: no 32-bit compiler toolchain found in d:\program files (x86)\microsoft visual studio 14.0\vc\bin\cl.exe排查原因,是vs2015的c++生成工具没有安装但是,检查发现已经安装了,还是报这个错。然后再搜索排查,网上的资料都在说是这个组件没有安装,那么就重新卸载安装了一下这个组件,就可以成功编译了。
2021-07-15 11:37:34 448
原创 UE4_AsyncTask应用笔记
在开发过程中如果把所有的逻辑都放到GameThread里,难免会卡顿。因此这时候,往往会用到多线程。UE4提供的多线程解决方案有三种。这里我们着重说一下AsyncTask的应用。一般来说,用AsyncTask都是一些业务逻辑不复杂的交给它来处理。因为省去了new Thread的开销。AsyncTask 下边又有几种不同的Task类型,这里说的是FNonAbandonableTask 和 FAutoDeleteAsyncTask。对于FAutoDeleteAsyncTask,在任务结束的时候,它会自.
2021-06-23 10:09:54 2560 1
原创 UE4_UATHelper: Packaging (Windows (64-bit)): ERROR: Failed to copy
在项目中引用了开发的插件,插件中引用了第三方库。目录结构如下:报错信息如下:UATHelper: Packaging (Windows (64-bit)): ERROR: Failed to copy E:\Project\WorkSpace\KafkaDemo\Plugins\KafkaPlugin\Source\ThirdParty\librdkafka.redist.0.11.4\runtimes\win-x64\native\librdkafka.dll to E:\Project\W
2021-06-18 18:49:14 9217
原创 UE4_C++调用蓝图里的事件
目前网上的大多数方法都是,在c++中定义一个基类,然后让蓝图去实现或者…在此提供 另外两种方法CallFunctionByNameWithArguments函数名称Foo,参数xxxFOutputDeviceNull OutputDeviceNull;const TCHAR* CmdAndParams = TEXT("Foo XXX")this->CallFunctionByNameWithArguments(CmdAndParams, OutputDeviceNull, nullp.
2021-05-28 11:01:26 1479
原创 UE4_关于Actor的Block Input
存储BlockInput 的Actor的数据结构应该是堆栈当某一个Actor的BlockInput 设置为true,那么在该actor后边的Actor的输入(Input)都将失效
2021-05-26 17:04:57 160
原创 UE4_运行模式下(Runtime)样条曲线(Spline)新增Point导致Length变长
Spline 在运行模式下新增一个point引用的问题问题描述在Spline曲线之间增加一个Point,导致Spline的Length变长产生的原因Spline 之前本身具有2个Point,博主想通过鼠标点击的方式在曲线之间产生一个新的Point,无意之中发现,Spline的长度变长了,导致的原因原因是Spline默认在下标(index=1)的后边产生了一个新的Point,所以在曲线原有的基础上延长到新的Point位置。解决办法把AddSplinePointAtIndex 中的Index.
2021-05-13 14:25:27 2741
原创 UE4_C++与蓝图的通信—接口
接口,对于开发人员来说并不陌生,它是实现 编程多态的一种方式。同样,一台笔记本也因为usb接口,使很多功能变得可以继续拓展。如果在蓝图中定义了一个事件WalkMove,想在c+中调用该蓝图的这个函数WalkMove。这时候就可以借助接口来完成这个事情。在c++定义接口UINTERFACE(MinimalAPI,BlueprintType)class UMoveInterface : public UInterface{ GENERATED_BODY()};class TRAFFICDE.
2021-04-28 11:58:47 1084
原创 UE4_C++访问蓝图里的变量
有没有碰到这样的问题,之前的同事用“连连看”实现了项目的逻辑,后续你要维护推展项目的开发。但头疼的是,你是个coder,not “连连看”玩家。这时候how to do itUE4 C++ 访问蓝图里的变量c++获得BP的方式在访问蓝图变量之前,要先获得该蓝图,获得蓝图引用的方式例如获得一个pawn类的InitialSpeed变量100// BPUPROPERTY(EditAnyWhere, BlueprintReadWrite, Category = "MyActor")TSubclas.
2021-04-27 21:29:04 5985 6
原创 UE4_相对于某一个Actor的夹角计算
在游戏或者数字化应用的开发过程中,我们经常会用到ActorA相对于ActorB的位置或者角度的计算。相对位置的计算有什么应用呢,如果你没遇到这个问题,你可能觉得这个东西不是个事。应该会很简单,但是当你遇到之后,不断的翻蓝图或者c++的API,翻了半天,连线半天或者撸半天代码,怅然若失地发现怎么不行呢。关于ue4计算角度的方法,截图如下方法1方法2方法3当然以上方法可以帮助我们计算角度,前提是他们的参考系是World的原点,不是某一个Actor。当然这时候是否想到了另外一个节点,世界位置与
2021-04-23 11:27:36 2753
原创 OpenGL_ifstream:无法解析的外部符合
问题如下:严重性 代码 说明 项目 文件 行 禁止显示状态错误 LNK1120 4 个无法解析的外部命令 LearnOpenGL E:\Project\C\LearnOpenGL\Debug\LearnOpenGL.exe 1 严重性 代码 说明 项目 文件 行 禁止显示状态错误 LNK2019 无法解析的外部符号 __imp___CrtDbgReport,该符号在函数 "void * __cdecl std::_Allocate_manually_vector_aligned<struct
2021-04-19 17:22:36 689
原创 UE4_local location(本地位置) 与 world location(世界位置) 转换
本地位置(local location)与世界位置(world location)蓝图层级结构效果示例其中,OrbitMesh 是紫色的方体(location:200,200,0),Sphere是白色的球体(location:250,250,0),PivotMesh 是灰色的方体(location:90,120,0)把上述蓝图放到场景中,示例如下蓝图代码截图如下在蓝图的本地位置中,就是球体的位置,画了一个半径为50cm的圆,通过节点(Transform Location)把本地位置转换成
2021-04-03 16:17:29 10475
原创 UE4_模型_Bound(边界)
放置在关卡中的每个Actor都有一个bound,bound由两部分组成——蓝色的长方体和黄色的球体。Bound是专门用来测试一个物体是否可见的。边界球用于通过简单的距离测试进行快速碰撞检测,而且,通常情况下,它的大小大于它包含的对象。另一方面,边界框更接近对象的形状,并提供更精确的结果。每个静态网格物体和骨架网格物体都有其自己的边界框和球体,它们在导入时或在视口中缩放或旋转时会自动缩放为几何尺寸。通过选择“显示>高级>边界”(Show>Advanced>bounds),在“级别
2021-03-30 11:00:03 5298
原创 C++_Lambda表达式
一段码字:刚开始做东西的时候,看到难的东西,往往都是先复制粘贴,等事后再说。然后就没有了然后...int mian(){ int a = 1; int b = 2; auto func = [=,&b](int c)->int {return b += a+c}; // ??????????? return 0;}语法[捕获](参数列表) mutable ->return-type{statement}捕获:是针对参数传入的关键字,它分值传
2021-03-22 21:20:19 205
原创 UE4_调试_打包后的调试
附加进程调试UE 启动 .uproject文件 ,例如 LearnUE4.uproject在 vs 启动.sln文件,在vs中 调试->附加到进程,寻找打印调试// Log 灰色UE_Log(LogTemp,Log,TEXT("HelloWorld"));// Warning 灰色UE_Log(LogTemp,Warning,TEXT("HelloWorld"));// Error 红色UE_Log(logTemp,Error,TEXT("HelloWorld"));// %s
2021-03-03 16:37:18 1709 1
原创 UE4_资源硬加载和软加载
这部分对于很多小项目,直接通过硬加载的方式就可以完成需求。资源的软加载的方式可以降低内存在某一瞬间的暴增,所以合理的设计资源的加载方式,在一定程度上可以优化项目。
2021-02-23 14:14:05 1542 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人