更改“开始颜色”时,粒子系统颜色为粉红色

时间:2017-09-20 10:43:35

标签: c# unity3d colors particle-system

我正在制作砖破坏者游戏,我想要显示与被球击中的砖相同颜色的粒子。 这是我的代码:

GameObject smokePuff = Instantiate(smoke, transform.position, Quaternion.identity) as GameObject;
ParticleSystem ps = smokePuff.GetComponent<ParticleSystem>();
ParticleSystem.MainModule psmain = ps.main;
psmain.startColor = gameObject.GetComponent<SpriteRenderer> ().color;

这不起作用,粒子颜色显示为粉红色。如何解决?

我正在使用Unity 5.6。

1 个答案:

答案 0 :(得分:1)

这是Unity某些特定版本的错误。它应该在Unity 2017.2中修复。会发生什么变化,当您更改ParticleSystem颜色时,它会丢失其材质参考。

您可以将Unity更新为最新版本,也可以在设置颜色后将该材料参考或新材料手动附加到ParticleSystem

public GameObject smoke;

void Start()
{
    GameObject smokePuff = Instantiate(smoke, transform.position, Quaternion.identity) as GameObject;
    ParticleSystem ps = smokePuff.GetComponent<ParticleSystem>();
    ParticleSystem.MainModule psmain = ps.main;
    psmain.startColor = gameObject.GetComponent<SpriteRenderer>().color;


    //Assign that material to the particle renderer
    ps.GetComponent<Renderer>().material = createParticleMaterial();
}

Material createParticleMaterial()
{
    //Create Particle Shader
    Shader particleShder = Shader.Find("Particles/Alpha Blended Premultiply");

    //Create new Particle Material
    Material particleMat = new Material(particleShder);

    Texture particleTexture = null;

    //Find the default "Default-Particle" Texture
    foreach (Texture pText in Resources.FindObjectsOfTypeAll<Texture>())
        if (pText.name == "Default-Particle")
            particleTexture = pText;

    //Add the particle "Default-Particle" Texture to the material
    particleMat.mainTexture = particleTexture;

    return particleMat;
}

修改

有关创建粒子系统和粉红色粒子问题的另外两件事:

<强> 1 即可。如果您从组件 ---&gt;创建粒子系统效果 ---&gt; 粒子系统菜单,Unity将将材质附加到粒子系统,因此它将呈粉红色。您必须使用上面的代码来创建新材料或从编辑器手动执行。如果你不这样做,你会得到粉红色的ParticleSystem。

你的问题是这个或我上面描述的参考错误

<强> 2 即可。如果您从 GameObject ---&gt;创建粒子系统效果 ---&gt; 粒子系统菜单,Unity将创建新的GameObject,附加粒子系统和材料。你不应该有粉红色粒子问题,除非是我在谈到颜色被修改时丢失材料参考的粒子的错误。