Объекты появляются из экрана в 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;
}