public override void OnInspectorGUI() { DrawDefaultInspector(); EditorGUILayout.Separator(); if (GUILayout.Button("Toggle Mesh Outline")) { Skin2D.showMeshOutline = !Skin2D.showMeshOutline; } EditorGUILayout.Separator(); if (skin.GetComponent <SkinnedMeshRenderer>().sharedMesh != null && GUILayout.Button("Save as Prefab")) { skin.SaveAsPrefab(); } EditorGUILayout.Separator(); if (skin.GetComponent <SkinnedMeshRenderer>().sharedMesh != null && GUILayout.Button("Recalculate Bone Weights")) { skin.RecalculateBoneWeights(); } EditorGUILayout.Separator(); handleColor = EditorGUILayout.ColorField("Handle Color", handleColor); changedBaseSelectDistance = EditorGUILayout.Slider("Handle Size", baseSelectDistance, 0, 1); if (baseSelectDistance != changedBaseSelectDistance) { baseSelectDistance = changedBaseSelectDistance; EditorUtility.SetDirty(this); SceneView.RepaintAll(); } if (skin.GetComponent <SkinnedMeshRenderer>().sharedMesh != null && GUILayout.Button("Create Control Points")) { skin.CreateControlPoints(skin.GetComponent <SkinnedMeshRenderer>()); } if (skin.GetComponent <SkinnedMeshRenderer>().sharedMesh != null && GUILayout.Button("Reset Control Points")) { skin.ResetControlPointPositions(); } if (skin.points != null && skin.controlPoints != null && skin.controlPoints.Length > 0 && selectedIndex != -1 && GUILayout.Button("Reset Selected Control Point")) { skin.controlPoints[selectedIndex].ResetPosition(); skin.points.SetPoint(skin.controlPoints[selectedIndex]); } if (GUILayout.Button("Remove Control Points")) { skin.RemoveControlPoints(); } EditorGUILayout.Separator(); if (skin.GetComponent <SkinnedMeshRenderer>().sharedMesh != null && GUILayout.Button("Generate Mesh Asset")) { #if UNITY_EDITOR // Check if the Meshes directory exists, if not, create it. if (!Directory.Exists("Assets/Meshes")) { AssetDatabase.CreateFolder("Assets", "Meshes"); AssetDatabase.Refresh(); } Mesh mesh = new Mesh(); mesh.name = skin.GetComponent <SkinnedMeshRenderer>().sharedMesh.name.Replace(".SkinnedMesh", ".Mesh");; mesh.vertices = skin.GetComponent <SkinnedMeshRenderer>().sharedMesh.vertices; mesh.triangles = skin.GetComponent <SkinnedMeshRenderer>().sharedMesh.triangles; mesh.normals = skin.GetComponent <SkinnedMeshRenderer>().sharedMesh.normals; mesh.uv = skin.GetComponent <SkinnedMeshRenderer>().sharedMesh.uv; mesh.uv2 = skin.GetComponent <SkinnedMeshRenderer>().sharedMesh.uv2; mesh.bounds = skin.GetComponent <SkinnedMeshRenderer>().sharedMesh.bounds; ScriptableObjectUtility.CreateAsset(mesh, "Meshes/" + skin.gameObject.name + ".Mesh"); #endif } if (skin.GetComponent <SkinnedMeshRenderer>().sharedMaterial != null && GUILayout.Button("Generate Material Asset")) { #if UNITY_EDITOR Material material = new Material(skin.GetComponent <SkinnedMeshRenderer>().sharedMaterial); material.CopyPropertiesFromMaterial(skin.GetComponent <SkinnedMeshRenderer>().sharedMaterial); skin.GetComponent <SkinnedMeshRenderer>().sharedMaterial = material; if (!Directory.Exists("Assets/Materials")) { AssetDatabase.CreateFolder("Assets", "Materials"); AssetDatabase.Refresh(); } AssetDatabase.CreateAsset(material, "Assets/Materials/" + material.mainTexture.name + ".mat"); Debug.Log("Created material " + material.mainTexture.name + " for " + skin.gameObject.name); #endif } }