Unity资源导出插件-导出粒子

一、介绍

为实现快速将Unity粒子导出到LayaAir-IDE中,Unity资源导出插件支持了从Unity中导出粒子系统。但是,LayaAir自带的粒子系统与Unity的架构不一样,不支持Unity导出后的粒子,所以Unity导出的粒子资源只能在CPU粒子系统中使用。

粒子导出的方法与其它资源导出的方法一样,点击这里查看流程。

需要注意的是,如果在Unity中使用的是自定义的shader,那么在导出前,需要先手动将unityshader转为layashader,这样导出后的粒子着色器才能得到正确的效果。

二、导出的参数

2.1 曲线编辑面板数据的导出

在Unity插件的ParticleSystemData.cs中:

  • 可以找到writeMinMaxCurveData方法,minmaxCurve描述最小值-最大值曲线之间的变化:

Constant:单个常量;

Curve:单条曲线;

TwoCurves: 2 条曲线之间的随机值;

TwoConstants: 2 个常量之间的随机值;

  • 还有writeMinMaxGradientData方法,MinMaxGradient描述两个颜色之间的变化:

Color:单颜色;

Gradient:渐变颜色;

TwoColors:两个颜色之间随机;

TwoGradients:2 个颜色渐变之间的随机;

2.2 功能模块的解析

在插件的ParticleSystemData.cs中,GetParticleSystem方法调用了整体的流程。

    public static JSONObject GetParticleSystem(ParticleSystem particleSystem, bool isOverride, NodeMap map, ResoureMap resMap)
    {
        JSONObject compData = JsonUtils.SetComponentsType(new JSONObject(JSONObject.Type.OBJECT), "ParticleSystem", isOverride);
        writeBaseNode(particleSystem, compData);
        writeEmission(particleSystem, compData);
        writeShape(particleSystem, compData,map, resMap);
        writeVelocityOverLifetime(particleSystem, compData);
        writeSizeOverLifetime(particleSystem, compData);
        writeForceOverLifetime(particleSystem, compData);
        writeRotationOverLifetime(particleSystem, compData);

        writeLimitVelocityOverLifetime(particleSystem, compData);
        writeColorOverLifetime(particleSystem, compData);
        writeColorBySpeed(particleSystem, compData);
        writeSizeBySpeed(particleSystem, compData);
        writeRotationBySpeed(particleSystem, compData);
        writeInheritVelocity(particleSystem, compData);
        writeNoise(particleSystem, compData);
        writeTextureSheetAnimation(particleSystem, compData);
        writeSubEmittersModule(particleSystem, compData, map);

        return compData;
    }

下面分别介绍各个模块的导出,

  • writeBaseNode解析基础模块,对应LayaAir-IDE中的“通用”,如图2-1所示,Unity(左)与LayaAir(右)的对应关系。

2-1

(图2-1)

  • writeEmission解析Emission模块,对应LayaAir-IDE中的“发射”,如图2-2所示,Unity(上)与LayaAir(下)的对应关系。

2-2

(图2-2)

  • writeShape解析Shape模块,对应LayaAir-IDE中的“形状”,如图2-3所示,Unity(左)与LayaAir(右)的对应关系。

2-3

(图2-3)

  • writeVelocityOverLifetime解析 Velocity over LifeTime 模块,对应LayaAir-IDE中的“生命周期-速度随生命周期变化”,如图2-4所示,Unity(上)与LayaAir(下)的对应关系。

2-4

(图2-4)

  • writeLimitVelocityOverLifetime解析 Limit Velocity over Lifetime 模块,对应LayaAir-IDE中的“生命周期-限制速度随生命周期变化”,如图2-5所示,Unity(上)与LayaAir(下)的对应关系。

2-5

(图2-5)

  • writeInheritVelocity解析 Inherit Velocity 模块,对应LayaAir-IDE中的“生命周期-继承速度”,如图2-6所示,Unity(上)与LayaAir(下)的对应关系。

