如何在代码中更改Unity粒子系统纹理动画精灵?

时间:2019-02-19 22:59:21

标签: unity3d particle-system

我正在使用Unity Sprite组件和各种发射器模块构建成形的粒子系统(星系),其中的sprites是静态的,并且永久存在(100000秒)...

    public ParticleSystem particles_galaxy;
        ParticleSystem.EmissionModule galaxy_emmitter;
        ParticleSystem.TextureSheetAnimationModule  galaxy_textureAnim;
        ParticleSystem.EmitParams galaxy_params;  

我程序性地添加粒子,以特定的位置,方向和颜色发射粒子。我想从一组精灵中选择要绘制的精灵。

我已经为Inspector中的TextureSheetAnimationModule分配了几个精灵,可以在编辑器中设置它们以更改绘制的内容。我可以使用galaxy_textureAnim.startFrame更改代码中用于粒子的精灵,以指定帧号,但这会影响所有精灵,并且不会随着添加的每个精灵而改变。

在这里,我尝试添加十个具有随机纹理的螺旋形精灵,这些纹理可以从两个选项中选择:

    for(int n = 0; n < 10; n++){
        particleRadialDistance = n*0.1f;
        particleRadialPosition = n*0.1f;
        placement.y = Mathf.Lerp(0.35f, 0.5f, particleRadialDistance);
        placement.x = particleRadialPosition*Mathf.PI*2;
        galaxy_params.position = class_utilities.PositionFromPolar(placement);
        galaxy_params.rotation = 180+Mathf.Lerp(0,-360,particleRadialPosition);
        galaxy_params.startSize = Mathf.Lerp(1f, 2f, particleRadialDistance);
        galaxy_textureAnim.startFrame = Random.Range(0,2);
        particles_galaxy.Emit(galaxy_params, 1);
    }

如何更改每个子画面的帧/子画面编号?

1 个答案:

答案 0 :(得分:0)

尝试一下:

galaxy_textureAnim.startFrame = new ParticleSystem.MinMaxCurve(0, 2);