40 lines
1.4 KiB
C#
40 lines
1.4 KiB
C#
using System;
|
|
using Cysharp.Threading.Tasks;
|
|
using UnityEngine.SceneManagement;
|
|
|
|
namespace Code.Scenes
|
|
{
|
|
public class SceneLoaderService : ISceneLoaderService
|
|
{
|
|
public async UniTaskVoid LoadSceneAsync(string sceneName, float waitFor = 0f, Action callBack = null)
|
|
{
|
|
// if (waitFor > 0f)
|
|
// yield return new WaitForSeconds(waitFor);
|
|
|
|
// AsyncOperation waitNextScene = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Single);
|
|
|
|
// while (!waitNextScene.isDone)
|
|
// yield return null;
|
|
|
|
// callback?.Invoke();
|
|
await UniTask.Delay(TimeSpan.FromSeconds(waitFor));
|
|
await SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Single).ToUniTask();
|
|
callBack?.Invoke();
|
|
}
|
|
|
|
public async UniTaskVoid LoadSceneAsync(int sceneId, float waitFor = 0f, Action callBack = null)
|
|
{
|
|
await UniTask.WhenAll(
|
|
UniTask.Delay(TimeSpan.FromSeconds(waitFor)),
|
|
SceneManager.LoadSceneAsync(sceneId, LoadSceneMode.Single).ToUniTask());
|
|
callBack?.Invoke();
|
|
}
|
|
|
|
public async UniTask LoadSceneAsyncAwaitable(int sceneId, float waitFor = 0f)
|
|
{
|
|
await UniTask.WhenAll(
|
|
UniTask.Delay(TimeSpan.FromSeconds(waitFor)),
|
|
SceneManager.LoadSceneAsync(sceneId, LoadSceneMode.Single).ToUniTask());
|
|
}
|
|
}
|
|
} |