2-6

(图2-6)

  • writeForceOverLifetime解析 Force over Lifetime 模块,对应LayaAir-IDE中的“生命周期-力随生命周期变化”,如图2-7所示,Unity(上)与LayaAir(下)的对应关系。

2-7

(图2-7)

  • writeRotationOverLifetime解析 Rotation over Lifetime 模块,对应LayaAir-IDE中的“生命周期-旋转随生命周期变化”,如图2-8所示,Unity(上)与LayaAir(下)的对应关系。

2-8

(图2-8)

  • writeRotationBySpeed解析 Rotation by Speed 模块,对应LayaAir-IDE中的“生命周期-旋转随速度变化”,如图2-9所示,Unity(上)与LayaAir(下)的对应关系。

2-9

(图2-9)

  • writeSizeOverLifetime解析Size over Lifetime模块,对应LayaAir-IDE中的“生命周期-大小随生命周期变化”,如图2-10所示,Unity(上)与LayaAir(下)的对应关系。

2-10

(图2-10)

  • writeSizeBySpeed解析 Size by Speed 模块,对应LayaAir-IDE中的“生命周期-大小随速度变化”,如图2-11所示,Unity(上)与LayaAir(下)的对应关系。

2-11

(图2-11)

  • writeColorOverLifetime解析 Color over Lifetime 模块,对应LayaAir-IDE中的“生命周期-颜色随生命周期变化”,如图2-12所示,Unity(上)与LayaAir(下)的对应关系。

2-12

(图2-12)

  • writeColorBySpeed解析 Color by Speed 模块,对应LayaAir-IDE中的“生命周期-颜色随速度变化”,如图2-13所示,Unity(上)与LayaAir(下)的对应关系。

2-13

(图2-13)

  • writeTextureSheetAnimation解析 Texture Sheet Animation 模块,对应LayaAir-IDE中的“贴图动画”,如图2-14所示,Unity(上)与LayaAir(下)的对应关系。

2-14

(图2-14)

  • writeNoise解析 Noise 模块,对应LayaAir-IDE中的“绕动”,如图2-15所示,Unity(左)与LayaAir(右)的对应关系。

2-15

(图2-15)

  • writeSubEmittersModule解析 Sub Emitters 模块,对应LayaAir-IDE中的“子发射器”,如图2-16所示,Unity(上)与LayaAir(下)的对应关系。

2-16

(图2-16)

2.3 渲染模块参数

粒子渲染的解析由GetParticleSystemRneder完成,如图3-1所示,Unity(左)与LayaAir(右)的对应关系。

 public static JSONObject GetParticleSystemRneder(ParticleSystemRenderer renderer, bool isOverride,ResoureMap map)
    {
        JSONObject compData = JsonUtils.SetComponentsType(new JSONObject(JSONObject.Type.OBJECT), "ParticleSystemRenderer", isOverride);
        compData.AddField("renderMode", (int)(object)renderer.renderMode);
        compData.AddField("sortMode", (int)(object)renderer.sortMode);
        compData.AddField("alignment", (int)(object)renderer.alignment);
        compData.AddField("material", map.GetMaterialData(renderer.sharedMaterial));
        compData.AddField("cameraVelocityScale", renderer.cameraVelocityScale);
        compData.AddField("velocityScale", renderer.velocityScale);
        compData.AddField("lengthScale", renderer.lengthScale);
        if (renderer.mesh)
        {
            compData.AddField("sharedMesh", map.GetMeshData(renderer.mesh, renderer));
        }
        compData.AddField("pivot", JsonUtils.GetVector3Object(renderer.pivot));
        return compData;
    }

3-1

(图3-1)

Copyright ©Layabox 2022 all right reserved,powered by LayaAir Engine更新时间: 2025-01-04 00:17:27

results matching ""

    No results matching ""