记录下,以后可以有个参考
绘制UI使用的是style.Draw(position, gUIContent, id, DragAndDrop.activeControlID == id);
这个style其实就是EditorStyles.objectField
有ObjectSelector.get.Show(obj, objType, property, allowSceneObjects);的
码块是后面那个圈圈的点击事件,点击后弹出对象选择面板
拖拽处理在EventType.DragUpdated,EventType.DragPerform的case块代码中
public static Object ObjectField(Rect position, GUIContent label, Object obj, Type objType, bool allowSceneObjects)
{
int controlID = GUIUtility.GetControlID(EditorGUI.s_ObjectFieldHash, FocusType.Keyboard, position);
position = EditorGUI.PrefixLabel(position, controlID, label);
if (EditorGUIUtility.HasObjectThumbnail(objType) && position.height > 16f)
{
float num = Mathf.Min(position.width, position.height);
position.height = num;
position.xMin = position.xMax - num;
}
return EditorGUI.DoObjectField(position, position, controlID, obj, objType, null, null, allowSceneObjects);
}
internal static Object DoObjectField(Rect position, Rect dropRect, int id, Object obj, Type objType, SerializedProperty property, EditorGUI.ObjectFieldValidator validator, bool allowSceneObjects)
{
return EditorGUI.DoObjectField(position, dropRect, id, obj, objType, property, validator, allowSceneObjects, EditorStyles.objectField);
}
internal static Object DoObjectField(Rect position, Rect dropRect, int id, Object obj, Type objType, SerializedProperty property, EditorGUI.ObjectFieldValidator validator, bool allowSceneObjects, GUIStyle style)
{
if (validator == null)
{
if (EditorGUI.<>f