UE4 C++填坑系列之Standalone Program加载Niagara插件 ...
最近两天用到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插件下的默认材质,原因更搞笑,因为包名不是以EngineGame 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,成功了。
话不多说,请看效果:
页:
[1]