Unity之EditorGUILayout-Layer、Tag
在Inspector 面板绘制 Layer, Tag
创建 LayerT.CS
脚本,创建 MLayerTEditor.CS
脚本编辑 LayerT.CS
脚本,将 MLayerTEditor.CS
放在 Editor文件夹下
LayerT.CS 脚本如下
using UnityEngine;
using System.Collections;
public class LayerT : MonoBehaviour {
public LayerMask layerMask;
public string tag;
void Update()
{
if (Input.GetKeyDown (KeyCode.A))
{
Debug.Log(GetLayerName(layerMask));
Debug.Log(tag);
}
}
public string GetLayerName(LayerMask _layerMask)
{
return LayerMask.LayerToName(_layerMask.value);
}
}
MLayerTEditor.CS 脚本如下
using UnityEngine;
using System.Collections;
using UnityEditor;
using System;
[CanEditMultipleObjects]
[CustomEditor(typeof(LayerT))]
public class MLayerTEditor : Editor {
private LayerT _layerT;
public void OnEnable()
{
_layerT = target as LayerT;
}
public override void OnInspectorGUI ()
{
serializedObject.Update ();
GUILayout.Space (10);
// 返回 一个32 位二进制数
// Layer 0000 0000 0000 0000 0000 0000 0000 0001
//对应系统同从 0 - 31 个层
_layerT.layerMask.value = EditorGUILayout.LayerField ("Layer", _layerT.layerMask.value);
GUILayout.Space (10);
_layerT.tag = EditorGUILayout.TagField ("Tag", _layerT.tag);
GUILayout.Space (10);
if (GUILayout.Button("Debug"))
{
Debug.Log("layer " + _layerT.GetLayerName(_layerT.layerMask));
Debug.Log("tag " + _layerT.tag);
}
if (GUI.changed)
{
EditorUtility.SetDirty(target);
}
// 保存序列化数据,否则会出现设置数据丢失情况
serializedObject.ApplyModifiedProperties ();
}
}