Цвет системы частиц становится розовым при изменении начального цвета.

Я делаю игру для разбивания кирпичей и хочу, чтобы частица имела тот же цвет, что и кирпич, в который попадает мяч. Вот мой код:

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;

Это не работает, цвет частиц отображается розовым. Как это исправить?

Я использую Юнити 5.6.


person Prabin    schedule 20.09.2017    source источник
comment
Возможный Дубликат   -  person Thalthanas    schedule 20.09.2017
comment
Да уже проверил, так тоже не работает.   -  person Prabin    schedule 20.09.2017
comment
Если это не сработало, отредактируйте свой вопрос и добавьте последний код, который не работает.   -  person Programmer    schedule 20.09.2017
comment
Текущий код является последним кодом.   -  person Prabin    schedule 20.09.2017


Ответы (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. Если вы создаете свою систему частиц из меню Компонент ---> Эффекты ---> Система частиц, Unity не< /strong> прикрепите материал к системе частиц, чтобы он был розовым. Вам нужно будет использовать приведенный выше код для создания нового материала или сделать это вручную из редактора. Вы получите розовый ParticleSystem, если не сделаете этого.

Ваша проблема либо в этом, либо в справочной ошибке, описанной выше.

2. Если вы создаете свою систему частиц из меню GameObject ---> Effects ---> Particle System, Unity создаст новый GameObject, присоединит Система частиц и материал для нее. У вас не должно быть проблем с розовыми частицами, если только это не ошибка, о которой я говорил, когда частицы теряют связь с материалом при изменении цвета.

person Programmer    schedule 20.09.2017
comment
Спасибо за ответ. Тот же приведенный выше код работал, но я создал новый префаб системы частиц и прикрепил его к игровому объекту. На самом деле не знаю, является ли это ошибкой IDE. Но теперь все заработало. Спасибо вам, ребята!!! - person Prabin; 20.09.2017
comment
О, хорошо, понял, значит, ссылка на материал отсутствовала, поэтому он стал розовым. Спасибо @programmer !!! :) - person Prabin; 20.09.2017