OnParticleTrigger (): Как получить коллайдер, в который попала частица? - PullRequest
0 голосов
/ 02 марта 2020

Я пытаюсь потушить guish пожар в Unity3d. У меня есть 2 системы частиц: огонь и вода. Так как 2 системы частиц не могут столкнуться, я добавил коллайдер к основанию огня (где проверен isTrigger). Я использую OnParticleTrigger(), чтобы нанести вред здоровью огня. Но теперь я хочу иметь несколько пожаров, поэтому мне нужно знать, в какой коллайдер огня / ящика попала частица. Я знаю, что вы не можете получить коллайдер как OnTriggerEnter(), но есть ли способ обойти это?

Я пробовал OnParticleCollision(), но частицы воды отскакивают от коробочного коллайдера (это не тот визуальный эффект, который я хочу).

1 Ответ

0 голосов
/ 31 марта 2020

В каждом триггерном событии я получаю все частицы, попавшие в коллайдер. Затем для каждой из этих частиц я проверяю, в какой коробочный коллайдер они вошли с collider.bounds.Contains(), и повреждаю огонь, которому принадлежит коллайдерный ящик. Я не знаю, является ли это лучшим способом сделать это (вероятно, нет), но пока это работает.

private void OnParticleTrigger()  
    {

        //Get all particles that entered a box collider
        List<ParticleSystem.Particle> enteredParticles = new List<ParticleSystem.Particle>();
        int enterCount = waterPS.GetTriggerParticles(ParticleSystemTriggerEventType.Enter, enteredParticles);

        //Get all fires
        GameObject[] fires = GameObject.FindGameObjectsWithTag("Fire");

        foreach (ParticleSystem.Particle particle in enteredParticles)
        {
            for (int i = 0; i < fires.Length; i++)
            {
                Collider collider = fires[i].GetComponent<Collider>();
                if (collider.bounds.Contains(particle.position))
                {
                    fires[i].GetComponent<Fire>().Damage();
                }
            }
        }
    }
...