Beispiel #1
0
    private void OnGUI()
    {
        scrollPos = EditorGUILayout.BeginScrollView(scrollPos);

        for (int i = 0; i < data.Count; i++)
        {
            EditorGUILayout.Space();

            TexArrayData item = data[i];

            EditorGUILayout.BeginHorizontal();

            EditorGUILayout.LabelField("Name");
            item.name = EditorGUILayout.TextField(item.name);

            EditorGUILayout.EndHorizontal();

            item.format = (TextureFormat)EditorGUILayout.EnumPopup("Format", item.format);

            EditorGUILayout.Space();
            EditorGUILayout.LabelField("Textures");

            for (int j = 0; j < item.textures.Count; j++)
            {
                EditorGUILayout.BeginHorizontal();

                item.textures[j] = EditorGUILayout.TextField(item.textures[j]);

                EditorGUILayout.LabelField(j.ToString());

                if (GUILayout.Button("Delete"))
                {
                    item.textures.RemoveAt(j);
                    j--;
                }

                EditorGUILayout.EndHorizontal();
            }

            EditorGUILayout.Space();

            if (GUILayout.Button("Add Texture"))
            {
                item.textures.Add(String.Empty);
            }

            if (GUILayout.Button("Delete Array"))
            {
                if (EditorUtility.DisplayDialog("Delete Texture Array", "Are you sure?", "Yes", "No"))
                {
                    data.RemoveAt(i);
                    i--;
                }
            }

            EditorGUILayout.Space();
            DrawDivider();
        }

        EditorGUILayout.Space();

        if (GUILayout.Button("New Texture Array"))
        {
            TexArrayData item = new TexArrayData();
            data.Add(item);
        }

        if (GUILayout.Button("Generate Arrays"))
        {
            BuildTextureArrays();
        }

        EditorGUILayout.EndScrollView();
    }
Beispiel #2
0
    private void BuildTextureArrays()
    {
        if (data.Count == 0)
        {
            return;
        }

        if (!AssetDatabase.IsValidFolder("Assets/Textures/Texture Arrays"))
        {
            AssetDatabase.CreateFolder("Assets/Textures", "Texture Arrays");
        }

        for (int i = 0; i < data.Count; i++)
        {
            TexArrayData item = data[i];

            int texCount = item.textures.Count;

            if (texCount == 0)
            {
                continue;
            }

            Texture2DArray texArray = new Texture2DArray(32, 32, texCount, item.format, true);
            texArray.filterMode = FilterMode.Point;
            texArray.mipMapBias = -0.3f;

            for (int t = 0; t < texCount; t++)
            {
                Texture2D tex = AssetDatabase.LoadAssetAtPath <Texture2D>("Assets/Textures/Blocks/" + item.textures[t] + ".png");

                if (tex == null)
                {
                    Debug.LogError("Failed to find texture with the name: " + item.textures[t] + ".");
                    return;
                }

                for (int mip = 0; mip < tex.mipmapCount; mip++)
                {
                    Graphics.CopyTexture(tex, 0, mip, texArray, t, mip);
                }
            }

            AssetDatabase.CreateAsset(texArray, "Assets/Textures/Texture Arrays/" + item.name + ".asset");

            Material mat = AssetDatabase.LoadAssetAtPath <Material>("Assets/Resources/Materials/" + item.name + ".mat");

            if (mat == null)
            {
                Debug.LogError("No material was found with the name: " + item.name);
            }
            else
            {
                mat.SetTexture("_TexArray", texArray);
            }

            AssetDatabase.Refresh();
        }

        Save();
        Close();
    }