Как мне получить доступ к префабу и всем его экземплярам клонов в c# и unity? - PullRequest
0 голосов
/ 29 мая 2020

Мне снова нужна небольшая помощь. В настоящее время я работаю над усилениями, и он настроен так, чтобы усиление влияло на сборный блок, который помещен в его слот сборного, так что это означает, что в настоящее время он влияет только на один объект (в моем случае - на врага). Когда игра начинается, я порождаю около 20 врагов, и если я возьму усиление, я хочу, чтобы он повлиял на всех этих порожденных врагов, а не только на того, который перетаскивается в сценарий, есть ли у кого-нибудь решение или альтернативный метод, чтобы сделать это, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

Чтобы получить все игровые объекты в массив, вы можете использовать Tag .

Просто добавьте тег 'Enemy' в префаб и используйте следующий код:

public GameObject[] enemys;

void Start()
    {
        respawns = GameObject.FindGameObjectsWithTag("Enemy");
    }

Полная документация Unity ЗДЕСЬ

0 голосов
/ 29 мая 2020

При их создании сохраните их в списке, а затем выполните итерацию по всем и обновите их значение

В вашем случае, например,

// if enemies have a certain Component rather use that type here instead of GameObject
public GameObject enemyPrefab;
// and use the same type here instead of GameObject
private List<GameObject> enemyInstances = new List<GameObject> enemyInstances;

private void Start()
{
    for(int i = 0; i < 20; i++)
    {
        var newEnemy = Instantiate(enemyPrefab);
        enemyInstances.Add(newEnemy);
    }
}

, а затем

public void UpdateEnemies()
{
    foreach(var enemy in enemyInstances)
    {
        // skip already destroyed objects
        if(!enemy) continue;

        // whatever to be done to the enemies
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...