Невозможно неявно преобразовать тип *** в **** - PullRequest
0 голосов
/ 01 января 2019

Я устанавливаю пул GameObject в единице, и я обнаружил ошибку.

Я пытаюсь сохранить объект из словаря в новый gameObject.

Пожалуйста, имейте в видупомните, я упростил код для поста.

public class Pool
{
    public string tag;
    public GameObject prefab;
    public int maximumSize;
}

public List<Pool> pools;
public Dictionary<string, Queue<GameObject>> poolDictionary;

private void UpdatePool()
{
        var objectPool = new Queue<GameObject>();

        for (int i = 0; i < pool.maximumSize; i++)
        {
            GameObject obj = Instantiate(pool.prefab);
            obj.SetActive(false);
            objectPool.Enqueue(obj);
        }

        poolDictionary.Add(pool.tag, objectPool);
}

  public void SpawnFromPool(string tag)
{
    // the error is present here:
    GameObject objectToSpawn = poolDictionary[tag];
}

Если я наберу:

  GameObject objectToSpawn = poolDictionary[tag].Dequeue();

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

Тип ошибки: Не удается неявно преобразовать тип 'System.Collections.Generic.Queue> UnityEngine.GameObject> в' UnityEngine.GameObject '

1 Ответ

0 голосов
/ 02 января 2019

Как уже говорилось, проблема в том, что poolDictionary[tag] имеет тип Queue<GameObject>, а не GameObject.

Если вам нужно получить первый элемент в этой очереди без использования Dequeue (который удаляетэлемент из очереди) вы можете просто использовать Peek вместо

GameObject objectToSpawn = poolDictionary[tag].Peek();

Этот метод похож на метод Dequeue, но Peek не изменяет очередь.


Чтобы получить их все, не удаляя их из очереди, вы можете использовать, например, ToArray() и пробегать элементы в цикле for или foreach илипросто получить доступ к определенному, например, равный (не в смысле издержек) вызов Peek может быть

GameObject objectToSpawn = poolDictionary[tag].ToArray()[0];

То, что я пока не понимаю, это почему использовать Queue, еслиВы не хотите Dequeue it ...

Вы, вероятно, могли бы просто использовать List<GameObject>, чем, поскольку порядок List также не изменился (по крайней мере, не делая это активно)

Если это явно для пула объектов (что, кажется, из именования иpawning) вам, возможно, стоит посмотреть учебник по пулам объектов .. спойлер: они используют List;)

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