Unity菜单编程-自定义的图片Inspector面板

家住魔仙堡 提交于 2019-12-03 16:06:38

本类以.png图片的inspector面板为例,实现一个图片自定义的Inspector面板,Inspector面板可以直接针对当前选中对象做一个操作。

下面的mytestInspector类是用于将当前选中的.png图片自动转为Sprite类型,但是我有一点不太清楚TextureImporter类在修改textureType的时候,如果没有跟着指定textureFormat图片格式的,就会出现白图片。重新指定一下图片格式就OK了

用到的方法:
  • OnEnable() 激活时调用,
  • OnInspectorGUI GUI刷新类似于mono的OnGUI(),所用的面板组件也和OnGUI差不多

不过学习写的过程中发现几个问题:
- 其中,myclass类可以是一个普通类,用来保存或响应Inspector菜单类中的设置或操作
- 继承于Editor的TextureImporter 菜单类不一定非放在Editor目录下
- 同类型的Inspector面板,比如同时有两TextureImporter类,个同时只会有一个生效,并且Editor目录下的那个菜单类优先生效

如图是编译完 图片属性面板的效果:

这里写图片描述

最后,附上源码:


using System;
using UnityEditor;
using UnityEngine;


/// </remarks>
/**
这一行比较关键 指明是图片导入菜单
**/
[CustomEditor(typeof(TextureImporter))]
public class mytestInspector : Editor
{
    //inspector激活时调用,选中图片时也会会调用
    public void OnEnable()
    {
        Type type = Type.GetType("UnityEditor.TextureImporterInspector, UnityEditor");

        //选中图时 修改图片属性啊
        TextureImporter import = (TextureImporter)target;
        if (import.textureType != TextureImporterType.Sprite)
        {
            import.textureType = TextureImporterType.Sprite;
            import.mipmapEnabled = false;
            import.textureFormat = TextureImporterFormat.RGBA32;
            import.filterMode = FilterMode.Bilinear;
            import.SaveAndReimport();
            import.textureFormat = TextureImporterFormat.AutomaticCompressed;
            Debug.Log(Time.time + " focuse on cur image forse set Image as Sprite type!");
        }
    }

    //inspector GUI
    public override void OnInspectorGUI()
    {
        string assetPath = ((TextureImporter)target).assetPath;
        //if (assetPath.EndsWith(".png"))
        {
            GUIContent testStr1 = new GUIContent("input testStr", "teststr to myclass");
            myClass.testStr = EditorGUILayout.TextField(testStr1, myClass.testStr);

            if (GUILayout.Button("test Button"))
            {
                myClass.testClick(assetPath);
            }
        }
    }
}

public class myClass
{
    public static string testStr = "";

    public static void testClick(string assetPath)
    {
        //TODO
    }
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!