#if UNITY_EDITOR using System; using UnityEditor; using UnityEditor.SceneManagement; using UnityEngine; using UnityEngine.SceneManagement; public class RiveAssetAutoRefresh: AssetPostprocessor { private static bool refreshQueued; private static void OnPostprocessAllAssets( string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) { foreach (string assetPath in importedAssets) { if (!assetPath.EndsWith(".riv", StringComparison.OrdinalIgnoreCase)) continue; QueueSceneReload(); return; } } private static void QueueSceneReload() { if (refreshQueued) return; refreshQueued = true; EditorApplication.delayCall += ReloadSceneAfterImport; } private static void ReloadSceneAfterImport() { refreshQueued = false; if (EditorApplication.isPlaying) { Debug.Log("A Rive asset changed. Scene reload skipped because Play Mode is active."); return; } Scene activeScene = SceneManager.GetActiveScene(); if (!activeScene.IsValid() || string.IsNullOrEmpty(activeScene.path)) { Debug.LogWarning("A Rive asset changed, but the active scene has not been saved yet."); return; } bool saved = EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo(); if (!saved) { Debug.LogWarning("Rive scene refresh cancelled because the scene was not saved."); return; } EditorSceneManager.OpenScene( activeScene.path, OpenSceneMode.Single); Debug.Log("Rive asset changed. THe active scene was reloaded automatically."); } } #endif