// Magica Cloth. // Copyright (c) MagicaSoft, 2020-2022. // https://magicasoft.jp using System; using UnityEditor; using UnityEngine; namespace MagicaCloth { /// /// メニューアイテム /// public class MenuItemScript { [MenuItem("GameObject/Create Other/Magica Cloth/Magica Virtual Deformer", priority = 0)] static void AddMergeDeformer() { var obj = AddObject("Magica Virtual Deformer", true); obj.AddComponent(); Selection.activeGameObject = obj; } [MenuItem("GameObject/Create Other/Magica Cloth/Magica Bone Cloth", priority = 0)] static void AddBoneCloth() { var obj = AddObject("Magica Bone Cloth", true); obj.AddComponent(); Selection.activeGameObject = obj; } [MenuItem("GameObject/Create Other/Magica Cloth/Magica Bone Spring", priority = 0)] static void AddBoneSpring() { var obj = AddObject("Magica Bone Spring", true); obj.AddComponent(); Selection.activeGameObject = obj; } [MenuItem("GameObject/Create Other/Magica Cloth/Magica Mesh Cloth", priority = 0)] static void AddMeshCloth() { var obj = AddObject("Magica Mesh Cloth", true); obj.AddComponent(); Selection.activeGameObject = obj; } [MenuItem("GameObject/Create Other/Magica Cloth/Magica Mesh Spring", priority = 0)] static void AddMeshSpring() { var obj = AddObject("Magica Mesh Spring", true); obj.AddComponent(); Selection.activeGameObject = obj; } /*[MenuItem("GameObject/Create Other/Magica Cloth/Merge Mesh Deformer", priority = 100)] static void AddMergeMeshDeformer() { var obj = AddObject("Merge Mesh Deformer", false); obj.AddComponent(); Selection.activeGameObject = obj; }*/ [MenuItem("GameObject/Create Other/Magica Cloth/Magica Sphere Collider", priority = 200)] static void AddSphereCollider() { var obj = AddObject("Magica Sphere Collider", true, true); obj.AddComponent(); Selection.activeGameObject = obj; } [MenuItem("GameObject/Create Other/Magica Cloth/Magica Capsule Collider", priority = 200)] static void AddCapsuleCollider() { var obj = AddObject("Magica Capsule Collider", true, true); obj.AddComponent(); Selection.activeGameObject = obj; } [MenuItem("GameObject/Create Other/Magica Cloth/Magica Plane Collider", priority = 200)] static void AddPlaneCollider() { var obj = AddObject("Magica Plane Collider", true, true); obj.AddComponent(); Selection.activeGameObject = obj; } [MenuItem("GameObject/Create Other/Magica Cloth/Magica Directional Wind", priority = 200)] static void AddDirectionalWind() { var obj = AddObject("Magica Directional Wind", true); obj.AddComponent(); Selection.activeGameObject = obj; } [MenuItem("GameObject/Create Other/Magica Cloth/Magica Area Wind", priority = 200)] static void AddAreaWind() { var obj = AddObject("Magica Area Wind", true); obj.AddComponent(); Selection.activeGameObject = obj; } //========================================================================================= /// /// ヒエラルキーにオブジェクトを1つ追加する /// /// /// static GameObject AddObject(string objName, bool addParentName, bool autoScale = false) { var parent = Selection.activeGameObject; GameObject obj = new GameObject(addParentName && parent ? objName + " (" + parent.name + ")" : objName); if (parent) { obj.transform.parent = parent.transform; } obj.transform.localPosition = Vector3.zero; obj.transform.localRotation = Quaternion.identity; if (autoScale && parent) { var scl = parent.transform.lossyScale; obj.transform.localScale = new Vector3(1.0f / scl.x, 1.0f / scl.y, 1.0f / scl.z); } else obj.transform.localScale = Vector3.one; return obj; } //========================================================================================= [MenuItem("Assets/Magica Cloth/Clean up sub-assets", priority = 201)] static void CleanUpSubAssets() { try { Debug.Log("Clean up MagicaCloth sub-asssets."); if (Selection.activeGameObject == null) throw new Exception("No Object"); var obj = Selection.activeGameObject; //Debug.Log(obj.name); // プレハブ判定 if (PrefabUtility.IsPartOfAnyPrefab(obj) == false || PrefabUtility.IsPartOfPrefabAsset(obj) == false) throw new Exception("No Prefab"); // クリーンアップ ShareDataPrefabExtension.CleanUpSubAssets(obj); Debug.Log("Complete."); } catch { Debug.LogWarning("Run it against the Prefab in the Project window."); } } } }