У меня есть 2 сцены в моем проекте Unity.Первая - это сцена загрузки, которая состоит из простого текста и ползунка.А вторая сцена - это случайный генератор 'terrain' (3 различных куба размером 1x1x1).
Время загрузки второй сцены составляет около 15 секунд, но когда я использую метод progress из AsyncOperation, Я получаю только значения 0 или 0,9.
Это мой скрипт для панели загрузки:
IEnumerator LoadingScreen(int level)
{
button.gameObject.SetActive(false);
loadingScreenObj.SetActive(true);
AsyncOperation async = SceneManager.LoadSceneAsync(level);
async.allowSceneActivation = false;
Debug.Log(async.progress);
while(!async.isDone){
slider.value = async.progress;
Debug.Log(slider.value);
if (async.progress >= 0.9f){
slider.value = 1f;
async.allowSceneActivation = true;
}
yield return null;
}
}
А скрипт для генератора местности:
public class SpawnInitialFloor : MonoBehaviour {
public GameObject [] prefabs;
private GameObject floor;
List<Vector2> list = new List<Vector2>();
private float y = 0;
private float yWater = -0.1f;
public int maxIterations = 50;
private int max = 1;
private int min = -1;
// Use this for initialization
void Start (){
setSpawn();
}
private void setSpawn()
{
int r;
for (int i = 0; i < maxIterations; ++i){
for (int xIt = min; xIt <= max; ++xIt){
for (int zIt = min; zIt <= max; ++zIt){
if (!list.Contains(new Vector2(xIt, zIt))){
r = Random.Range(0, 3);
if (r == 1)
floor = Instantiate(prefabs[r], new Vector3(xIt, yWater, zIt), Quaternion.identity) as GameObject;
else
floor = Instantiate(prefabs[r], new Vector3(xIt, y, zIt), Quaternion.identity) as GameObject;
list.Add(new Vector2(xIt, zIt));
}
}
}
max += 1;
min -= 1;
}
}
}
Строка загрузки всегда выглядит примерно так в течение 15 секунд загрузки другой сцены: Строка загрузки
И до и после полной загрузки второй сцены: До - После
Я хотел знать, нужно ли мне что-то изменить в скрипте SpawnInitialFloor или использовать что-то другое вместо метода прогресса AsyncOperation.