[Unity] Custom EditorWindow - SceneView 관련 정리

0시0분·2023년 6월 14일
0

Unity

목록 보기
6/19

OnSceneGUI()

커스텀 타일맵을 만들면서 Grid를 SceneView 위에 그리기 위해 방법을 찾아야 했다.

찾아보니,

Scene view 상에 UI를 그리기 위해서는 update 콜백이 필요하다. 그래서 유니티에서는 Scene에서 오브젝트 정보 표시 및 이벤트 취합을 위해 콜백을 제공하는데, 이를 사용하기 위해서는 SceneView 클래스 onSceneGUIDelegate에 에디터 윈도우에서 사용할 콜백 함수를 추가하면된다. 그러면 Scene을 위한 update tick을 받을 수 있다.
// 출처 🐸

라는 방법이 있었다. 그러나,

라는 메세지가 떠서 대신 duringSceneGui 를 사용했는데 잘 동작했다.

protected void OnEnable()
{
    SceneView.duringSceneGui += this.OnSceneGUI;
}
protected void OnDisable()
{
    SceneView.duringSceneGui -= this.OnSceneGUI;
}

private void OnSceneGUI(SceneView sceneView)
{
    GetInputEvent(Event.current);
}



FocusWindowIfItsOpen<>()

z키를 누르면 타일이 회전하는 기능을 구현하는 과정에서
에디터 툴에서 상호작용을 하고 나면 키입력이 먹히지 않는 문제가 발생했다.

마우스 이동이나 클릭은 정상적으로 인식이 돼서 뭐가 문제인가 찾다보니
포커스가 에디터 툴로 되어있어서 발생하는 문제였다.
마우스 클릭 등으로 SceneView로 포커스가 잡혀야 키입력이 정상적으로 작동했다.
👉 OnSceneGUI()에서 처리되어야 하므로 당연한 내용이었는데 깨닫는데 시간이 걸렸다.

결국 OnGUI()에서 키입력 이벤트가 발생할 경우 포커스를 강제로 SceneView로 이동하도록 했다.

void OnGUI()
{
	...

    if (Event.current.type == EventType.KeyDown)
    {
        FocusWindowIfItsOpen<SceneView>();
    }
}



참고
👀 https://velog.io/@gold715/ScenveView-drawing
🐸 https://lunchballer.com/archives/522
👀 https://discussions.unity.com/t/how-can-i-select-focus-the-sceneview-in-editor/18039/3

0개의 댓글