/// <summary> /// Creates an instance from an existing project prefab or creates /// a new game object. Accessible trough this.PrefabInstance. /// </summary> /// <returns>this.PrefabInstance</returns> public GameObject CreateInstance() { GetOrCreateDataDirectory(); if (ExistingPrefab != null) { PrefabInstance = GameObject.Instantiate <GameObject>(ExistingPrefab); } else { PrefabInstance = new GameObject(Name); } ObjectDb = new ObjectDb(this); return(PrefabInstance); }
public static GameObject Import(string file) { GameObject prefab = null; bool renameRoots = false; var dataDirectory = string.Empty; try { int iteration = 0; while (++iteration < 4) { var fileInfo = new AGXFileInfo(file); using (var inputFile = new InputAGXFile(fileInfo)) { inputFile.TryLoad(); inputFile.TryParse(); var statistics = inputFile.TryGenerate(); renameRoots = renameRoots || (iteration == 1 && statistics.RootsAddedToExistingAssets); prefab = inputFile.TryCreatePrefab(); dataDirectory = fileInfo.DataDirectory; if (!statistics.HasAddedOrRemoved) { break; } } } } catch (System.Exception e) { Debug.LogException(e); return(null); } PropagateChanges(prefab); if (prefab != null && renameRoots && !string.IsNullOrEmpty(dataDirectory)) { Debug.Log($"{prefab.name.Color( Color.green )}: Updating main assets and names in " + dataDirectory.Color(Color.gray) + "."); var roots = Utils.FindAssetsOfType <AGXUnity.IO.RestoredAssetsRoot>(dataDirectory); foreach (var root in roots) { var assets = ObjectDb.GetAssets(dataDirectory, root.Type); var mainAsset = System.Array.Find(assets, asset => AssetDatabase.IsMainAsset(asset)); if (mainAsset == null) { continue; } else if (!(mainAsset is AGXUnity.IO.RestoredAssetsRoot)) { AssetDatabase.SetMainObject(root, AssetDatabase.GetAssetPath(mainAsset)); mainAsset = root; } AssetDatabase.RenameAsset(AssetDatabase.GetAssetPath(root), AGXUnity.IO.RestoredAssetsRoot.FindName(prefab.name, root.Type)); } AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); } return(prefab); }