123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- using System;
- using UnityEngine;
- using UnityEditor;
- using System.IO;
- using UnityEditor.SceneManagement;
- using UnityEngine.SceneManagement;
- using static UnityEditor.Rendering.AnimationClipUpgrader;
-
- internal static class URP2DConverterUtility
- {
- public static bool IsPSB(string path)
- {
- if (string.IsNullOrEmpty(path))
- throw new ArgumentNullException(nameof(path));
-
- if (path.StartsWith("Packages"))
- return false;
-
- return path.EndsWith(".psb") || path.EndsWith(".psd");
- }
-
-
- public static bool IsMaterialPath(string path, string id)
- {
- if (string.IsNullOrEmpty(path))
- throw new ArgumentNullException(nameof(path));
-
- if (path.StartsWith("Packages"))
- return false;
-
- if (path.EndsWith(".mat"))
- return URP2DConverterUtility.DoesFileContainString(path, new string[] { id });
-
- return false;
- }
-
- public static bool IsPrefabOrScenePath(string path, string[] ids)
- {
- if (string.IsNullOrEmpty(path))
- throw new ArgumentNullException(nameof(path));
-
- if (path.StartsWith("Packages"))
- return false;
-
- if (path.EndsWith(".prefab", StringComparison.OrdinalIgnoreCase) || path.EndsWith(".unity", StringComparison.OrdinalIgnoreCase))
- return URP2DConverterUtility.DoesFileContainString(path, ids);
-
- return false;
- }
-
- public static bool IsPrefabOrScenePath(string path, string id)
- {
- return IsPrefabOrScenePath(path, new string[] { id });
- }
-
- public static bool DoesFileContainString(string path, string[] strs)
- {
- if (strs != null && strs.Length > 0)
- {
- using (StreamReader file = File.OpenText(path))
- {
- string line;
- while ((line = file.ReadLine()) != null)
- {
- for (int i = 0; i < strs.Length; i++)
- {
- if (line.Contains(strs[i]))
- return true;
- }
- }
- }
- }
-
- return false;
- }
-
- public static string UpgradePSB(string path)
- {
- AssetDatabase.ImportAsset(path, ImportAssetOptions.ForceSynchronousImport | ImportAssetOptions.ForceUpdate);
- return string.Empty;
- }
-
- public static string UpgradePrefab(string path, Action<GameObject> objectUpgrader)
- {
- UnityEngine.Object[] objects = AssetDatabase.LoadAllAssetsAtPath(path);
-
- int firstIndex = 0;
- for (int i = 0; i < objects.Length; i++)
- {
- if (objects[i] as GameObject)
- {
- firstIndex = i;
- break;
- }
- }
-
- // There should be no need to check this as we have already determined that there is something that needs upgrading
- if (!PrefabUtility.IsPartOfImmutablePrefab(objects[firstIndex]))
- {
- for (int objIndex = 0; objIndex < objects.Length; objIndex++)
- {
- GameObject go = objects[objIndex] as GameObject;
- if (go != null)
- {
- objectUpgrader(go);
- }
- }
-
- GameObject asset = objects[firstIndex] as GameObject;
- PrefabUtility.SavePrefabAsset(asset.transform.root.gameObject);
-
- return string.Empty;
- }
-
- return "Unable to modify an immutable prefab";
- }
-
- public static void UpgradeScene(string path, Action<GameObject> objectUpgrader)
- {
- Scene scene = new Scene();
- bool openedByUser = false;
- for (int i = 0; i < SceneManager.sceneCount && !openedByUser; i++)
- {
- scene = SceneManager.GetSceneAt(i);
- if (path == scene.path)
- openedByUser = true;
- }
-
- if (!openedByUser)
- scene = EditorSceneManager.OpenScene(path, OpenSceneMode.Additive);
-
- GameObject[] gameObjects = scene.GetRootGameObjects();
- foreach (GameObject go in gameObjects)
- objectUpgrader(go);
-
- EditorSceneManager.SaveScene(scene);
- if (!openedByUser)
- EditorSceneManager.CloseScene(scene, true);
- }
-
- public static void UpgradeMaterial(string path, Shader oldShader, Shader newShader)
- {
- Material material = AssetDatabase.LoadAssetAtPath<Material>(path);
- if (material.shader == oldShader)
- material.shader = newShader;
-
- GUID guid = AssetDatabase.GUIDFromAssetPath(path);
- AssetDatabase.SaveAssetIfDirty(guid);
- }
-
- public static string GetObjectIDString(UnityEngine.Object obj)
- {
- string guid;
- long localId;
- if (AssetDatabase.TryGetGUIDAndLocalFileIdentifier(obj.GetInstanceID(), out guid, out localId))
- return "fileID: " + localId + ", guid: " + guid;
-
- return null;
- }
- }
|