Сравнить размер текущего объекта, извлеченного из пула, с последним объектом, извлеченным из пула - PullRequest
1 голос
/ 27 мая 2020

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

Создание объектов со случайным размером в пределах заданного диапазона с одинаковым расстоянием между ними независимо от частоты кадров

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

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

if(Time.time > nextBuilding)
    {
        spawningRatio = ((randomSize / 2) + (buildingPrefab.transform.localScale.x / 2) + distanceBetween) / (speed);
        nextBuilding = Time.time + spawningRatio;
        buildingPrefab.transform.localScale = new Vector3(randomSize, randomSize, randomSize);
        Instantiate(buildingPrefab, spawnPoint.transform.position, Quaternion.identity);
        randomSize = Random.Range(ranMin, ranMax);
        }

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

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

public class ObjectPooler : MonoBehaviour
{



 [System.Serializable]
    public class Pool
    {
        public string tag;
        public GameObject prefab;
        public int size;
    }

#region Singleton
public static ObjectPooler Instance;

private void Awake()
{
    Instance = this;
}
#endregion

public List<Pool> pools;

public Dictionary<string, Queue<GameObject>> poolDictionary;


private void Start()
{
    poolDictionary = new Dictionary<string, Queue<GameObject>>();

    foreach (Pool pool in pools)
    {

        Queue<GameObject> objectPool = new Queue<GameObject>();


        for (int i = 0; i < pool.size; i++)
        {

            GameObject obj = Instantiate(pool.prefab);
            obj.SetActive(false);
            objectPool.Enqueue(obj);
        }

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



}

public GameObject SpawnFromPool (string tag, Vector3 position, Quaternion rotation)
{

    if (!poolDictionary.ContainsKey(tag))
    {
        Debug.LogWarning("Tag doesn't exist");
        return null;
    }



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

    objectToSpawn.SetActive(true);
    objectToSpawn.transform.position = position;
    objectToSpawn.transform.rotation = rotation;

    poolDictionary[tag].Enqueue(objectToSpawn);

    return objectToSpawn;
}

}

Это сценарий для моего Object Pooler, изученный из учебника.

Затем я вызываю функцию в моем ScrollingCity Script, где я пытаюсь получить значение преобразования последнего созданного объекта, чтобы я мог сравнить их с текущий объект, но я могу получить преобразование только первого объекта, пока он не достигнет конца очереди.

if (Time.time> nextBuilding) {

        nextBuilding = Time.time + spawningRatio;
        objectPooler.SpawnFromPool("Build", transform.position, Quaternion.identity);
        lastBuilding = objectPooler.SpawnFromPool("Build", transform.position, Quaternion.identity);
        Debug.Log(lastBuilding.transform.localScale);
    }

И он возвращает преобразование только первого объекта в журнале:

enter image description here

Итак, мой вопрос в том, как я могу получить доступ к масштабу последнего объекта в Очередь и сравните ее с текущим, чтобы контролировать частоту их создания и эффективно поддерживать одинаковое расстояние между каждым объектом независимо от масштаба?

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