Как я могу предотвратить уничтожение всех экземпляров объекта в Unity? - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть готовый объект под названием Beam, который содержит несколько вещей, но один - это объект, который при столкновении и срабатывании его экземпляра должен сам себя уничтожить.

В настоящее время у меня есть скрипт, который генерируетвсе экземпляры в переменной с именем Beams.Здесь показано:

enter image description here

Когда это выполняется, в нем создаются клоны.Здесь можно увидеть:

enter image description here

На последнем изображении вы также увидите префаб Луча, в котором находится Cookie.Это печенье, где у меня есть скрипт, который говорит, если я его ударил, уничтожить.Этот код выглядит следующим образом:

...

public class Collectibles : MonoBehaviour
{
    GameManager game;

    // Start is called before the first frame update
    void Start()
    {
        game = FindObjectOfType<GameManager> ();
    }

    ...

    void OnTriggerEnter2D(Collider2D other) {
        if(other.tag == "Player"){
            string coinType = "Cookie";
            game.AddCollectible(coinType);
            Destroy(gameObject);
        }


    }
}

В настоящее время, когда я сталкиваюсь с файлом cookie, он запускает команду Destroy (gameObject) и уничтожает ВСЕ экземпляры файла cookie (по одному на каждый клон).

Этот код живет на Cookie, а не на Beams.Это верно?Должен ли я иметь код где-нибудь еще?Я также пытался уничтожить (это), но это не делает то, что я думал, что будет делать (только экземпляр).

Возможно ли, что откуда я вызывал уничтожить, сценарий не имеет доступа кслучаи, или я что-то упустил?Заранее спасибо!

1 Ответ

0 голосов
/ 04 апреля 2019

Если я понимаю ваш вопрос, вы хотите, чтобы, когда «игрок» сталкивался с экземпляром «луча», уничтожал только экземпляр Cookie (или игровой объект, содержащий скрипт), в этом случае он делал бы это сtag:

public GameObject[] arrayofcookie;

public int destroyedinstances=1; 
//this int will tell how many instances you want to be destroyed (from the last instantiated to the first)

//for this example the last instance will be deleted


public void destroyCookie()
{
    arrayofcookie= GameObject.FindGameObjectsWithTag("Cookie");
    for (int i = 0; i < destroyedinstances; i++)
    {
        Destroy(arrayofcookie[i].gameObject);
    }
}

Вы вызываете этот метод в сценарии cookie, в коллайдере или, если предпочитаете, с помощью метода invoke через N секунд.

Не думаю, что я понял ваш вопросочень хорошо, но в этих задачах я предпочитаю использовать лейбл, и это также зависит от характера вашей игры

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...