2-й бегун одинаковое расстояние между игровыми объектами разных размеров - PullRequest
0 голосов
/ 16 марта 2019


моя проблема заключается в том, чтобы сохранить одинаковый интервал между префабами разного размера в случайно сгенерированном 2-мерном бегуне.
я хочу порождать новый игровой объект каждую секунду
скажем, у меня есть простой спрайт под названием квадрат
я порождаю его с помощью сопрограмм, и расстояние всегда равно 1 с движения
я добавил в качестве префаба массивы квадратов разного размера, и когда я создаю их с квадратами в 1 единицу, я бы хотел иметь одинаковое расстояние между префабами, как если бы я порождал отдельные квадраты один за другим. в основном я хотел бы создавать префабы разных размеров и порождать их с одинаковым интервалом, сохраняя одинаковое расстояние между разными префабами.
возможно, решение состоит в том, чтобы порождать префабы на основе измеренного расстояния между префабами вместо порождения в зависимости от времени
как бы вы подошли к этой проблеме?
я могу вычислить ширину пустого gameObject на основе ширины массива его дочерних элементов?
я надеюсь, вы понимаете, о чем я спрашиваю
спасибо!

 void Start() {
    stvaranjeFunkc();
}

// Update is called once per frame
void Update() {



        if (privremeniNiz.tag == "zamka")
        {
            if (privremeniNiz.transform.position.x + privremeniNiz.transform.localScale.x / 2 < stvarac.transform.position.x - vrijednostGranice)
                stvaranjeFunkc();
        }

        if (privremeniNiz.tag == "nizPreprekaZamka")
        {

        // if ((privremeniNiz.GetComponent<nizKutija>().niz[privremeniNiz.GetComponent<nizKutija>().randomBrKutija].transform.position.x + privremeniNiz.GetComponent<nizKutija>().niz[privremeniNiz.GetComponent<nizKutija>().randomBrKutija].transform.localScale.x / 2)
        //> stvarac.transform.position.x - vrijednostGranice)
         if ((privremeniNiz.gameObject.GetComponent<nizKutija>().niz[0].transform.position.x + privremeniNiz.GetComponent<nizKutija>().niz[0].transform.localScale.x / 2)
        > stvarac.transform.position.x - vrijednostGranice)
        return;


       // if (privremeniNiz.GetComponent<nizKutija>().niz[privremeniNiz.GetComponent<nizKutija>().randomBrKutija].transform.position.x + privremeniNiz.GetComponent<nizKutija>().niz[privremeniNiz.GetComponent<nizKutija>().randomBrKutija].transform.localScale.x / 2 < stvarac.transform.position.x - vrijednostGranice)
            stvaranjeFunkc();
        }

    //if (!cekanje)
    //    StartCoroutine(stvaranje());
    //else return;
}

void stvaranjeFunkc()
{
    int poz = Random.Range(0, prepreka.Length);
    GameObject temp =Instantiate(prepreka[poz], stvarac.transform.position, stvarac.transform.rotation);
    privremeniNiz = temp;
}

у меня это работает, когда у меня есть простой gameobject (tag = zamka), но когда я spawn gameobject тега nizPreprekaZamka, который является пустым gameobject, к которому прикреплен скрипт, который создает массив простых объектов spawner просто порождает сотни игровых объектов одновременно

Ответы [ 2 ]

0 голосов
/ 16 марта 2019

Положение GameObject находится в его центре, а масштаб - его общий размер.

Таким образом, край объекта находится на его месте плюс половина шкалы:

float distance = transform.position.x + (transform.scale.x / 2f);

Таким образом, для каждого нового префаба вы хотите добавить расстояние между центром и краем обоих GameObject плюс расстояние, которое должно их разделять.

public GameObject[] prefabs;
public float distanceBetweenObjects;

float newPosition = prefabs[0].transform.position.x;

newPosition += (prefabs[0].transform.scale.x / 2f);
newPosition += distanceBetweenObjects;
newPosition += (prefabs[1].transform.scale.x / 2f);
0 голосов
/ 16 марта 2019

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

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

Сколько контента за кадром? Я предполагаю, что вы просто добавляете новые блоки в конец массива. Это означает, что последний блок всегда самый дальний за кадром, что помогает нам. Это также помогает узнать размер экрана. В этом случае вы можете рассчитать объем содержимого вне экрана как last block position + its length + fixed_space - screen size, где fixed_space - это объем пространства, который вы хотите после каждого блока.

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

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