public static async UniTask ForceRequest() { var sceneCount = SceneManager.sceneCount; var tasks = new List <UniTask>(); for (var i = 0; i < sceneCount; i++) { var scene = SceneManager.GetSceneAt(i); var rootObjects = scene.GetRootGameObjects(); foreach (var rootObject in rootObjects) { var targets = UnityUtility.FindObjectsOfInterface <LocalizeAtlasRequest>(rootObject); foreach (var target in targets) { var task = UniTask.Defer(() => target.RequestAtlas()); tasks.Add(task); } } } await UniTask.WhenAll(tasks); }
public async UniTask RequestAtlas() { var localizeAtlasManager = LocalizeAtlasManager.Instance; var tasks = new List <UniTask>(); foreach (var folderGuid in folderGuids) { if (string.IsNullOrEmpty(folderGuid)) { continue; } var folderPath = localizeAtlasManager.GetFolderPathFromGuid(folderGuid); if (string.IsNullOrEmpty(folderPath)) { continue; } var task = UniTask.Defer(() => localizeAtlasManager.LoadAtlas(folderPath)); tasks.Add(task); } await UniTask.WhenAll(tasks); }
private async UniTaskVoid DeferSampleAsync() { // Deferで包むと遅延評価できる var uniTask = UniTask.Defer( () => LoadTextAsync(@"data.txt")); // awaitして初めてLoadTextAsync()が実行される await uniTask; }
public async Task D2() { var created = false; var v = UniTask.Defer(() => { created = true; return(UniTask.Run(() => 10).AsUniTask()); }); created.Should().BeFalse(); await v; created.Should().BeTrue(); }
public async Task D() { var created = false; var v = UniTask.Defer(() => { created = true; return(UniTask.Run(() => 10)); }); created.Should().BeFalse(); var t = await v; created.Should().BeTrue(); t.Should().Be(10); }
public async UniTask ReloadAllAtlas() { var atlasFolders = atlasCacheByAtlasFolder.Keys.ToArray(); var tasks = new List <UniTask>(); foreach (var altasFolder in atlasFolders) { var task = UniTask.Defer(() => LoadAtlas(altasFolder, true)); tasks.Add(task); } await UniTask.WhenAll(tasks); }
protected override async UniTask UpdateContents(GridVirtualScroll <T> .GridElement info) { if (elements == null) { return; } var elementObjectCount = elements.Count; var elementCount = info.Elements.Count; try { // 足りない. if (elementObjectCount < elementCount) { var num = elementCount - elementObjectCount; var newElements = UnityUtility.Instantiate <TComponent>(elementParent, elementPrefab, num).ToArray(); foreach (var newElement in newElements) { OnCreateElement(newElement); } elements.AddRange(newElements); } } catch (Exception e) { Debug.LogException(e); } var activeElements = new List <TComponent>(); var updateContentsTasks = new List <UniTask>(); for (var i = 0; i < elementCount; i++) { var elementIndex = info.StartIndex + i; var elementInfo = info.Elements.ElementAtOrDefault(i); var element = elements.ElementAtOrDefault(i); if (element != null && elementInfo != null) { activeElements.Add(element); var updateContentsTask = UniTask.Defer(() => UpdateContents(elementIndex, elementInfo, element)); updateContentsTasks.Add(updateContentsTask); } } try { await UniTask.WhenAll(updateContentsTasks); } catch (Exception e) { Debug.LogException(e); } // 無効なオブジェクト非表示. foreach (var element in elements) { var active = activeElements.Contains(element); UnityUtility.SetActive(element, active); } }
public async UniTask RegisterCurrentScene(ISceneArgument sceneArgument) { if (currentScene != null) { return; } var scene = SceneManager.GetSceneAt(0); while (!scene.isLoaded) { await UniTask.DelayFrame(1); } var definition = ScenePaths.FirstOrDefault(x => x.Value == scene.path); var identifier = definition.Equals(default(KeyValuePair <Scenes, string>)) ? null : (Scenes?)definition.Key; var sceneInstance = UnityUtility.FindObjectsOfInterface <ISceneBase>().FirstOrDefault(); CollectUniqueComponents(scene.GetRootGameObjects()); if (sceneInstance != null) { currentScene = new SceneInstance(identifier, sceneInstance, SceneManager.GetSceneAt(0)); } if (currentScene == null || currentScene.Instance == null) { Debug.LogError("Current scene not found."); return; } currentScene.Instance.SetArgument(sceneArgument); await OnRegisterCurrentScene(currentScene); history.Add(sceneArgument); // ISceneEvent. var tasks = new List <UniTask>(); var rootObjects = scene.GetRootGameObjects(); foreach (var rootObject in rootObjects) { var targets = UnityUtility.FindObjectsOfInterface <ISceneEvent>(rootObject); foreach (var target in targets) { var task = UniTask.Defer(() => target.OnLoadScene()); tasks.Add(task); } } await UniTask.WhenAll(tasks); // Initialize. await currentScene.Instance.Initialize(); // Prepare. if (onPrepare != null) { onPrepare.OnNext(sceneArgument); } await currentScene.Instance.Prepare(false); if (onPrepareComplete != null) { onPrepareComplete.OnNext(sceneArgument); } // Enter. if (onEnter != null) { onEnter.OnNext(sceneArgument); } currentScene.Instance.Enter(false); if (onEnterComplete != null) { onEnterComplete.OnNext(sceneArgument); } }