Как стать автором
Обновить

Координаты курсора сцены в редакторе

Время на прочтение1 мин
Количество просмотров2.1K

Очень давно была необходимость отображать координаты курсора в редакторе сцены. Unity, на сколько я понимаю, до сих пор этого не умеет. Написал давно. Выглядит просто. Сегодня в очередной раз пригодилось, так как нужно было половить пиксели на сцене в режиме паузы.

public class CursorSceneCoordinates : EditorWindow
{
    private Vector2 _scenePosition;

    [MenuItem("Cursor Scene Coordinates")]
    static void Init()
    { 
        CursorSceneCoordinates window = GetWindow<CursorSceneCoordinates>();
        window.Show();
    }

    private void OnEnable() { SceneView.duringSceneGui += SceneViewDuring; } 

    private void OnDisable() { SceneView.duringSceneGui -= SceneViewDuring; }

    private void SceneViewDuring(SceneView scene)
    {
        var e = Event.current;
        if (e.type == EventType.KeyDown && e.keyCode == KeyCode.Space)
        {
            float pixelsPerPoint = EditorGUIUtility.pixelsPerPoint;
            Vector2 mouse = e.mousePosition;
            mouse.x *= pixelsPerPoint;
            mouse.y = scene.camera.pixelHeight - mouse.y * pixelsPerPoint;
            _scenePosition = scene.camera.ScreenToWorldPoint(mouse);

            Repaint();
        }
    }

    void OnGUI()
    {
        EditorGUILayout.LabelField("Scene: ", _scenePosition.ToString());
    } 
}

После открытия окна, перемещая курсор по редактору сцены и нажимая на пробел, в окошке будет выводится координаты мира.

Из этого простого решение можно сделать интересный инструмент. Например, пускать луч и отображать список объектов, слоев и другую информацию для отладки.

Иногда бухчу про #gamedev в Твиттере https://twitter.com/delaigrodela

Теги:
Хабы:
Всего голосов 6: ↑4 и ↓2+2
Комментарии4

Публикации

Истории

Работа

Ближайшие события

Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн
Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург