Частица единства не удаляется - PullRequest
0 голосов
/ 10 июня 2018

Я пытаюсь удалить игровой объект (powerup), но частица клонируется сама, даже после того, как я ее удаляю.Как бы я мог это исправить?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PowerUp : MonoBehaviour {

    public float multiplier = 1.4f;
    public float duration = 4f;

    public GameObject pickupEffect;

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.CompareTag("Player"))
        {
           StartCoroutine (Pickup(collision));
        }
    }

    IEnumerator Pickup(Collider2D player)
    {
        Debug.Log("Power up picked up!");

        Instantiate(pickupEffect, transform.position, transform.rotation;

        PlayerStats stats = player.GetComponent<PlayerStats>();
        stats.health *= multiplier;

        GetComponent<SpriteRenderer>().enabled = false;
        GetComponent<Collider2D>().enabled = false;


        yield return new WaitForSeconds(duration);

        stats.health /= multiplier;

        Destroy(this);
    }
}

1 Ответ

0 голосов
/ 10 июня 2018

В конце сопрограммы измените Destroy(this); на Destroy(gameObject);

Destroy(this);, уничтожив компонент PowerUp.в то время как Destroy(gameObject); уничтожает все дерево.


Также OnTriggerEnter2D может вызываться несколько раз подряд, вызывая бесконечные экземпляры.Вы можете добавить ограничение до StartCoroutine, чтобы предотвратить это.

private void OnTriggerEnter2D(Collider2D collision)
{
    if (collision.CompareTag("Player"))
    {
       if (!flag)
           StartCoroutine (Pickup(collision));
    }
}

IEnumerator Pickup(Collider2D player)
{
    flag = true;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...