Рядом с полем должна быть небольшая точка.
. На правом краю изображения вы все еще можете увидеть пропущенную "точку". Это просто слишком далеко справа!
Это вызвано тем, что вы используете EditorGUI.ObjectField
с фиксированным Rect
для его положения и размера, которые просто не вписываются в размер окна. В основном это вызвано
position.width - 1
, это - 1
дает вам 1 пиксель .. это 1 пиксель точки, которую вы видите на скриншоте. Вы могли бы использовать
position.width - 10
, чтобы вы могли видеть полную точку. (Я бы тогда также рекомендовал не использовать 20
для высоты поля, а скорее EditorGUIUtility.singleLineHeight
).
так как
source = (GameObject)EditorGUI.ObjectField(new Rect(10, 30, position.width - 10, EditorGUIUtility.singleLineHeight), "Select Prefab", source, typeof(GameObject), true);
Однако это все равно будет вести себя странно, как только ширина станетна самом деле меньше, чем положение поля х. Также обратите внимание, что вы не можете смешивать EditorGUI
и GUILayout
.. ваши кнопки будут отображаться поверх ObjectField
. Таким образом, вам также необходимо использовать GUI.Button
с соответственно рассчитанными Rect
с .. Я бы не рекомендовал это.
Вместо этого вам следует просто использовать EditorGUILayout
вариант, который использует автоматическую компоновку инспектора
source = (GameObject)EditorGUILayout.ObjectField("Select Prefab", source, typeof(GameObject), true);
![enter image description here](https://i.stack.imgur.com/Fi76i.png)
![enter image description here](https://i.stack.imgur.com/mGRy2.png)
ObjectField текстовое описание и поле слишком далеко друг от друга.
Расстояние между автоматической меткой и полем можно изменить с помощью EditorGUIUtility.labelWidth
иустановите более короткую ширину (вам придется либо рассчитать ее, либо найти лучшую методом проб и ошибок), например,
EditorGUIUtility.labelWidth = 80;
source = (GameObject)EditorGUILayout.ObjectField("Select Prefab", source, typeof(GameObject), true);
![enter image description here](https://i.stack.imgur.com/XsJq9.png)
Обратите внимание, однакочто это будет применяться ко всему EditorWindow, а не только к этому конкретному полю, потому что обычно вы хотите, чтобы все ваши поля начинали выравниваться.
Или, если вы не хотите влиять на все поля, вы можете сделать то, что вы уже пробовали, ииспользуйте BeginHorizontal
и EndHorizontal
и переместите метку на LabelField
с исправлениемd width
EditorGUILayout.BeginHorizontal();
EditorGUILayout.LabelField("Select Prefab", GUILayout.Width(80));
source = (GameObject)EditorGUILayout.ObjectField(source, typeof(GameObject), true, GUILayout.ExpandWidth(true));
EditorGUILayout.EndHorizontal();
Обратите внимание, однако, что этот ярлык больше не «связан» с полем → он не станет синим, когда поле выделено, и полужирным при его изменении.
Наконец до
Кнопки сохранения / загрузки не отображаются.
код говорит
if (Selection.transforms.Length > 0)
, поэтому я предполагаю, что у вас ничего не выбрано в сцене
см. Selection.transforms
Возвращает выбор верхнего уровня, исключая префабы .
Это наиболее распространенный тип выбора при работе с Сюжетные объекты .
после того, как он у вас будет работать нормально:
![enter image description here](https://i.stack.imgur.com/5x4Y1.png)