Unity编辑器扩展

Posted Hichy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity编辑器扩展相关的知识,希望对你有一定的参考价值。

四类
1.  ScriptableObject   只有菜单
2.  ScriptableWizard  向导对话框 简单的输入 响应一下确认按钮
3.  EditorWindow       编辑对话框
4.  Editor                     


绘制ui函数的各种空间
GUI
GUILayout
EditorGUI             Editor下专用的各种控件,动画曲线什么的
EditorGUILayout

ScriptableWizard  
    OnWizardUpdate()
    OnWizardCreate()
    ScriptableWizard.DisplayWizard("Title", typeof(ClassName), "BtnName");
    

EditorWindow    OnInspectorUpdate每帧检查   需要的时候调用 Repaint()
                            OnGUI() 在需要的时候调用

Editor 可以用来自定义某个组件的Inspector编辑界面
               [CustomEditor(typeof(XXX))]
               public class XXXInspector : Editor {
            也可以用来做一些复杂的界面

用一个静态方法打开
    [MenuItem("KingsoftTools/Skill/伤害组件监视")]
    static void Init()
    {
        EditorWindow.GetWindow(typeof(BuffInspector));
    }


 
        Texture2D dataImg = new Texture2D(256, 256);
        绘图。。。 。。。
        一个点一个点设置颜色...
        dataImg.Apply();  //必须调用 apply函数才会改变Texture2D 

EditorPrefs

这个类可以存一些用户的编辑器设置
 m_propertiesNames = EditorPrefs.GetString(string.Format("SplatProp_{0}_{1}", i, j), DefaultPropertiesNames[i, j]);

选择列表 SelectionGrid(选择的索引,列表,每行个数)
                int xCount = Mathf.FloorToInt(position.width / m_ccCellSize);
                m_customColIdx = GUILayout.SelectionGrid(m_customColIdx, m_customColorTex, xCount);
                m_useSaveColor = GUILayout.Toggle(m_useSaveColor, "Use Save Color");
                if (m_useSaveColor)
                {
                    m_colorChannel = m_customColorLst[m_customColIdx];
                }


LayerMask(选择层级,多选框式)
x
 
1
    static LayerMask LayerMaskField(string label, LayerMask layerMask)
2
    {
3
        List<string> layers = new List<string>();
4
        List<int> layerNumbers = new List<int>();
5
6
        for (int i = 0; i < 32; i++)
7
        {
8
            string layerName = LayerMask.LayerToName(i);
9
            if (layerName != "")
10
            {
11
                layers.Add(layerName);
12
                layerNumbers.Add(i);
13
            }
14
        }
15
        int maskWithoutEmpty = 0;
16
        for (int i = 0; i < layerNumbers.Count; i++)
17
        {
18
            if (((1 << layerNumbers[i]) & layerMask.value) > 0)
19
                maskWithoutEmpty |= (1 << i);
20
        }
21
        maskWithoutEmpty = EditorGUILayout.MaskField(label, maskWithoutEmpty, layers.ToArray());
22
        int mask = 0;
23
        for (int i = 0; i < layerNumbers.Count; i++)
24
        {
25
            if ((maskWithoutEmpty & (1 << i)) > 0)
26
                mask |= (1 << layerNumbers[i]);
27
        }
28
        layerMask.value = mask;
29
        return layerMask;
30
    }














以上是关于Unity编辑器扩展的主要内容,如果未能解决你的问题,请参考以下文章

unity shader 编辑器扩展类 ShaderGUI

Unity代码分享Editor编辑器扩展Image和RawImage的相互转化

Unity编辑器扩展

unity编辑器扩展一批量生成图片预制

Unity记一次Amplify Shader Editor-编辑器扩展开发Canvas框架

Unity编辑器扩展——PrefabUtility