Объекты появляются из экрана в Unity

Я учусь на моей первой 2D-игре, встроенной в Unity на учебнике, и я столкнулся с проблемой, которую я не знаю, как решить. В этой игре есть случайно появляющиеся облака, которые должны оставаться на экране, и это написано в CloudSpawner сценарий:

Я поставил MaxX а также MinX в зависимости от размера камеры:

  void setMinAndMaxX(){

        Vector3 bounds = Camera.main.ScreenToWorldPoint (new Vector3(Screen.width, Screen.height, 0));

        minX = -bounds.x + 0.5f;
        maxX = bounds.x - 0.5f;

    }

А вот функция, которая устанавливает положение каждого облака из массива облаков:

void CreateClouds(){

        Shuffle (clouds);

        float positionY = 0f;

        for (int i = 0; i < clouds.Length; i++) {

            Vector3 temp = clouds [i].transform.position;

            temp.y = positionY;

            //temp.x = Random.Range (minX, maxX);

            if (controlX == 0) {

                temp.x = Random.Range (0, maxX);
                controlX = 1;

            } else if (controlX == 1) {

                temp.x = Random.Range (0, minX);
                controlX = 2;

            } else if (controlX == 2) {

                temp.x = Random.Range (1.0f, maxX);
                controlX = 3;

            } else if (controlX == 3) {

                temp.x = Random.Range (-1.0f, minX);
                controlX = 0;

            }

            lastCloudPositionY = positionY;

            clouds [i].transform.position = temp;

            positionY -= distanceBetweenClouds;

        }


    }

Позвольте мне объяснить, в чем здесь реальная проблема - скрипты должны работать как есть, но в Unity если я сначала нажму кнопку PAUSE, а затем нажму кнопку PLAY, облака хорошо появятся на экране. Но если я нажимаю только PLAY, облака появляются и за пределами экрана. У меня есть ощущение, что есть проблема с Unity программного обеспечения и, возможно, не с кодом, и я нашел поток, в котором говорится, что он должен быть противоположным (поэтому, если вы сначала нажмете pause, а затем воспроизведете, это может привести к проблемам с порождающими облаками - а не когда вы нажимаете просто play).

1 ответ

Хорошо, я нашел решение. В настоящее время я использую Unity версии 5.3.1f1, где есть небольшая разница с использованием screen.width в моем SetMinAndMax() функция. я добавил bounds.x = Mathf.Floor(bounds.x / 2); как это:

void setMinAndMaxX(){

    Vector3 bounds = Camera.main.ScreenToWorldPoint (new Vector3(Screen.width, Screen.height, 0));

    bounds.x = Mathf.Floor(bounds.x / 2);

    minX = -bounds.x + 0.5f;
    maxX = bounds.x - 0.5f;

}
Другие вопросы по тегам