附加到游戏对象时,粒子系统粉红色

Posted

技术标签:

【中文标题】附加到游戏对象时,粒子系统粉红色【英文标题】:Particle System pink when attached to a GameObject 【发布时间】:2018-10-18 13:28:13 【问题描述】:

我正在研究统一粒子系统。

我创建了一个新项目和一个空对象,然后将粒子系统添加到其中。由于某种原因它无法正常工作,您可以查看附加的图像以了解发生了什么...

【问题讨论】:

好吧,我确实会... @TylerSigi 不确定“空粒子”是否更准确,因为没有错误消息表明粒子为空。 (或任何为空的东西)更不用说粉红色纹理不仅是由空材质引起的,而且可能是由带有错误着色器的材质引起的。 是的,需要注意的地方 【参考方案1】:

由于您创建粒子的方式,问题是缺少材质

创建粒子系统有两种方法:

1.创建空的GameObject,选择它然后去Component --> Effects 并添加Particle System em> 组件到那个空的游戏对象。这就是您创建当前粒子系统的方式。

如果您使用方法 #1 创建粒子系统,Unity 将不会将材质附加到粒子系统,因此使其变为粉红色。您必须创建一个新材质,将着色器更改为“粒子/Alpha 混合预乘”,并使用“默认粒子”作为纹理,使粒子看起来像默认材质。

你也可以只使用粒子系统的“Default-Material”,但是你不能修改它。

2.前往GameObject ---> Effects ---> Particle System 创建粒子.

如果您使用方法 #2 创建粒子系统,Unity 创建新的游戏对象,附加粒子系统和材质

始终通过转到 GameObject ---> Effects ---> Particle System 来创建您的材质。这将为您节省一些时间。

简单的解决办法是删除你当前的粒子游戏对象,通过转到游戏对象 ---> 效果 ---> 粒子系统创建一个新的粒子系统 而不是 #1 中描述的方法。

如果您需要从代码创建粒子系统,那么按照我在方法#1 中所说的操作,但要通过脚本。这样做的方法如下:

void Start()

    createParticleSys();


void createParticleSys()

    //Create GameObject to hold the Particle System
    GameObject psObj = new GameObject("Particle System");
    //Add Particle System to it
    ParticleSystem ps = psObj.AddComponent<ParticleSystem>();

    //Assign 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;

【讨论】:

【参考方案2】:

Unity粒子系统粉色方块:

很可能您没有为粒子选择材质,或者您之前的选择已被擦除(例如通过移动资产)。粉红色是 Unity 表示在获取粒子系统的材质时出现问题的方式。您可以通过选择一个新的或重新选择您之前使用的粒子纹理来解决此问题。

在粒子对象检查器的底部周围应该有一个名为 renderer 的部分,您可以在其中选择新材质。它是粒子系统中的最后一个选项卡。

现在您可以通过单击渲染器中的材质字段并定位默认粒子来解决此问题。如果您愿意,也可以使用其他材料。

如果您通过脚本创建了粒子系统,您将不得不看到@Programmers 的答案,但它仍然会归结为缺少材料。

【讨论】:

正如我对OP问题的评论中所说,粉红色纹理并不意味着空材质,它意味着材质存在错误,无论材质为空还是材质引用的着色器有编译错误。 @Eddge,我已经做出改变了。 这是最常见的情况。到目前为止,无法渲染粒子或缺少基本文件或任何其他此类性质的技术问题将是例外。

以上是关于附加到游戏对象时,粒子系统粉红色的主要内容,如果未能解决你的问题,请参考以下文章

游戏编程模式-对象池

Unity3D ParticleSystem粒子系统

Unity3D粒子系统粒子不跟随旋转

Cocos Creator粒子系统简单操作

Unity中的Shuriken粒子系统

粒子系统