![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
UE4
SimpleCloud94
讲师,VR,数字城市,游戏
展开
-
UE4_DataTable 实现Id自增与设置RowName
Unreal: DataTable 实现Id 自增与设置RowName原创 2022-07-03 15:44:14 · 1909 阅读 · 2 评论 -
UE4_c++ 设置Actor BeginPlay的顺序
使一个Actor的BeginPlay的优先级提高到GameMode之前原创 2022-05-09 23:20:09 · 1947 阅读 · 1 评论 -
UE4_EditorUtilityWidget上读取到大量数据优化方法
经过一段时间的使用,创建编辑器UI引起的卡顿主要有以下两方面。短时间内大量创建UI,像Vertical Box这种类型的容器,短时间创建几百个子容器不会造成卡顿,但是如果创建成千上万,就会引起卡顿。从其他地方的数据接口获取了累计上万的数据,存放到了UI上。往往是根据获取到数据从而创建UI,造成双重卡顿。数据量大,创建的UI多。UI创建问题如果不需要双滚轮的效果,可以使用TreeView和ListView这样容器,它们在根据几万条数据创建大量UI时,做了一定的UI上的优化,优化原理,类似分页。虽原创 2022-04-11 16:56:41 · 834 阅读 · 0 评论 -
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 · 3036 阅读 · 4 评论 -
UE4_编辑器UMG关闭窗口不能立刻销毁UMG
问题描述运行UMG,使之创建显示到视口效果如下:点击关闭按钮,再次运行该UMG,使之显示到视口。通过在c+中获取该UMG的数量,发现数量为2,不是所预计得1。导致编写得代码出现bug。修改办法截图如下:该解决办法不是实用所有程序,因为之前的伙伴把创建该umg的逻辑放到了如下的位置,使用路径映射得方式进行创建。...原创 2022-02-13 16:49:45 · 1236 阅读 · 0 评论 -
UE4_编辑器开发:根据鼠标拖动的资产,高亮提示UI的制作方法 (1)
如图:鼠标拖动了一个模型的Asset,在编辑器中会可以放置模型的地方会有提示效果,绿色表示可以放置到UI栏,红色表示不可以放。仿照UE4 上述的这套表现,实现拖动材质向指定的UI上拖动放置,可以放置,提示绿色,不可以放置,提示红色。效果如下:可以放置提示绿色:不可以放置提示红色:「 根据鼠标拖动的资产,高亮提示UI的制作方法 (1)」...原创 2022-02-11 17:29:34 · 2263 阅读 · 0 评论 -
UE4_UMG:ScrollBox 鼠标右键点击事件失效
使用场景在UMG中的UI树级结构如下:生成的效果如下:当BIM图层下的内容足够多的时候,ScrollBox会产生滚动条。产生滚动条之后,之前的鼠标右键事件失灵了。无法呼出如下菜单,直接开寄。本以为是上层的Border的结构的Visiblity影响,摆烂半天。发现在ScrollBox有如下选项,关闭即可解决鼠标右键响应事件。「 ScrollBox 鼠标右键点击事件失效 」...原创 2022-02-11 17:16:38 · 1321 阅读 · 0 评论 -
UE4:自定义Slate 点击保存 出现USlot ReleaseSlateResources() 异常
Error:(TSharedPtr<SWidget>'s) are being released in the UWidget's ReleaseSlateResources()原创 2022-01-21 18:08:52 · 606 阅读 · 0 评论 -
UE4_C++ 生成UUID
C++ 生成UUID原创 2021-12-10 16:39:39 · 2015 阅读 · 0 评论 -
UE4_聚合图
UE4 聚合图转载 2021-11-29 19:19:42 · 465 阅读 · 2 评论 -
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 · 2382 阅读 · 2 评论 -
UE4_Editor Utility Widegt 获取鼠标位置
在Editor UMG 下无法获取Controller,因此就只能另辟蹊径获取鼠标的位置通过获取鼠标的实时位置,可以实现鼠标右键,在当前位置创建右键菜单等相关操作Editor UMG 的层级结构如下:Border的锚点在屏幕左上角通过事件OnMouseBttonDown实现...原创 2021-10-25 11:42:02 · 1690 阅读 · 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 · 131 阅读 · 0 评论 -
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 · 1130 阅读 · 2 评论 -
UE4_ProcessEvent
1111原创 2021-10-11 14:10:08 · 1568 阅读 · 0 评论 -
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 · 1620 阅读 · 1 评论 -
UE4_编辑器下获得GetWorld()
编辑器下获得UWorld,代码GEditor->GetEditorWorldContext().World()刚开始一直以为没有引入GEditor的模块不断的测试发现GetEditorWorldContext()也需要引入模块UnrealEd原创 2021-09-28 15:36:52 · 4433 阅读 · 0 评论 -
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 · 606 阅读 · 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 · 2418 阅读 · 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 · 427 阅读 · 0 评论 -
UE4_AsyncTask应用笔记
在开发过程中如果把所有的逻辑都放到GameThread里,难免会卡顿。因此这时候,往往会用到多线程。UE4提供的多线程解决方案有三种。这里我们着重说一下AsyncTask的应用。一般来说,用AsyncTask都是一些业务逻辑不复杂的交给它来处理。因为省去了new Thread的开销。AsyncTask 下边又有几种不同的Task类型,这里说的是FNonAbandonableTask 和 FAutoDeleteAsyncTask。对于FAutoDeleteAsyncTask,在任务结束的时候,它会自.原创 2021-06-23 10:09:54 · 2462 阅读 · 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 · 8796 阅读 · 0 评论 -
UE4_C++调用蓝图里的事件
目前网上的大多数方法都是,在c++中定义一个基类,然后让蓝图去实现或者…在此提供 另外两种方法CallFunctionByNameWithArguments函数名称Foo,参数xxxFOutputDeviceNull OutputDeviceNull;const TCHAR* CmdAndParams = TEXT("Foo XXX")this->CallFunctionByNameWithArguments(CmdAndParams, OutputDeviceNull, nullp.原创 2021-05-28 11:01:26 · 1422 阅读 · 0 评论 -
UE4_关于Actor的Block Input
存储BlockInput 的Actor的数据结构应该是堆栈当某一个Actor的BlockInput 设置为true,那么在该actor后边的Actor的输入(Input)都将失效原创 2021-05-26 17:04:57 · 145 阅读 · 0 评论 -
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 · 2634 阅读 · 0 评论 -
UE4_StaticMesh上的点击事件
模型身上的点击事件,只支持鼠标左键鼠标放到红色区域就会提示,竟然菜到不知道原创 2021-05-12 17:38:51 · 775 阅读 · 0 评论 -
UE4_C++与蓝图的通信—接口
接口,对于开发人员来说并不陌生,它是实现 编程多态的一种方式。同样,一台笔记本也因为usb接口,使很多功能变得可以继续拓展。如果在蓝图中定义了一个事件WalkMove,想在c+中调用该蓝图的这个函数WalkMove。这时候就可以借助接口来完成这个事情。在c++定义接口UINTERFACE(MinimalAPI,BlueprintType)class UMoveInterface : public UInterface{ GENERATED_BODY()};class TRAFFICDE.原创 2021-04-28 11:58:47 · 1056 阅读 · 0 评论 -
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 · 5745 阅读 · 6 评论 -
UE4_相对于某一个Actor的夹角计算
在游戏或者数字化应用的开发过程中,我们经常会用到ActorA相对于ActorB的位置或者角度的计算。相对位置的计算有什么应用呢,如果你没遇到这个问题,你可能觉得这个东西不是个事。应该会很简单,但是当你遇到之后,不断的翻蓝图或者c++的API,翻了半天,连线半天或者撸半天代码,怅然若失地发现怎么不行呢。关于ue4计算角度的方法,截图如下方法1方法2方法3当然以上方法可以帮助我们计算角度,前提是他们的参考系是World的原点,不是某一个Actor。当然这时候是否想到了另外一个节点,世界位置与原创 2021-04-23 11:27:36 · 2543 阅读 · 0 评论 -
VS2019_输出台中文乱码
解决办法:控制面板-> 时钟和区域->区域->管理->更改系统区域设置原创 2020-01-17 14:48:19 · 11910 阅读 · 9 评论 -
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 · 9382 阅读 · 0 评论 -
UE4_模型_Bound(边界)
放置在关卡中的每个Actor都有一个bound,bound由两部分组成——蓝色的长方体和黄色的球体。Bound是专门用来测试一个物体是否可见的。边界球用于通过简单的距离测试进行快速碰撞检测,而且,通常情况下,它的大小大于它包含的对象。另一方面,边界框更接近对象的形状,并提供更精确的结果。每个静态网格物体和骨架网格物体都有其自己的边界框和球体,它们在导入时或在视口中缩放或旋转时会自动缩放为几何尺寸。通过选择“显示>高级>边界”(Show>Advanced>bounds),在“级别原创 2021-03-30 11:00:03 · 4924 阅读 · 0 评论 -
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 · 1637 阅读 · 1 评论 -
UE4_资源硬加载和软加载
这部分对于很多小项目,直接通过硬加载的方式就可以完成需求。资源的软加载的方式可以降低内存在某一瞬间的暴增,所以合理的设计资源的加载方式,在一定程度上可以优化项目。原创 2021-02-23 14:14:05 · 1468 阅读 · 1 评论 -
UE4_智能指针(2)
弱指针弱指针不能影响强指针的引用计数在使用弱指针时,需要对其进行检测,判断是否有效弱指针最大的用途就是解决闭环引用问题只是使用它,没有管理引用对象生命周期的权限class IAnimal{public: // 克制 virtual void SetRestraint(const TSharedPtr<IAnimal>& InWhatAnimal) = 0; // 类包含虚函数,但其不常用的析构函数不是虚函数;该类的实例可能无法进行正确析构 virtual ~IA原创 2021-02-19 16:54:13 · 455 阅读 · 0 评论 -
UE4_智能指针(1)
概念在ue中,继续自UObject的类可以被ue内置的垃圾回收管理。自定义的结构体和类需要开发者管理,因此ue自己实现了一套智能指针系统,为了跨平台。使用ue智能指针好处:跨平台与内置ue容器协调工作针对平台的优化,如多线程类型TSharedPtrTSharedRefTWeakPtrTUniquePtr举例TSharedPtr// 1.创建共享指针TSharedPtr<FTestA> TestPtr = MakeShareable(new FTestA());原创 2021-02-19 16:20:54 · 546 阅读 · 0 评论 -
UE4_Content目录资源检索以及异步载入资源
在写插件或者资源动态加载的过程中,需要对Content目录下的资产文件进行遍历或者检索参考内容:UE4异步载入资源Object Libraries 是Content Browser 用来进行资产筛选和显示的类,在游戏逻辑中也可以使用。 //头文件#include "Engine/ObjectLibrary.h"// 声明UObjectLibrary* ObjectLibrary; TArray<FSoftObjectPath> assetPath;// 函数实现void .原创 2021-02-18 15:19:27 · 1099 阅读 · 0 评论 -
UE4_C++中声明代理传入数组参数
如果声明代理中需要传入数组,如下 DECLARE_DYNAMIC_DELEGATE_OneParam(FSerachDataByStringValDelegate, TArray<FPOIData>, poiDataSearchArr);在蓝图层面是会报错的,报错信息如下customevent_0 signature error: the function/event ‘customevent_0’ does not match the necessary signature - ha原创 2021-02-15 10:49:30 · 1025 阅读 · 0 评论 -
UE4_异步_数据处理(Json)
如果一个数字城市demo,需要将第三方海量的数据进行处理展示,将数据的处理放在GameThread 上显然是不合理。这个时候需要用多线程解析数据,防止游戏线程的阻塞关于异步和多线程前两天面试被别人问到一个问题,异步和多线程的区别。面试的人告诉了我一个“答案”。这个“答案”不重要,重要是让我去思考了下面这段话。基础理论固然重要,但是它并不太适合编程的初学者。进入编程这个行业的人形形色色,我们并不能够去问一个统一的、仿照他人面试模式的面试。就好像我们做编程总在不断地copy一样。在我工作的身边有c++.原创 2021-02-14 19:00:02 · 763 阅读 · 0 评论 -
UE4_TSubClassOf 使用
在写插件的过程中,需要在蓝图中指定某一类型的类,在蓝图层面写一个基类蓝图的变量就可以实现这样的操作。但是在c++层面如何实现呢?TSubClassOfUPROPERTY(EditDefaultsOnly,Category="BulletType") UClass* BulletTypeByUClass; // 所用的Class类 UPROPERTY(EditDefaultsOnly,Category="BulletType") TSubclassOf<ABaseBullet>原创 2021-02-14 12:01:01 · 2155 阅读 · 0 评论