<UNITY>/EDITOR
에디터에서 마우스 위치값 받기
CodeGrimie
2021. 3. 2. 11:03
유니티 포트폴리오가 꼭 게임일 필요는 없으니까 실제로 필요함을 느꼈던 툴을 만들기로 했다.
픽셀 아트를 찍음과 동시에 Mesh로 변형하고 UV맵을 정리해서 Prefab화 하는 툴인데, 추가로 필요에 따라 정점의 좌표를 이동해서 간단한 모델링이 가능한 것을 목표로 정했다.
그래서 기본적으로 에디터 내에서 마우스 입력을 받아올 필요가 있었다.
▼ 에디터 내 마우스 입력 예시 코드
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class ExampleWindow : EditorWindow
{
[MenuItem("Window/ExampleWindow")]
public static void ShowWindow()
{
EditorWindow.GetWindow(typeof(ExampleWindow));
}
private void OnEnable()
{
wantsMouseMove = true;
}
private void OnGUI()
{
ProcessEvents(Event.current);
if (GUI.changed) Repaint();
}
private void ProcessEvents(Event e)
{
switch (e.type)
{
case EventType.MouseDown:
{
if (e.button == 0)
{
Debug.Log(e.mousePosition);
}
}
break;
case EventType.MouseMove:
{
Debug.Log(e.mousePosition);
}
break;
}
}
}
실제로 마우스 이벤트를 받아오는 코드는 ProcessEvents(Event e) 함수의 코드다.
유니티 내장 함수는 아니고 그냥 단순히 Event.current를 받아서 switch문으로 전달하는 역활만 하는 함수다.
마우스를 클릭하거나 떼는 경우엔 런타임에서 마우스 입력을 받는 것과 큰 차이가 없다.
다만 MouseMove의 경우엔 wantsMouseMove를 true로 해줘야만 동작한다.
기본적으로 유니티 에디터에서 매 프레임마다 마우스 움직임을 확인해야할 이유는 없기 때문에 성능 최적화를 위해서 MouseMove가 비활성화 되어 있다.
나의 경우도 단순히 마우스 입력을 확인하기 위해서 MouseMove를 사용한 것일 뿐 실제 툴 로직에서는 필요로 하지 않는다.