private static void SaveDependencies(GetDepsFromContext context, ITypeMap typeMap, IAssetDB assetDB, string path) { object[] dependencies = context.Dependencies.ToArray(); foreach (UnityObject dep in dependencies) { Type persistentType = typeMap.ToPersistentType(dep.GetType()); if (persistentType != null) { context.Dependencies.Clear(); IPersistentSurrogate persistentObject = (IPersistentSurrogate)Activator.CreateInstance(persistentType); persistentObject.GetDepsFrom(dep, context); SaveDependencies(context, typeMap, assetDB, path); } } foreach (UnityObject dep in dependencies) { if (dep is Component || dep is GameObject || !assetDB.IsDynamicResourceID(assetDB.ToID(dep))) { continue; } string name = dep.name; if (string.IsNullOrWhiteSpace(name)) { name = dep.GetType().Name; } string uniqueAssetPath = AssetDatabase.GenerateUniqueAssetPath(string.Format("{0}/{1}.asset", path, name)); AssetDatabase.CreateAsset(dep, uniqueAssetPath); } }
protected void AddSurrogateDeps <T>(T obj, Func <T, IPersistentSurrogate> convert, GetDepsFromContext context) { if (obj != null) { IPersistentSurrogate surrogate = convert(obj); surrogate.GetDepsFrom(obj, context); } }
protected void AddSurrogateDeps <T, V, T1, V1>(Dictionary <T, V> dict, Func <T, T1> convertKey, Func <V, V1> convertValue, GetDepsFromContext context) { if (dict == null) { return; } foreach (KeyValuePair <T, V> kvp in dict) { T obj = kvp.Key; IPersistentSurrogate surrogate = convertKey(obj) as IPersistentSurrogate; if (surrogate != null) { surrogate.GetDepsFrom(obj, context); } surrogate = convertValue(kvp.Value) as IPersistentSurrogate; if (surrogate != null) { surrogate.GetDepsFrom(obj, context); } } }
protected void AddSurrogateDeps <T>(HashSet <T> objHs, Func <T, IPersistentSurrogate> convert, GetDepsFromContext context) { if (objHs == null) { return; } foreach (T obj in objHs) { if (obj != null) { IPersistentSurrogate surrogate = convert(obj); surrogate.GetDepsFrom(obj, context); } } }
protected void AddSurrogateDeps <T>(List <T> objList, Func <T, IPersistentSurrogate> convert, GetDepsFromContext context) { if (objList == null) { return; } for (int i = 0; i < objList.Count; ++i) { T obj = objList[i]; if (obj != null) { IPersistentSurrogate surrogate = convert(obj); surrogate.GetDepsFrom(obj, context); } } }
protected void AddSurrogateDeps <T>(T[] objArray, Func <T, IPersistentSurrogate> convert, GetDepsFromContext context) { if (objArray == null) { return; } for (int i = 0; i < objArray.Length; ++i) { T obj = objArray[i]; if (obj != null) { IPersistentSurrogate surrogate = convert(obj); surrogate.GetDepsFrom(obj, context); } } }
private static void CreateAssetLibraryForScene(Scene scene, int index, AssetLibraryAsset asset, AssetFolderInfo folder, HashSet <UnityObject> hs) { TypeMap <long> typeMap = new TypeMap <long>(); AssetDB assetDB = new AssetDB(); RuntimeShaderUtil shaderUtil = new RuntimeShaderUtil(); IOC.Register <ITypeMap>(typeMap); IOC.Register <IAssetDB>(assetDB); IOC.Register <IAssetDB <long> >(assetDB); IOC.Register <IRuntimeShaderUtil>(shaderUtil); PersistentRuntimeScene <long> rtScene = new PersistentRuntimeScene <long>(); GetDepsFromContext ctx = new GetDepsFromContext(); rtScene.GetDepsFrom(scene, ctx); Queue <UnityObject> depsQueue = new Queue <UnityObject>(ctx.Dependencies.OfType <UnityObject>()); GetDepsFromContext getDepsCtx = new GetDepsFromContext(); while (depsQueue.Count > 0) { UnityObject uo = depsQueue.Dequeue(); if (!uo) { continue; } Type persistentType = typeMap.ToPersistentType(uo.GetType()); if (persistentType != null) { getDepsCtx.Clear(); try { IPersistentSurrogate persistentObject = (IPersistentSurrogate)Activator.CreateInstance(persistentType); persistentObject.GetDepsFrom(uo, getDepsCtx); } catch (Exception e) { Debug.LogError(e); } foreach (UnityObject dep in getDepsCtx.Dependencies) { if (!ctx.Dependencies.Contains(dep)) { ctx.Dependencies.Add(dep); depsQueue.Enqueue(dep); } } } } IOC.Unregister <IRuntimeShaderUtil>(shaderUtil); IOC.Unregister <ITypeMap>(typeMap); IOC.Unregister <IAssetDB>(assetDB); IOC.Unregister <IAssetDB <long> >(assetDB); CreateAssetLibrary(ctx.Dependencies.ToArray(), "Scenes/" + scene.name, "SceneAssetLibrary", index, asset, folder, hs); }