//----- property ----- //----- method ----- private void ApplyDummyAsset() { if (Application.isPlaying) { return; } if (Image.sprite != null && Image.sprite.name != DummyAssetName) { return; } if (string.IsNullOrEmpty(assetGuid)) { return; } if (string.IsNullOrEmpty(spriteId)) { return; } var assetPath = AssetDatabase.GUIDToAssetPath(assetGuid); if (string.IsNullOrEmpty(assetPath)) { return; } if (spriteAssetCache == null) { spriteAssetCache = new FixedQueue <AssetCacheInfo>(250); } Sprite spriteAsset = null; var cacheAssetInfo = spriteAssetCache.FirstOrDefault(x => x.assetGuid == assetGuid && x.spriteId == spriteId); if (cacheAssetInfo == null) { spriteAsset = AssetDatabase.LoadAllAssetsAtPath(assetPath) .OfType <Sprite>() .FirstOrDefault(x => x.GetSpriteID().ToString() == spriteId); if (spriteAsset != null) { cacheAssetInfo = new AssetCacheInfo() { assetGuid = assetGuid, spriteId = spriteId, spriteAsset = spriteAsset, }; spriteAssetCache.Enqueue(cacheAssetInfo); } } else { spriteAsset = cacheAssetInfo.spriteAsset; spriteAssetCache.Remove(cacheAssetInfo); spriteAssetCache.Enqueue(cacheAssetInfo); } if (spriteAsset == null) { return; } DeleteCreatedAsset(); var texture = spriteAsset.texture; var rect = spriteAsset.rect; var pivot = spriteAsset.pivot; var pixelsPerUnit = spriteAsset.pixelsPerUnit; var border = spriteAsset.border; var sprite = Sprite.Create(texture, rect, pivot, pixelsPerUnit, 0, SpriteMeshType.FullRect, border); sprite.name = DummyAssetName; sprite.hideFlags = HideFlags.DontSaveInEditor; Image.sprite = sprite; }
private IEnumerator UnloadSceneCore(SceneInstance sceneInstance) { var scene = sceneInstance.GetScene(); if (!scene.HasValue) { yield break; } if (SceneManager.sceneCount <= 1) { yield break; } UnityAction <Scene> sceneUnloaded = s => { if (s.IsValid()) { if (sceneInstance.Identifier.HasValue) { var identifier = sceneInstance.Identifier.Value; if (loadedscenes.ContainsKey(identifier)) { loadedscenes.Remove(identifier); } } if (cacheScenes.Contains(sceneInstance)) { cacheScenes.Remove(sceneInstance); } if (onUnloadScene != null) { onUnloadScene.OnNext(sceneInstance); } } }; var rootObjects = scene.Value.GetRootGameObjects(); foreach (var rootObject in rootObjects) { var targets = UnityUtility.FindObjectsOfInterface <ISceneEvent>(rootObject); foreach (var target in targets) { yield return(target.OnUnloadSceneAsObservable().ToYieldInstruction()); } } AsyncOperation op = null; try { SceneManager.sceneUnloaded += sceneUnloaded; op = SceneManager.UnloadSceneAsync(scene.Value); } catch (Exception e) { SceneManager.sceneUnloaded -= sceneUnloaded; Debug.LogException(e); if (onUnloadError != null) { onUnloadError.OnNext(Unit.Default); } yield break; } while (!op.isDone) { yield return(op); } SceneManager.sceneUnloaded -= sceneUnloaded; if (onUnloadSceneComplete != null) { onUnloadSceneComplete.OnNext(sceneInstance); } }
//----- property ----- //----- method ----- private void ApplyDummyAsset() { if (Application.isPlaying) { return; } DeleteCreatedAsset(); if (RawImage.texture != null && RawImage.texture.name != DummyAssetName) { return; } if (string.IsNullOrEmpty(assetGuid)) { return; } var assetPath = AssetDatabase.GUIDToAssetPath(assetGuid); if (string.IsNullOrEmpty(assetPath)) { return; } if (textureAssetCache == null) { textureAssetCache = new FixedQueue <AssetCacheInfo>(100); } Texture textureAsset = null; var cacheAssetInfo = textureAssetCache.FirstOrDefault(x => x.assetGuid == assetGuid); if (cacheAssetInfo == null) { textureAsset = AssetDatabase.LoadMainAssetAtPath(assetPath) as Texture; if (textureAsset != null) { cacheAssetInfo = new AssetCacheInfo() { assetGuid = assetGuid, textureAsset = textureAsset, }; textureAssetCache.Enqueue(cacheAssetInfo); } } else { textureAsset = cacheAssetInfo.textureAsset; textureAssetCache.Remove(cacheAssetInfo); textureAssetCache.Enqueue(cacheAssetInfo); } if (textureAsset == null) { return; } DeleteCreatedAsset(); var texture = new Texture2D(textureAsset.width, textureAsset.height, TextureFormat.ARGB32, false); texture.name = DummyAssetName; texture.hideFlags = HideFlags.DontSaveInEditor; Graphics.ConvertTexture(textureAsset, texture); // Bug: UnityのバグでこのタイミングでアクティブなRenderTextureを空にしないと下記警告が出る. // 「Releasing render texture that is set to be RenderTexture.active!」. RenderTexture.active = null; RawImage.texture = texture; }