static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) { // happened when change, also fit certain prefab string. foreach (string str in importedAssets) { Regex prefabSuffix = new Regex(".prefab$"); // '$' match end position var data = RawData.Load(AssetDatabase.LoadAssetAtPath <TextAsset>("Assets/Text/Poster.json").text); Regex nameSuffix = new Regex(data.prefabName); string absolutePath = Application.dataPath + str.Replace("Assets", ""); // del repeat "Assets" path if (prefabSuffix.IsMatch(str) && nameSuffix.IsMatch(str)) // check str has ".prefab" or not { ResetTxt(absolutePath); } } }
public static void CheckPrefab() { var lastScene = UnityEngine.SceneManagement.SceneManager.GetActiveScene(); var scene = lastScene.path; var tempScene = EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Single); var prefab = PrefabUtility.InstantiatePrefab(AssetDatabase.LoadAssetAtPath <GameObject>("Assets/Prefabs/SM_Chr_Fairy_01_Root.prefab")) as GameObject; var config = RawData.Load(AssetDatabase.LoadAssetAtPath <TextAsset>("Assets/Text/Poster.json").text); Check(config, prefab); if (!string.IsNullOrEmpty(scene)) { EditorSceneManager.OpenScene(scene, OpenSceneMode.Single); } }
public static void CheckPosterPrefab() { if (!Directory.Exists(prefabPath)) { Debug.Log("No Prefabs Directory."); return; } // get config. TextAsset jsonStr = AssetDatabase.LoadAssetAtPath <TextAsset>(string.Concat(configPath, "/Poster.json")); RawData data = RawData.Load(jsonStr.text); Regex prefabSuffix = new Regex(string.Concat(data.prefabName, ".prefab$")); foreach (var name in Directory.GetFiles(prefabPath)) { if (prefabSuffix.IsMatch(name)) { Dictionary <string, string> dict = GetPrefabInfo(string.Concat(prefabPath, "/", data.prefabName, ".prefab")); } } }
//[MenuItem("Tools/Prefab Generate")] /// param: @Type, @Config {Name, Modellist} /// public static void PrefabGenerator(CharacterConfig config, string Type) { //if (Type == "Poster") TextAsset jsonStr = AssetDatabase.LoadAssetAtPath <TextAsset>("Assets/Text/Poster.json"); RawData data = RawData.Load(jsonStr.text); var root = new GameObject("Root"); //get prefab name root.name = config.GetPrefabName(config.Name, Type); foreach (RawComponent sub in data.subs) { switch (sub.Type) { case ComponentType.GameObject: if (!string.IsNullOrEmpty(sub.SourceName)) { var parent = GetOrCreateObject(root.transform, sub.Parent); var source = config.GetModelPath(sub.SourceName); // get origin model GameObject modelRef = null; // only for body if (data.Readable) { var readableSource = source.Replace(".fbx", ".readable.fbx"); if (!File.Exists(string.Concat(modelPath, "/", readableSource))) { CreateReadableModelAsset(modelPath, source, readableSource); } modelRef = AssetDatabase.LoadAssetAtPath <GameObject>(string.Concat(modelPath, "/", readableSource)); } else { modelRef = AssetDatabase.LoadAssetAtPath <GameObject>(string.Concat(modelPath, "/", source)); } GameObject model = PrefabUtility.InstantiatePrefab(modelRef) as GameObject; model.transform.SetParent(parent); foreach (Transform ob in model.transform) { if (ob.name == "Root" || ob.name == sub.Name) { continue; } ob.gameObject.SetActive(false); } model.name = sub.Name; } else { var em_parent = GetOrCreateObject(root.transform, sub.Parent); GameObject empty = new GameObject(sub.Name); empty.transform.parent = em_parent; } break; case ComponentType.BoxCollider: var ob_col = GetOrCreateObject(root.transform, sub.Parent); var col = ob_col.gameObject.AddComponent <BoxCollider>(); col.transform.localPosition = sub.Params.position; break; case ComponentType.PlayableDirector: var ob_tl = GetOrCreateObject(root.transform, sub.Parent); var tl = ob_tl.gameObject.AddComponent <PlayableDirector>(); tl.extrapolationMode = (DirectorWrapMode)sub.Params.directorWrapMode; break; } } string genPrefabFullName = string.Concat(prefabDirectory, "/", root.name, prefabExtension); Object prefabObj = PrefabUtility.SaveAsPrefabAsset(root, genPrefabFullName); GameObject.DestroyImmediate(root); }