UE4 C++填坑系列之Standalone Program加载Niagara插件材质丢失解决方案

12 篇文章 2 订阅

最近两天用到Niagara做粒子效果,然后就发现遇到各种坑,下面简单跟大家分享下我遇到的坑及填坑方案,供大家参考:

首先说下三大坑:

1.源码版Engine,Niagara粒子效果无论是在Editor还是在Program都无法显示;

2.解决坑一之后,会发现Niagara能显示了,但是材质丢失;

3.坑三是解决坑二时遇到的一个问题:Program修改了插件描述文件后,不起作用,读不到……

下面分别说下解决思路:

坑一:

同一台电脑,我测试了引擎版和源码版,引擎版本新建关卡,添加Niagara,打包,运行,一切Ok!

但是源码版本,Niagara是显示不出来的

解决方案很简单,打开ProjectSetting页面,找到Plugin下的Niagara 和 NiagaraEditor选项卡,分别导出引擎版本的配置信息,然后导入到源码版本,然后再次打包,运行,铛铛铛铛~,你会发现,Niagara可以显示了!

坑二:

坑一解决之后,你会发现,Niagara虽然可以显示了,但是嘛,效果不仅如此人意,然后去叭日志信息,会看到如下报错:

LogStreaming: Error: Couldn't find file for package /Niagara/DefaultAssets/DefaultSpriteMaterial requested by async loading code. NameToLoad: /Niagara/DefaultAssets/DefaultSpriteMaterial

Error: DoesPackageExist: DoesPackageExist FAILED: '/Niagara/DefaultAssets/DefaultSpriteMaterial' is not a standard unreal filename or a long path name. Reason: Path does not start with a valid root. Path must begin with: '/Engine/', '/Game/', '/Config/', '/Script/', '/Extra/', '/Memory/', or '/Temp/'

可以看到,系统找不到Niagara插件下的默认材质,原因更搞笑,因为包名不是以Engine Game Config等为根目录的,………………,我想说,为啥它就不识别Plugin呢,而且,我已经把Plugin打到Pak文件中了,你还是找不到是不是有点太不智能了。。。

然后,我去叭源码,发现:Editor模式,UE会去找uproject的Plugins列表,把Plugins里面注册的插件都添加到Content Root Path列表中,但是,Program模式没有这个uproject啊,怎么办呢?

首先,全解决方案搜索报错信息,可以看到,PackageName文件中,有一个检查包名是否合法的判断:

报错原因

在这个方法里面会找到所有的资产目录,插件信息会在插件加载时被注册到里面:

获取资产根目录

注册插件

所以,我们要做的就是检查怎么样才能让Program的插件注册进去:

插件是否支持当前Program

调试跟踪代码,会发现,首先Program要加载的插件列表读取是在下图中实现的,可以看出,首先会读取Engine.ini文件,在这个文件中有Plugins Section里的ProgramEnablePlugins key,这个里面添加的Plugin就完成了Editor 模式下 uproject文件里添加PluginList的功能:

注册Program引用到的插件

添加后的结果如下:

这个添加完成后,完成了Plugin的注册,但是你会发现,插件的资产根目录还是没有被注册到根目录列表中,具体原因如下:

这里会判断插件的描述信息中是否支持当前平台,好,那我们添加上支持的平台列表,如下图:

到此为止,坑二已经填完了,逻辑上没有任何问题了。

坑三:

坑二填完之后,编译运行,然而奇迹并没有出现~

然后在资产根目录列表中并没有我们刚刚添加的Niagara插件,进一步深入,发现Niagara的描述文件中并没有出现我们刚刚配置的支持的平台信息,这是为什么呢?uplugin文件的相对路径没有问题,文件修改的没问题,也已经保存了,但是读出来的信息就是不匹配

想到了吗?嗯,答对了,就是因为Program工程加载的是Pak打包后的uplugin文件,嗯嗯,所以重新打包,运行,ok,成功了。

话不多说,请看效果:

发布于 2021-12-03 17:45

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: Niagara是一个计算机图形学中的视觉效果系统,它以尼亚加拉瀑布这个自然现象命名。这个系统可以创建动态和流体现象的模拟,如火灾、水、烟雾和爆炸。它的核心组件是NiagaraSystem,可以通过Blueprint和C++进行通信和控制。在Blueprint中,可以使用NiagaraSystem对象调用SetNiagaraVariable或Set Parameter函数传递参数值,还可以通过NiagaraToBlueprint模块将粒子数据导出到Blueprint中。在C++中,可以实现NiagaraParticleCallbackHandler接口来处理粒子数据。如果在使用Niagara时遇到问题,可以尝试打开ProjectSetting页面,找到Plugin下的NiagaraNiagaraEditor选项卡,导出引擎版本的配置信息,然后导入到源码版本,重新打包和运行,就可以解决显示问题了。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [UE Niagara系统](https://blog.csdn.net/jxyb2012/article/details/129973996)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [UE4 C++填坑系列Standalone Program加载Niagara插件材质丢失解决方案](https://blog.csdn.net/sandygull/article/details/121705234)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值