Inheritance: MonoBehaviour
Beispiel #1
0
    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();
        }
    }
Beispiel #2
0
    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;
            }
        }
    }
Beispiel #3
0
    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
        }
    }
Beispiel #4
0
 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();
        }
    }
Beispiel #6
0
    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> ();
        }
    }
Beispiel #7
0
    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> ();
        }
    }
Beispiel #8
0
    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;
 }
Beispiel #11
0
 void OnEnable()
 {
     skin = (Skin2D)target;
 }
 void OnEnable()
 {
     skin = (Skin2D)target;
 }