粒子系统附加到游戏对象时变成粉色

9

我正在处理Unity粒子系统。

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

enter image description here


好的,我会的。 - I AM A Hacker
2
@TylerSigi 不确定“null particles”更准确,因为没有错误消息表明粒子为空。 (或者任何东西为空)更不用说粉色纹理不仅是由于材质为空引起的,还可能是由于着色器出现错误引起的。 - AresCaelum
是的,需要注意。 - I AM A Hacker
2个回答

10
问题是由于你创建粒子的方式导致了"缺少材质"。
两种创建粒子系统的方法: 1. 创建一个空的GameObject,选择它然后进入 Component --> Effects,并且将 Particle System 组件添加到这个空的GameObject上。这就是你当前创建粒子系统的方式。
如果你使用#1的方式创建粒子系统,Unity将不会自动给粒子绑定材质,因此它会变成粉色。因此,你需要创建一个新的Material,并将其着色器更改为"Particles/Alpha Blended Premultiply",然后使用 "Default-Particle" 作为纹理来使粒子看起来像默认材质。
你也可以直接使用 "Default-Material" 作为粒子系统的材质,但无法对其进行修改。

enter image description here

2.通过进入GameObject ---> Effects ---> Particle System创建粒子。

如果你使用方法#2创建粒子系统,Unity将会创建新的GameObject,附加一个粒子系统和材质

始终通过进入GameObject ---> Effects ---> Particle System来创建你的材质。这将节省你一些时间。

简单的解决方案是删除当前的粒子GameObject,通过进入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;
}

8
Unity粒子系统出现框框问题:

很有可能您没有为粒子选择材质,或者之前的选择被覆盖了(例如移动资源)。这种粉色的颜色是Unity表示无法获取粒子系统材料时的情况。您可以通过选择一个新的材质或重新选择之前使用的粒子纹理来解决此问题。

在粒子对象的检查器底部,应该有一个称为渲染器的部分,在那里您可以选择一个新的材质。它是粒子系统中的最后一个选项卡。

enter image description here

暂时,您可以通过单击渲染器中的材质字段,并找到默认粒子来解决此问题。如果您想要,也可以使用其他材料。

如果您是通过脚本创建的粒子系统,则必须参见@Programmers的答案,但最终仍然缺少材料。


2
正如我在原帖的评论中所述,粉色纹理并不意味着空材质,而是表示材质存在错误,无论该材质是否为空或者由该材质引用的着色器存在编译错误。 - AresCaelum
@Eddge,我已经做出了更改。 - Tyler S. Loeper
这是最常见的情况,会发生这种情况。技术问题,如无法呈现粒子或基础文件丢失,或其他任何类似的问题,远远不会成为例外。 - Tyler S. Loeper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接