Вопрос:

Система частиц OnTriggerEnter не работает (но все остальные функции работают)

c# unity3d

21 просмотра

2 ответа

43 Репутация автора

У меня есть простой сценарий, onTriggerEnter2d, когда враг ударил игрока = минус 1 жизнь и т. Д. Работает отлично.

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

У игрока есть BoxColider2d с триггером.

Спасибо за любую помощь.

некоторый код:

ВРАГ:

 public ParticleSystem explosion;
 private void OnTriggerEnter2D(Collider2D enter)
 {
 if (enter.gameObject.tag.Equals("Player"))
 {
     HartCount.HartValue -= 1;
     gameObject.GetComponent<ParticleSystem>().Play();
     Destroy(this.gameObject);
 }
 }

Я пробовал также это:

 public GameObject explosion;
 private void OnTriggerEnter2D(Collider2D enter)
 {
 if (enter.gameObject.tag.Equals("Player"))
 {
     HartCount.HartValue -= 1;
     Instantiate (explosion, transform.position, Quaterion.identity);
     Destroy(this.gameObject);
 }
 }
Автор: Arek Marcjanik Источник Размещён: 10.08.2019 08:01

Ответы (2)


0 плюса

71 Репутация автора

Учитывая, что вы не поставили систему частиц как дочерний элемент игрового объекта, попробуйте это:

public GameObject explosion;  //drag the particle system prefab here
private void OnTriggerEnter2D(Collider2D enter)
{
   if (enter.gameObject.tag.Equals("Player")) //when the enemy collides with the Player
   {
      HartCount.HartValue -= 1;
      GameObject particle = Instantiate (explosion, this.transform.position, Quaterion.identity);
      particle.GetComponent<ParticleSystem>().Play();
      Destroy(this.gameObject);
   }
}

Убедитесь, что система частиц достаточно масштабирована, чтобы она действительно была видна. Приведенный выше код создаст систему частиц по вашему выбору (ту, которую вы перетащили в поле «Взрыв» в редакторе) в позиции врага.

Автор: Chochosan Размещён: 10.08.2019 10:40

0 плюса

303 Репутация автора

Поэтому после некоторого раскопок я нашел вероятную причину вашей проблемы.
Системы частиц не вызывают события OnCollisionEnter и OnTriggerEnter.
Вместо этого они запускают пользовательское событие, а именно OnParticleCollision .

По сути, этот метод может вызываться как для объекта системы частиц, так и для объекта, который был поражен.
Вы можете использовать это так:

public ParticleSystem explosion;

private void OnParticleCollision(GameObject other)
{
    if (other.tag.Equals("Player"))
    {
        HartCount.HartValue -= 1;
        gameObject.GetComponent<ParticleSystem>().Play();
        Destroy(this.gameObject);
    }
}

Помните, что это адаптированная копия вашего кода.
На самом деле есть еще одна проблема:
вы играете в систему частиц, но затем вы сразу же уничтожаете gameObject, поэтому система частиц также исчезает.

Примечание 1.
В документации отсутствует четкая информация о том, как получить дополнительную информацию о столкновении частиц.
Пример кода на связанной странице использует что-то вроде этого:

var collisionEvents = new List<ParticleCollisionEvent>();
myParticles.GetCollisionEvents(other, collisionEvents);

Где myParticles - это ссылка на вашу систему частиц.

Тем не менее, нет документации по этому методу.
Вместо этого есть некоторая документация по устаревшему статическому GetCollisionEvent.
Я полагаю, что документация устарела, поэтому вы должны использовать нестатический метод.

Примечание 2:
я не уверен, почему враг может поразить вашего игрока, основываясь на документации, этого не должно произойти.
Но, может быть, я просто что-то неправильно истолковал.

Автор: Chillersanim Размещён: 11.08.2019 07:13
Вопросы из категории :
32x32