public override void OnInspectorGUI() { Skin2D skin = (Skin2D)target; DrawDefaultInspector(); EditorGUILayout.Separator(); /* Moved to skeleton for multiple Skin2D * if (skin.selectedBones != null && skin.GetComponent<MeshFilter>().sharedMesh != null && GUILayout.Button("Calculate weights")) { * skin.CalculateBoneWeights(); * }*/ if (skin.GetComponent <SkinnedMeshRenderer>().sharedMesh != null && GUILayout.Button("Save as Prefab")) { skin.SaveAsPrefab(); } if (skin.GetComponent <SkinnedMeshRenderer>().sharedMesh != null && GUILayout.Button("Recalculate Bone Weights")) { skin.RecalculateBoneWeights(); } if (skin.GetComponent <SkinnedMeshRenderer>().sharedMesh != null && GUILayout.Button("Create Control Points")) { ControlPoint.CreateControlPoints(skin.GetComponent <SkinnedMeshRenderer>()); } if (skin.GetComponent <SkinnedMeshRenderer>().sharedMesh != null && GUILayout.Button("Reset Control Points")) { skin.ResetControlPointPositions(); } }
public static void CreateControlPoints(SkinnedMeshRenderer skin) { if (skin.sharedMesh != null) { Skin2D skin2D = skin.GetComponent <Skin2D>(); if (skin2D != null) { skin2D.controlPoints = new ControlPoints.Point[skin.sharedMesh.vertices.Length]; if (skin2D.points == null) { skin2D.points = skin2D.gameObject.AddComponent <ControlPoints>(); } } for (int i = 0; i < skin.sharedMesh.vertices.Length; i++) { Vector3 originalPos = skin.sharedMesh.vertices[i]; if (skin2D != null) { skin2D.controlPoints[i] = new ControlPoints.Point(originalPos); skin2D.controlPoints[i].index = i; skin2D.points.SetPoint(skin2D.controlPoints[i]); } GameObject b = new GameObject(skin.name + " Control Point"); // Unparent the skin temporarily before adding the control point Transform skinParent = skin.transform.parent; skin.transform.parent = null; // Reset the rotation before creating the mesh so the UV's will align properly Quaternion localRotation = skin.transform.localRotation; skin.transform.localRotation = Quaternion.identity; b.transform.position = new Vector3(skin.transform.position.x + (skin.sharedMesh.vertices[i].x * skin.transform.localScale.x), skin.transform.position.y + (skin.sharedMesh.vertices[i].y * skin.transform.localScale.y), skin.transform.position.z + (skin.sharedMesh.vertices[i].z * skin.transform.localScale.z)); b.transform.parent = skin.transform; ControlPoint[] points = b.transform.parent.transform.GetComponentsInChildren <ControlPoint>(); if (points != null && points.Length > 0) { b.gameObject.name = b.gameObject.name + points.Length; } Undo.RegisterCreatedObjectUndo(b, "Add control point"); ControlPoint controlPoint = b.AddComponent <ControlPoint>(); controlPoint.index = i; controlPoint.skin = skin; controlPoint.originalPosition = b.transform.localPosition; // Reset the rotations of the object skin.transform.localRotation = localRotation; skin.transform.parent = skinParent; } } }
public override void OnInspectorGUI() { Skin2D skin = (Skin2D)target; DrawDefaultInspector(); 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(); if (skin.GetComponent <SkinnedMeshRenderer>().sharedMesh != null && GUILayout.Button("Create Control Points")) { ControlPoint.CreateControlPoints(skin.GetComponent <SkinnedMeshRenderer>()); } if (skin.GetComponent <SkinnedMeshRenderer>().sharedMesh != null && GUILayout.Button("Reset Control Points")) { skin.ResetControlPointPositions(); } EditorGUILayout.Separator(); if (skin.GetComponent <SkinnedMeshRenderer>().sharedMesh != null && GUILayout.Button("Generate Mesh Asset")) { #if UNITY_EDITOR ScriptableObjectUtility.CreateAsset(skin.GetComponent <SkinnedMeshRenderer>().sharedMesh); #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; AssetDatabase.CreateAsset(material, "Assets/" + material.mainTexture.name + ".mat"); #endif } }
public static void Create() { if (Selection.activeGameObject != null) { GameObject o = Selection.activeGameObject; SkinnedMeshRenderer skin = o.GetComponent <SkinnedMeshRenderer>(); SpriteRenderer spriteRenderer = o.GetComponent <SpriteRenderer>(); if (skin == null && spriteRenderer != null) { Sprite thisSprite = spriteRenderer.sprite; SpriteMesh spriteMesh = new SpriteMesh(); spriteMesh.spriteRenderer = spriteRenderer; spriteMesh.CreateSpriteMesh(); Texture2D spriteTexture = UnityEditor.Sprites.SpriteUtility.GetSpriteTexture(spriteRenderer.sprite, false); Material spriteMaterial = new Material(spriteRenderer.sharedMaterial); spriteMaterial.CopyPropertiesFromMaterial(spriteRenderer.sharedMaterial); spriteMaterial.mainTexture = spriteTexture; string sortLayerName = spriteRenderer.sortingLayerName; int sortOrder = spriteRenderer.sortingOrder; DestroyImmediate(spriteRenderer); Skin2D skin2D = o.AddComponent <Skin2D>(); skin2D.sprite = thisSprite; skin = o.GetComponent <SkinnedMeshRenderer>(); MeshFilter filter = o.GetComponent <MeshFilter>(); skin.material = spriteMaterial; skin.sortingLayerName = sortLayerName; skin.sortingOrder = sortOrder; filter.mesh = (Mesh)Selection.activeObject; if (filter.sharedMesh != null && skin.sharedMesh == null) { skin.sharedMesh = filter.sharedMesh; } // Recalculate the bone weights for the new mesh skin2D.RecalculateBoneWeights(); } else { o = new GameObject("Skin2D"); Undo.RegisterCreatedObjectUndo(o, "Create Skin2D"); o.AddComponent <Skin2D> (); } } else { GameObject o = new GameObject("Skin2D"); Undo.RegisterCreatedObjectUndo(o, "Create Skin2D"); o.AddComponent <Skin2D> (); } }
public override void OnInspectorGUI() { Skin2D skin = (Skin2D)target; DrawDefaultInspector(); EditorGUILayout.Separator(); if (skin.skeleton != null && skin.GetComponent <MeshFilter>().sharedMesh != null && GUILayout.Button("Calculate weights")) { skin.CalculateBoneWeights(); } if (skin.GetComponent <SkinnedMeshRenderer>().sharedMesh != null && GUILayout.Button("Save as Prefab")) { skin.SaveAsPrefab(); } }
public static void Create() { if (Selection.activeGameObject != null) { GameObject o = Selection.activeGameObject; SkinnedMeshRenderer skin = o.GetComponent <SkinnedMeshRenderer>(); SpriteRenderer spriteRenderer = o.GetComponent <SpriteRenderer>(); if (skin == null && spriteRenderer != null) { Sprite thisSprite = spriteRenderer.sprite; SpriteMesh.CreateSpriteMeshAsset(spriteRenderer.transform, thisSprite); Texture2D spriteTexture = UnityEditor.Sprites.SpriteUtility.GetSpriteTexture(spriteRenderer.sprite, false); Material spriteMaterial = new Material(spriteRenderer.sharedMaterial); spriteMaterial.CopyPropertiesFromMaterial(spriteRenderer.sharedMaterial); spriteMaterial.mainTexture = spriteTexture; DestroyImmediate(spriteRenderer); Skin2D skin2D = o.AddComponent <Skin2D>(); skin2D.sprite = thisSprite; skin = o.GetComponent <SkinnedMeshRenderer>(); MeshFilter filter = o.GetComponent <MeshFilter>(); skin.material = spriteMaterial; filter.mesh = (Mesh)Selection.activeObject; if (filter.sharedMesh != null && skin.sharedMesh == null) { skin.sharedMesh = filter.sharedMesh; } Skeleton skeleton = o.transform.root.GetComponent <Skeleton>(); if (skeleton != null) { // Generate the mesh and calculate the weights if the root transform has a skeleton skeleton.CalculateWeights(true); // Debug.Log("Calculated weights for " + o.name); // Try to initialize the parent bone to this skin Bone bone = o.transform.parent.GetComponent <Bone>(); if (bone != null) { Mesh m = skin.sharedMesh.Clone(); List <BoneWeight> weights = m.boneWeights.ToList(); for (int i = 0; i < m.vertices.Length; i++) { BoneWeight bw = weights[i]; bw = bw.SetWeight(bone.index, 1); weights[i] = bw.Clone(); } skin.sharedMesh.boneWeights = weights.ToArray(); EditorUtility.SetDirty(skin.gameObject); if (PrefabUtility.GetPrefabType(skin.gameObject) != PrefabType.None) { AssetDatabase.SaveAssets(); } } } } else { o = new GameObject("Skin2D"); Undo.RegisterCreatedObjectUndo(o, "Create Skin2D"); o.AddComponent <Skin2D> (); } } else { GameObject o = new GameObject("Skin2D"); Undo.RegisterCreatedObjectUndo(o, "Create Skin2D"); o.AddComponent <Skin2D> (); } }
public static void Create() { if (Selection.activeGameObject != null) { GameObject o = Selection.activeGameObject; SkinnedMeshRenderer skin = o.GetComponent <SkinnedMeshRenderer>(); SpriteRenderer spriteRenderer = o.GetComponent <SpriteRenderer>(); if (skin == null && spriteRenderer != null) { Sprite thisSprite = spriteRenderer.sprite; SpriteMesh spriteMesh = new SpriteMesh(); spriteMesh.spriteRenderer = spriteRenderer; spriteMesh.CreateSpriteMesh(); Texture2D spriteTexture = UnityEditor.Sprites.SpriteUtility.GetSpriteTexture(spriteRenderer.sprite, false); // Copy the sprite material Material spriteMaterial = new Material(spriteRenderer.sharedMaterial); spriteMaterial.CopyPropertiesFromMaterial(spriteRenderer.sharedMaterial); spriteMaterial.mainTexture = spriteTexture; string sortLayerName = spriteRenderer.sortingLayerName; int sortOrder = spriteRenderer.sortingOrder; DestroyImmediate(spriteRenderer); Skin2D skin2D = o.AddComponent <Skin2D>(); skin2D.sprite = thisSprite; skin = o.GetComponent <SkinnedMeshRenderer>(); MeshFilter filter = o.GetComponent <MeshFilter>(); skin.material = spriteMaterial; // Save out the material from the sprite so we have a default material if (!Directory.Exists("Assets/Materials")) { AssetDatabase.CreateFolder("Assets", "Materials"); AssetDatabase.Refresh(); } AssetDatabase.CreateAsset(spriteMaterial, "Assets/Materials/" + spriteMaterial.mainTexture.name + ".mat"); Debug.Log("Created material " + spriteMaterial.mainTexture.name + " for " + skin.gameObject.name); skin2D.referenceMaterial = spriteMaterial; skin.sortingLayerName = sortLayerName; skin.sortingOrder = sortOrder; // Create the mesh from the selection filter.mesh = (Mesh)Selection.activeObject; if (filter.sharedMesh != null && skin.sharedMesh == null) { skin.sharedMesh = filter.sharedMesh; } // Recalculate the bone weights for the new mesh skin2D.RecalculateBoneWeights(); } else { o = new GameObject("Skin2D"); Undo.RegisterCreatedObjectUndo(o, "Create Skin2D"); o.AddComponent <Skin2D> (); } } else { GameObject o = new GameObject("Skin2D"); Undo.RegisterCreatedObjectUndo(o, "Create Skin2D"); o.AddComponent <Skin2D> (); } }
public override void OnInspectorGUI() { Skin2D skin = (Skin2D)target; DrawDefaultInspector(); 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(); if (skin.GetComponent <SkinnedMeshRenderer>().sharedMesh != null && GUILayout.Button("Create Control Points")) { ControlPoint.CreateControlPoints(skin.GetComponent <SkinnedMeshRenderer>()); } if (skin.GetComponent <SkinnedMeshRenderer>().sharedMesh != null && GUILayout.Button("Reset Control Points")) { skin.ResetControlPointPositions(); } 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(); } ScriptableObjectUtility.CreateAsset(skin.GetComponent <SkinnedMeshRenderer>().sharedMesh, "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 } }
void OnEnable() { skin = (Skin2D)target; skinnedMeshRenderer = skin.GetComponent <SkinnedMeshRenderer>(); skinnedMesh = skinnedMeshRenderer.sharedMesh; }
void OnEnable() { skin = (Skin2D)target; skinnedMeshRenderer = skin.GetComponent<SkinnedMeshRenderer>(); skinnedMesh = skinnedMeshRenderer.sharedMesh; }
void OnEnable() { skin = (Skin2D)target; }
void OnEnable() { skin = (Skin2D)target; }