Это происходит потому, что вы вызываете метод Invoke("loadMenuLevel", 3f);
в методе Start()
в скрипте SplashScrean.cs
.
Start()
вызывается очень скоро после прикрепления MonoBehaviour
к объекту.Якобы, вы прикрепили его к GameObject
в сцене.Все они поражаются одновременно.
Вы также можете использовать его как вызываемый левой кнопкой мыши в методе Update()
того же сценария:
if (Input.GetKey(KeyCode.Mouse0))
{
loadMenuLevel();
}
Я бы добавил bools
ккаждый из сценариев загрузки, которые установлены на true
, когда каждая задача завершается.Затем в SplashScrean.cs
измените вышеуказанное условие для автоматической загрузки уровня, если все три выполнены.Или сохраните условие нажатия клавиши и добавьте bools
.
if (Application.internetReachability != NetworkReachability.NotReachable
&& loadScriptComplete && isCurrentVersion && Input.GetKey(KeyCode.Mouse0))
{
loadMenuLevel();
}
Теперь, если вам также нужна загрузка MonoBehaviours
для ожидания выполнения их логики загрузки, подумайте о добавлении логики Update()
для тех, кто проверяет установленный вами флаг в CheckNetwork.cs
.
//For example. Instead of this
private void Start()
{
Invoke("LoadAsyncOperation", 3f);
StartCoroutine(LoadAsyncOperation());
}
//Do this
private void Update()
{
//Note that we only need to check if it is a CurrentVersion, as if that is true, then we definitely have internet access.
if(CheckNetwork.IsCurrentVersion) {
Invoke("LoadAsyncOperation", 3f);
StartCoroutine(LoadAsyncOperation());
}
}
Редактирование / Дополнительные примечания Как я заметил:
CheckNetwork.cs
ссылки CheckVersion();
вelse
предложение.Это кажется бессмысленным.Для LoadTxtData()
невозможно установить логику, на которую CheckVersion()
полагается в этот период времени.Это своего рода состояние гонки, если хотите.Кроме того, вы все равно обрабатываете эту регистрацию в LoadTxtData()
, поэтому я бы просто сделал это там.