Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

HandleUtility.PickGameObject

Объявление

public static GameObject PickGameObject(Vector2 position, out int materialIndex);

public static GameObject PickGameObject(Vector2 position, GameObject[] ignore, out int materialIndex);

public static GameObject PickGameObject(Vector2 position, GameObject[] ignore, GameObject[] selection, out int materialIndex);

public static GameObject PickGameObject(Vector2 position, bool selectPrefabRoot);

public static GameObject PickGameObject(Vector2 position, bool selectPrefabRoot, GameObject[] ignore);

public static GameObject PickGameObject(Vector2 position, bool selectPrefabRoot, GameObject[] ignore, GameObject[] filter);

public static GameObject PickGameObject(Vector2 position, bool selectPrefabRoot, GameObject[] ignore, GameObject[] filter, out int materialIndex);

Параметры

selectPrefabRoot Выберите Сборные.
materialIndex Возвращает индекс в массив материалов компонента Renderer, который находится ближе всего к указанной позиции.
position Позиция в координатах GUI. Верхний левый угол окна равен (0,0), а нижний правый — (Screen.width, Screen.height)..
ignore Массив GameObjects, который не будет учитываться при выборе ближайшего GameObject.
filter Массив GameObjects, который будет рассматриваться исключительно для выбора. Если значение null, все игровые объекты в открытых сценах могут быть выбраны.
selection Массив GameObjects, который будет рассматриваться исключительно для выбора. Если значение null, все игровые объекты в открытых сценах могут быть выбраны.

Возвращает

GameObject GameObject, который находится под запрошенной позицией.

Описание

Выбрать игровой объект, ближайший к указанной позиции.

HandleUtility.PickGameObject нельзя вызывать во время перерисовки. В большинстве случаев уместно вызывать во время EventType.MouseDown или EventType.MouseUp.

using UnityEditor; using UnityEngine; static class ShowHovered { static GameObject m_LastHoveredObject, m_LastClickedObject; [InitializeOnLoadMethod] static void Init() { SceneView.duringSceneGui += OnSceneGUI; } static void OnSceneGUI(SceneView view) { var evt = Event.current; // Register a control so that if no other handle is engaged, we can use the event. var pickingControlId = GUIUtility.GetControlID(FocusType.Passive); HandleUtility.AddDefaultControl(pickingControlId); switch (evt.type) { case EventType.MouseMove: { var picked = HandleUtility.PickGameObject(evt.mousePosition, false); if (picked != m_LastHoveredObject) { m_LastHoveredObject = picked; SceneView.RepaintAll(); } break; } case EventType.MouseDown: { // Make sure to check Tools.viewToolActive before consuming a mouse event, otherwise Scene navigation // controls will not work. if (!Tools.viewToolActive && HandleUtility.nearestControl == pickingControlId) { GUIUtility.hotControl = pickingControlId; evt.Use(); } break; } case EventType.MouseUp: { // If the hotControl is not pickingControlId, that means another control has the rights to this event. if (GUIUtility.hotControl != pickingControlId) return; var picked = HandleUtility.PickGameObject(evt.mousePosition, false); if (picked != m_LastClickedObject) { m_LastClickedObject = picked; SceneView.RepaintAll(); } // Make sure to Use() and reset the hotControl the event if we are the active control ID. evt.Use(); GUIUtility.hotControl = 0; break; } } Handles.BeginGUI(); GUILayout.BeginVertical(EditorStyles.helpBox, GUILayout.ExpandWidth(false)); GUILayout.Label($"Last Hovered Object: {m_LastHoveredObject}"); GUILayout.Label($"Last Clicked Object: {m_LastClickedObject}"); GUILayout.EndVertical(); Handles.EndGUI(); } }
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3