unity粒子转成cocoscreator3.7插件

如题,搞了个插件,把unity粒子特效转成cocoscreator。
起因:不用说大家也知道,工作需要,已有大量unity粒子特效,想要直接转成ccc,相信很多c友也会遇到这种情况。
经历:
1cocos store上已有一个unity粒子转cocos的插件。我去用了,有报错。作者也没有继续更新了。
2看插件源码,艹!混淆过的!
3排查报错原因,原插件的指定版本是3.0.1,然而这个版本也有报错,研究一整天后发现问题出在bursts这个dio东西,这是个数组,怎么倒腾也找不到设置这种数组类型属性的方法。
4自己搞插件,灵光一闪,消息列表中有一个消息的作用是执行指定脚本方法。于是搞个插件,解析unity预制体信息,然后把信息传过去给ts脚本。在脚本里面创建节点,添加particle组件,设置各个属性。

食用方式:
插件本身其实只有一点点代码,处理逻辑都在我写的U3dParticel2Cocos脚本里。
安装插件后,还需要复制一份这个脚本放到项目中。
unity预制体需要文本格式,Editor->ProjectSettings->Editor->Mode 设置为ForceText

将所有需要转换的unity粒子预制体放到一个文件夹中
在cocoscreator中打开插件面板,选择文件夹,点击一下convert即可。
插件会在当前场景中创建一个root节点,并为这个节点添加U3dParticle2Cocos组件。
然后插件会自动解析预制体信息,传给组件,调用组件的doConvert函数

组件会根据预制体信息,创建各个预制体节点。

链接: https://pan.baidu.com/s/15eC99SMYkNapiIw1aCPWJQ 提取码: 39wi 复制这段内容后打开百度网盘手机App,操作更方便哦
–来自百度网盘超级会员v7的分享
一些问题:
1材质之类的参数需要手动再拖一遍,如果unity中使用了某个特殊的shader,需要自己在cocos中写一遍,插件里可没有shader转换功能。
2某些参数unity和cocos不同步,unity里有的,cocos里可能没有,特殊问题需要特殊处理,脚本中我写了一些警告提示,可以为部分这种情况提供一点线索。
3我用unity版本是2020.1.0f1,cocosCreator是目前最新的3.7。稍微测试了几个粒子。可能还有一些错误没有排查到,有问题可以反馈给我。

28赞

给大佬顶一手帖子,顺便插个眼收藏一下

顶一下大佬!!

给大佬顶一手帖子 大佬牛逼666 :face_with_monocle:

大佬牛逼!!

前天昨天晚上去unity商店扫荡了一堆的免费资源并下载,然后一个个导入unity然后把想要的资源筛选一下,以素材的形式复制出来准备当成自己的游戏开发资源储备。

Mark 大佬牛逼!!

昨天测试排查了一点错误。一会修改后搞个gitee仓库放上去吧。方便以后更新维护。
这里记录一下一些转换的问题:
1cocos creator的TextureAnimationModule目前只支持gird模式
2u3d粒子系统 textureAnimationModule中的rowMode模式meshIndex模式 cocos creator中没有支持
3cocos creator 粒子系统的拖尾目前支持支particles模式
4cocos creator粒子系统的noiseModule的strength是一个数值,unity中可以设置曲线,两个数值之间随机等
5cocos creator 暂不支持none模式的renderMode
6曲线设置的3次插值情况下,有个权重值设置,这个我现在还没有做上去。有空再看下。
7据说unity粒子系统的duration和ccc的duration含义不一样!!!??

1赞

https://gitee.com/ruanwujing/u3dpartile2cocos.git

3赞

厉害厉害。

粒子系统有很多module里有关于世界坐标还是局部坐标的设置,unity里是world:0,local:1 cocos里是local:0, world:1, custom:2

感谢大佬分享,Cocos Store 邀请你的加入~

纠正谣言,试了下unity和ccc的duration没发现有什么区别

unity粒子的sortingOrder没有在3.7中找到,,

mark!

NB啊,果断战略MARK

这还不得给你点个赞吗.

修复了拖尾模块部分的一些报错。
通过代码直接添加粒子组件后马上操作拖尾模块,源码中 拖尾模块enable设置时,_particleSystem尚未赋值
public set enable (val) {

    if (val === this._enable && this._trailModel) {

        return;

    }

    if (val && !this._enable) {

        this._enable = val;

//这里的_particleSystem报错
if (this._particleSystem.processor) this._particleSystem.processor.updateTrailMaterial();

    }

lifeTime=>lifetime,unity预制体里是小写。
增加withRatio等几个参数的设置

1赞

强大的楼主

感谢大佬分享