一.静态方法
方法 描述 BeginBuildTargetSelectionGrouping 开始构建目标分组,并取回选定的BuildTargetGroup。(不同平台显示切换) BeginFadeGroup 开始一个可以隐藏/显示的组,并将对过渡进行动画处理。 BeginFoldoutHeaderGroup 使用左侧的折叠箭头制作标签。 BeginHorizontal 开始一个水平的小组 BeginScrollView 开始自动布局的滚动视图。 BeginToggleGroup 通过切换开始一个垂直组,以一次启用或禁用其中的所有控件。 BeginVertical 开始一个垂直分布,能够组合不同的控件分布 BoundsField 使中心和范围字段输入边界。 BoundsIntField 在“位置和大小”字段中输入BoundsInt。 ColorField 制作一个用于选择颜色的字段。 CurveField 制作一个用于编辑AnimationCurve的字段。 DelayedDoubleField 在延迟文本字段中输入双打。 DelayedFloatField 为输入浮点数设置一个延迟的文本字段。 DelayedIntField 为输入整数创建一个延迟的文本字段。 DelayedTextField 设置一个延迟的文本字段。 DoubleField 创建一个文本字段以输入双精度值。 DropdownButton 创建一个对鼠标按下有反应的按钮,以显示您自己的下拉内容。 EditorToolbar 用指定的编辑器工具集合填充工具栏。 EditorToolbarForTarget 用与目标对象的EditorToolAttribute匹配的编辑器工具集合填充工具栏。 EndBuildTargetSelectionGrouping 关闭以BeginBuildTargetSelectionGrouping开头的组。 EndFadeGroup 关闭以BeginFadeGroup开头的组。 EndFoldoutHeaderGroup 关闭以BeginFoldoutHeaderGroup开头的组。 EndHorizontal 关闭一个以BeginHorizontal开头的组。 EndScrollView 结束从对BeginScrollView的调用开始的滚动视图。 EndToggleGroup 关闭以BeginToggleGroup开头的组。 EndVertical 关闭以BeginVertical开头的组。 EnumFlagsField 单击时显示一个菜单,其中包含每个枚举类型值的选项。 EnumPopup 创建一个枚举弹出选择字段。 FloatField 创建一个用于输入浮点值的文本字段。 Foldout 使用左侧的折叠箭头制作标签。 GetControlRect 为编辑器控件获取一个矩形。 GradientField 制作一个用于编辑渐变的字段。 HelpBox 制作一个向用户显示消息的帮助框。 InspectorTitlebar 制作一个类似于检查器窗口的标题栏。 IntField 创建一个用于输入整数的文本字段。 IntPopup 制作一个整数弹出选择字段。 IntSlider 制作一个滑块,用户可以拖动以在最小值和最大值之间更改整数值。 LabelField 制作标签字段。(用于显示只读信息。) LayerField 制作一个图层选择字段。 LongField 创建一个文本字段以输入长整数。 MaskField 为口罩做好准备。 MinMaxSlider 制作一个特殊的滑块,用户可以用来指定最小值和最大值之间的范围。 ObjectField 创建一个字段以接收任何对象类型。 PasswordField 在用户可以输入密码的文本字段中输入密码。 Popup 制作一个通用的弹出选择字段。 PrefixLabel 在某些控件的前面做一个标签。 PropertyField 为SerializedProperty创建一个字段。 RectField 输入X,Y,W和H字段以输入Rect。 RectIntField 输入X,Y,W和H字段以输入RectInt。 SelectableLabel 创建一个可选标签字段。(用于显示可以复制粘贴的只读信息。) Slider 制作一个滑块,用户可以拖动以在最小值和最大值之间更改值。 Space 在上一个控件和下一个控件之间留一个小空间。 TagField 制作标签选择字段。 TextArea 制作一个文本区域。 TextField 创建一个文本字段。 Toggle 进行切换。 ToggleLeft 制作一个切换字段,其中切换位于左侧,标签紧随其右侧。 Vector2Field 输入X和Y字段以输入Vector2。 Vector2IntField 为输入Vector2Int的X和Y整数字段。 Vector3Field 输入X,Y和Z字段以输入Vector3。 Vector3IntField 制作一个X,Y和Z整数字段以输入Vector3Int。 Vector4Field 输入X,Y,Z和W字段以输入Vector4
using System. Collections;
using System. Collections. Generic;
using UnityEngine;
using UnityEngine. UI;
public class pets : MonoBehaviour
{
public string Name;
public int Id;
public int age= 1 ;
public Color Color_App;
public Vector3 Pet_Position;
public AnimationCurve Pet_Sleep;
public double Pet_GUID;
public Pet_FlagsEnum PetFlagsEnum;
void Start ( )
{
}
void Update ( )
{
}
}
public enum Pet_FlagsEnum
{
[ Header ( "未知" ) ]
none = 0 ,
[ Header ( "睡觉" ) ]
sleep = 1 < < 0 ,
[ Header ( "吃饭" ) ]
rice = 1 < < 1 ,
[ Header ( "睡觉和吃饭" ) ]
sleepandrice = sleep| rice,
[ Header ( "泡妞" ) ]
xxoo = 1 < < 2 ,
[ Header ( "全干" ) ]
Everthing = ~ 0 ,
}
using System;
using System. Collections;
using System. Collections. Generic;
using System. Linq;
using System. Reflection;
using ILRuntime. Runtime;
using UnityEngine;
using UnityEditor;
using UnityEditor. AnimatedValues;
using UnityEditor. EditorTools;
using Object = UnityEngine. Object;
[ CustomEditor ( typeof ( pets) ) ]
[ CanEditMultipleObjects ]
public class Cusom_Pets : Editor
{
AnimBool m_ShowExtraFields;
private SerializedProperty NameProp;
private SerializedProperty AgeProp;
private SerializedProperty IdProp;
private SerializedProperty Color_Prop;
private SerializedProperty Pet_PositionProp;
private SerializedProperty Pet_SleepProp;
private SerializedProperty pet_guid_Prop;
private pets Editor_Pets;
string m_String;
Color m_Color = Color. white;
int m_Number = 0 ;
private bool IS_BeginFoldoutHeaderGroup= true ;
private void OnEnable ( )
{
NameProp = RentProp ( "Name" ) ;
AgeProp = RentProp ( "age" ) ;
IdProp = RentProp ( "Id" ) ;
Color_Prop= RentProp ( "Color_App" ) ;
Pet_PositionProp = RentProp ( "Pet_Position" ) ;
Pet_SleepProp = RentProp ( "Pet_Sleep" ) ;
pet_guid_Prop = RentProp ( "Pet_GUID" ) ;
Editor_Pets = target as pets;
m_ShowExtraFields = new AnimBool ( true ) ;
m_ShowExtraFields. valueChanged. AddListener ( Repaint) ;
addScroll = new List < string > ( ) ;
}
Vector2 scrollPos;
private List< string > addScroll;
private bool IsToggle;
bool [ ] skill = new bool [ 3 ] { false , false , false } ;
private string _dopdownButton;
private Pet_FlagsEnum Pet_FlagsEnum_iteml;
private bool Is_EditorGUILayoutFoldout;
private Gradient gradient = new Gradient ( ) ;
private bool IS_InspectorTitlebar;
private int selectedSize = 1 ;
string [ ] selectedSize_names = new string [ ] { "Normal" , "Double" , "Quadruple" } ;
int [ ] selectedSize_sizes = { 1 , 2 , 4 } ;
static int options_flags = 0 ;
static string [ ] options_mask = new string [ ] { "CanJump" , "CanShoot" , "CanSwim" } ;
float minVal = - 10 ;
float minLimit = - 20 ;
float maxVal = 10 ;
float maxLimit = 20 ;
private string password;
private Rect init_rect;
private RectInt _rectInt;
private float defult_Slider;
private string defult_TextArea;
public override void OnInspectorGUI ( )
{
serializedObject. Update ( ) ;
BuildTargetGroup selectedBuildTargetGroup = EditorGUILayout. BeginBuildTargetSelectionGrouping ( ) ;
if ( selectedBuildTargetGroup == BuildTargetGroup. Android)
{
EditorGUILayout. LabelField ( "Android 文本" ) ;
m_ShowExtraFields. target = EditorGUILayout. ToggleLeft ( "查看文本颜色" , m_ShowExtraFields. target) ;
if ( EditorGUILayout. BeginFadeGroup ( m_ShowExtraFields. faded) )
{
EditorGUILayout. PrefixLabel ( "Color" ) ;
m_Color = EditorGUILayout. ColorField ( m_Color) ;
EditorGUILayout. PrefixLabel ( "Text" ) ;
m_String = EditorGUILayout. TextField ( m_String) ;
EditorGUILayout. PrefixLabel ( "Number" ) ;
m_Number = EditorGUILayout. IntSlider ( m_Number, 0 , 10 ) ;
EditorGUILayout. Space ( 20 ) ;
}
EditorGUILayout. EndFadeGroup ( ) ;
IS_BeginFoldoutHeaderGroup= EditorGUILayout. BeginFoldoutHeaderGroup ( IS_BeginFoldoutHeaderGroup, "宠物transform" ) ;
if ( IS_BeginFoldoutHeaderGroup)
{
Pet_PositionProp. vector3Value= EditorGUILayout. Vector3Field ( new GUIContent ( "宠物的位置" ) , Pet_PositionProp. vector3Value) ;
}
EditorGUILayout. EndFoldoutHeaderGroup ( ) ;
EditorGUILayout. HelpBox ( "这是一个ScrollView" , MessageType. None, true ) ;
EditorGUILayout. Space ( 3 ) ;
scrollPos= EditorGUILayout. BeginScrollView ( scrollPos, GUILayout. Width ( 150 ) , GUILayout. Height ( 50 ) ) ;
for ( int i = 0 ; i < addScroll. Count; i++ )
{
GUILayout. Label ( addScroll[ i] ) ;
}
EditorGUILayout. EndScrollView ( ) ;
if ( GUILayout. Button ( "增加文字" ) )
{
addScroll? . Add ( "妹妹,借我一百块" ) ;
}
}
else if ( selectedBuildTargetGroup == BuildTargetGroup. WebGL)
{
EditorGUILayout. HelpBox ( new GUIContent ( "求助" ) , true ) ;
EditorGUILayout. Space ( 10 ) ;
Rect r= EditorGUILayout. BeginHorizontal ( "按钮" ) ;
if ( GUI. Button ( r, GUIContent. none) )
{
Debug. Log ( "呵呵,想多了" ) ;
}
GUILayout. Label ( "点击我" ) ;
GUILayout. Label ( "我告诉你答案" ) ;
EditorGUILayout. EndHorizontal ( ) ;
EditorGUILayout. Space ( 10 ) ;
IsToggle= EditorGUILayout. BeginToggleGroup ( "这个宠物会的技能" , IsToggle) ;
skill[ 0 ] = EditorGUILayout. Toggle ( "跳舞" , skill[ 0 ] ) ;
skill[ 1 ] = EditorGUILayout. Toggle ( "游泳" , skill[ 1 ] ) ;
skill[ 2 ] = EditorGUILayout. Toggle ( "干饭" , skill[ 2 ] ) ;
EditorGUILayout. EndToggleGroup ( ) ;
EditorGUILayout. Space ( 10 ) ;
EditorGUILayout. BoundsField ( "宠物活动范围( BoundsField )" , new Bounds ( Vector3. zero, new Vector3 ( 100 , 100 ) ) ) ;
EditorGUILayout. Space ( 10 ) ;
EditorGUILayout. BoundsIntField ( "宠物活动最小范围( BoundsIntField )" , new BoundsInt ( Vector3Int. zero, new Vector3Int ( 10 , 10 , 0 ) ) ) ;
EditorGUILayout. Space ( 10 ) ;
Pet_SleepProp. animationCurveValue= EditorGUILayout. CurveField ( "宠物睡眠曲线" , Pet_SleepProp. animationCurveValue, Color. cyan, new Rect ( new Vector2 ( 5 , 5 ) , new Vector2 ( 30 , 200 ) ) ) ;
EditorGUILayout. Space ( 20 ) ;
EditorGUILayout. BeginHorizontal ( ) ;
EditorGUILayout. LabelField ( "这些宠物爱干嘛( EnumFlagsField)" ) ;
Editor_Pets. PetFlagsEnum = ( Pet_FlagsEnum) EditorGUILayout. EnumFlagsField ( Pet_FlagsEnum_iteml) ;
Editor_Pets. PetFlagsEnum = ( Pet_FlagsEnum) EditorGUILayout. EnumFlagsField ( Pet_FlagsEnum_iteml) ;
EditorGUILayout. EndHorizontal ( ) ;
EditorGUILayout. Space ( 10 ) ;
Editor_Pets. PetFlagsEnum= ( Pet_FlagsEnum) EditorGUILayout. EnumPopup ( "第二个enum" , Editor_Pets. PetFlagsEnum) ;
EditorGUILayout. Space ( 10 ) ;
EditorGUILayout. ObjectField ( "宠物对象" , null , typeof ( Object) , true ) ;
EditorGUILayout. Space ( 10 ) ;
password= EditorGUILayout. PasswordField ( "密码输入" , password) ;
EditorGUILayout. Space ( 10 ) ;
EditorGUILayout. SelectableLabel ( "可以复制粘贴的可读标签(SelectableLabel)" ) ;
EditorGUILayout. Space ( 10 ) ;
defult_Slider= EditorGUILayout. Slider ( "制作一个滑块(Slider)" , defult_Slider, 0 , 60 ) ;
EditorGUILayout. Space ( 10 ) ;
EditorGUILayout. TagField ( "可选择标签(TagField)" ) ;
EditorGUILayout. Space ( 10 ) ;
defult_TextArea= EditorGUILayout. TextArea ( defult_TextArea, GUILayout. Height ( 30 ) ) ;
}
else
{
EditorGUILayout. Space ( 10 ) ;
EditorGUILayout. IntSlider ( AgeProp, 0 , 20 , new GUIContent ( "年龄" ) ) ;
ProgressBar ( AgeProp. intValue / 20.0f , "年龄" ) ;
EditorGUILayout. IntSlider ( IdProp, 0 , 100 , new GUIContent ( "编号" ) ) ;
ProgressBar ( IdProp. intValue / 100.0f , "编号" ) ;
EditorGUILayout. PropertyField ( NameProp, new GUIContent ( "宠物名字" ) ) ;
Rect r = ( Rect) EditorGUILayout. BeginVertical ( "Button" ) ;
if ( GUI. Button ( r, GUIContent. none) )
Debug. Log ( "呵呵,想多了" ) ;
GUILayout. Label ( "点击我" ) ;
GUILayout. Label ( "我告诉你答案" ) ;
EditorGUILayout. EndVertical ( ) ;
Color_Prop. colorValue= EditorGUILayout. ColorField ( "宠物颜色" , Color_Prop. colorValue) ;
pet_guid_Prop. doubleValue= EditorGUILayout. DoubleField ( "宠物GUID ( DoubleField )" , pet_guid_Prop. doubleValue) ;
EditorGUILayout. Space ( 20 ) ;
EditorGUILayout. BeginHorizontal ( ) ;
EditorGUILayout. LabelField ( "下拉内容 (DropdownButton):" ) ;
if ( EditorGUILayout. DropdownButton ( new GUIContent ( _dopdownButton) , FocusType. Keyboard) )
{
var alls = new string [ 4 ] { "小猫咪" , "小狗狗" , "小龟龟" , "小鸡鸡" } ;
GenericMenu _menu = new GenericMenu ( ) ;
alls. ToList ( ) . ForEach ( x = >
{
_menu. AddItem ( new GUIContent ( x) , _dopdownButton. Equals ( x) , OnValueSelected, x) ;
} ) ;
_menu. ShowAsContext ( ) ;
}
EditorGUILayout. EndHorizontal ( ) ;
EditorGUILayout. Space ( 20 ) ;
EditorGUILayout. BeginHorizontal ( ) ;
EditorGUILayout. LabelField ( "平台工具使用 (EditorToolbar):" ) ;
EditorGUILayout. EditorToolbar ( new EditorTool [ ] { new tool_at ( ) } ) ;
EditorGUILayout. Space ( 20 ) ;
EditorGUILayout. EndHorizontal ( ) ;
Is_EditorGUILayoutFoldout= EditorGUILayout. Foldout ( Is_EditorGUILayoutFoldout, "Foldout方法的使用" ) ;
if ( Is_EditorGUILayoutFoldout)
{
EditorGUILayout. Space ( 10 ) ;
EditorGUILayout. LabelField ( "使用左侧的折叠箭头制作标签" ) ;
}
EditorGUILayout. Space ( 10 ) ;
gradient = EditorGUILayout. GradientField ( "渐变 由用户编辑的渐变(Gradient)" , gradient) ;
EditorGUILayout. Space ( 20 ) ;
selectedSize = EditorGUILayout. IntPopup ( "制作一个整数弹出选择字段: " , selectedSize, selectedSize_names, selectedSize_sizes) ;
EditorGUILayout. Space ( 20 ) ;
selectedSize= EditorGUILayout. Popup ( "制作一个通用的弹出选择字段。" , selectedSize, selectedSize_names) ;
EditorGUILayout. LabelField ( "Min Val(MinMaxSlider):" , minVal. ToString ( ) ) ;
EditorGUILayout. LabelField ( "Max Val(MinMaxSlider):" , maxVal. ToString ( ) ) ;
EditorGUILayout. MinMaxSlider ( ref minVal, ref maxVal, minLimit, maxLimit) ;
EditorGUILayout. Space ( 20 ) ;
EditorGUILayout. LayerField ( "添加一个层级" , 0 ) ;
EditorGUILayout. Space ( 20 ) ;
options_flags = EditorGUILayout. MaskField ( "添加一个遮罩" , options_flags, options_mask) ; EditorGUILayout. Space ( 10 ) ;
EditorGUILayout. BeginHorizontal ( ) ;
EditorGUILayout. PrefixLabel ( "显示前缀标签的简单窗口。" ) ;
Editor_Pets. age= EditorGUILayout. IntField ( Editor_Pets. age) ;
EditorGUILayout. EndHorizontal ( ) ;
EditorGUILayout. Space ( 10 ) ;
init_rect= EditorGUILayout. RectField ( new GUIContent ( "RectField" ) , init_rect) ;
EditorGUILayout. Space ( 10 ) ;
_rectInt = EditorGUILayout. RectIntField ( "_rectInt" , _rectInt) ;
}
EditorGUILayout. Space ( 30 ) ;
EditorGUILayout. LabelField ( "制作一个类似于检查器窗口的标题栏。" ) ;
if ( Selection. activeGameObject)
{
var selectedTransform = Selection. activeGameObject. transform;
IS_InspectorTitlebar= EditorGUILayout. InspectorTitlebar ( IS_InspectorTitlebar, selectedTransform) ;
if ( IS_InspectorTitlebar)
{
selectedTransform. position =
EditorGUILayout. Vector3Field ( "Position" , selectedTransform. position) ;
EditorGUILayout. Space ( ) ;
selectedTransform. localScale =
EditorGUILayout. Vector3Field ( "Scale" , selectedTransform. localScale) ;
}
}
EditorGUILayout. EndBuildTargetSelectionGrouping ( ) ;
serializedObject. ApplyModifiedProperties ( ) ;
}
private SerializedProperty RentProp ( string arg)
{
var iteml= serializedObject. FindProperty ( arg) ;
return iteml;
}
private void ProgressBar ( float value , string label)
{
Rect rect = GUILayoutUtility. GetRect ( 18 , 18 ) ;
EditorGUI. ProgressBar ( rect, value , label) ;
EditorGUILayout. Space ( 10 ) ;
}
private void OnValueSelected ( object arg)
{
_dopdownButton = arg. ToString ( ) ;
}
[ EditorTool ( "通用平台工具" ) ]
public class tool_at: EditorTool
{
GUIContent m_IconContent;
void OnEnable ( )
{
Texture text = AssetDatabase. LoadAssetAtPath < Texture > ( "Assets/Shader/texture/cili.png" ) ;
m_IconContent = new GUIContent ( )
{
image = text,
text = "平台工具" ,
tooltip = "平台工具"
} ;
}
public override GUIContent toolbarIcon
{
get { return m_IconContent; }
}
public override void OnToolGUI ( EditorWindow window)
{
EditorGUI. BeginChangeCheck ( ) ;
Vector3 position = Tools. handlePosition;
using ( new Handles. DrawingScope ( Color. green) )
{
position = Handles. Slider ( position, Vector3. right) ;
}
if ( EditorGUI. EndChangeCheck ( ) )
{
Vector3 delta = position - Tools. handlePosition;
Undo. RecordObjects ( Selection. transforms, "Move Platform" ) ;
foreach ( var transform in Selection. transforms)
transform. position + = delta;
}
}
}
}