public override void OnInspectorGUI()
    {
        UFTSelectTextureFromAtlas targetObj = (UFTSelectTextureFromAtlas)target;

        targetObj.atlasMetadata = (UFTAtlasMetadata)EditorGUILayout.ObjectField(targetObj.atlasMetadata, typeof(UFTAtlasMetadata), false);

        if (targetObj.atlasMetadata != null)
        {
            int newValue = EditorGUILayout.IntSlider(targetObj.textureIndex, 0, targetObj.atlasMetadata.entries.Length - 1);
            if (newValue != targetObj.textureIndex)
            {
                targetObj.textureIndex = newValue;
                if (atlasEntryMetadata != null)
                {
                    serializedObject.Update();
                }
            }
        }

        GUI.enabled = false;
        if (atlasEntryMetadata != null)
        {
            EditorGUILayout.PropertyField(atlasEntryMetadata, true);
        }
        GUI.enabled = true;


        if (!targetObj.isUV2Empty())
        {
            if (GUILayout.Button("restore original uv"))
            {
                targetObj.restoreOriginalUVS();
            }
        }

        //debug
        debug = EditorGUILayout.Toggle("UV Debug mode", debug);

        if (debug)
        {
            EditorGUILayout.LabelField("==========================================");
            EditorGUILayout.LabelField("uv (actual uv):");
            Vector2[] uv = UFTMeshUtil.getObjectMesh(targetObj.gameObject).uv;
            foreach (Vector2 v in uv)
            {
                EditorGUILayout.Vector2Field("", v);
            }

            EditorGUILayout.LabelField("==========================================");
            EditorGUILayout.LabelField("uv2 (original uv):");
            Vector2[] uv2 = UFTMeshUtil.getObjectMesh(targetObj.gameObject).uv2;
            foreach (Vector2 v in uv2)
            {
                EditorGUILayout.Vector2Field("", v);
            }
        }
    }
    void OnWizardCreate()
    {
        GameObject go = UFTMeshUtil.createPlane(width, height);

        go.AddComponent <UFTSelectTextureFromAtlas>().atlasMetadata = atlasMetadata;
        go.renderer.material = material;

        AssetDatabase.CreateAsset(go.GetComponent <MeshFilter>().sharedMesh, AssetDatabase.GenerateUniqueAssetPath("Assets/" + meshName + ".asset"));
        AssetDatabase.SaveAssets();
    }
    public void restoreOriginalUVS()
    {
        Mesh mesh = UFTMeshUtil.getObjectMesh(gameObject);

        if (isUV2Empty())
        {
            throw new System.Exception("mesh.uv2 of your object is wrong, can't restore original values");
        }

        mesh.uv = (Vector2[])mesh.uv2.Clone();
    }
    public void storeOriginalUV()
    {
        Mesh mesh = UFTMeshUtil.getObjectMesh(gameObject);

        if (isUV2Empty())
        {
            mesh.uv2 = (Vector2[])mesh.uv.Clone();
        }
        else
        {
            mesh.uv = (Vector2[])mesh.uv2.Clone();
        }
    }
Ejemplo n.º 5
0
    /// <summary>
    /// Updates mesh uv, we will take original mesh.uv from uv2 coordinates and then multiply to atlas position
    /// </summary>
    public void updateUV()
    {
        Rect rect = atlasMetadata.entries[textureIndex].uvRect;
        Mesh mesh = UFTMeshUtil.getObjectMesh(gameObject);

        Vector2[] uvs = new Vector2[mesh.uv2.Length];
        for (int i = 0; i < uvs.Length; i++)
        {
            uvs[i].x = mesh.uv2[i].x * rect.width + rect.x;
            uvs[i].y = mesh.uv2[i].y * rect.height + rect.y;
        }
        mesh.uv = uvs;
    }
Ejemplo n.º 6
0
    public override void OnInspectorGUI()
    {
        UFTSelectTextureFromAtlas script = ((UFTSelectTextureFromAtlas)target);

        if (script.atlasMetadata != null)
        {
            EditorGUILayout.IntSlider(textureIndex, 0, script.atlasMetadata.entries.Length - 1);
        }

        EditorGUILayout.PropertyField(atlasMetadata);
        serializedObject.ApplyModifiedProperties();

        if (GUI.changed)
        {
            ((UFTSelectTextureFromAtlas)target).updateUV();
        }

        if (!script.isUV2Empty())
        {
            if (GUILayout.Button("restore original uv"))
            {
                script.restoreOriginalUVS();
            }
        }

        //debug
        debug = EditorGUILayout.Toggle("UV Debug mode", debug);

        if (debug)
        {
            EditorGUILayout.LabelField("==========================================");
            EditorGUILayout.LabelField("uv (actual uv):");
            Vector2[] uv = UFTMeshUtil.getObjectMesh(script.gameObject).uv;
            foreach (Vector2 v in uv)
            {
                EditorGUILayout.Vector2Field("", v);
            }

            EditorGUILayout.LabelField("==========================================");
            EditorGUILayout.LabelField("uv2 (original uv):");
            Vector2[] uv2 = UFTMeshUtil.getObjectMesh(script.gameObject).uv2;
            foreach (Vector2 v in uv2)
            {
                EditorGUILayout.Vector2Field("", v);
            }
        }
    }
    IEnumerator  GeneratePlanes()
    {
        int i = 0;

        foreach (UFTAtlasEntryMetadata entryMeta in metadata.entries)
        {
            //GameObject gameObject=new GameObject();
            GameObject gameObject = UFTMeshUtil.createPlane(entryMeta.pixelRect.width, entryMeta.pixelRect.height);

            gameObject.renderer.material = material;
            gameObject.AddComponent <PlaneController>();
            UFTSelectTextureFromAtlas textAtlasScript = gameObject.AddComponent <UFTSelectTextureFromAtlas>();
            textAtlasScript.atlasMetadata = metadata;
            textAtlasScript.textureIndex  = i++;
            textAtlasScript.updateUV();
            yield return(new WaitForSeconds(newObjectTimeout));
        }
    }
    public bool isUV2Empty()
    {
        Mesh mesh = UFTMeshUtil.getObjectMesh(gameObject);

        return(mesh.uv2.Length == 0 || mesh.uv2 == null);
    }