Map tool 구현7 - scene view

ㅋㅋ·2022년 9월 15일
0

Tool Window class

private void OnScencGUI(SceneView obj)
{
    ...

    var mousePos = Event.current.mousePosition;
    var ray = HandleUtility.GUIPointToWorldRay(mousePos);

    EditorHelper.Raycast(ray.origin, ray.origin + ray.direction * 300, out var hitPos);

    var cellPos = targetGrid.GetCellPos(hitPos);

    ...

    Handles.BeginGUI();
    {
        GUI.Label(new Rect(mousePos.x, mousePos.y + 10, 100, 50), cellPos.ToString(), EditorStyles.boldLabel);

        if (targetGrid.IsItemExist(cellPos))
        {
            var item = targetPalette.GetItem(targetGrid.GetItem(cellPos).id);
            var previewTex = AssetPreview.GetAssetPreview(item.targetObject);

            ...

            GUI.Box(rectBox, GUIContent.none, GUI.skin.window);
            GUI.DrawTexture(rectTex, previewTex);

            var rectName = new Rect(rectBox.center.x - 10, rectBox.bottom - 25, 100, 10);
            GUI.Label(rectName, item.name, EditorStyles.boldLabel);
        }
    }
    Handles.EndGUI();
}

씬에서 마우스가 그리드 위에 있을 때 해당 칸의 아이템 정보와 그리드 위치를 보여주도록 구현

그리드의 id를 가지고 팔레트에서 해당 오브젝트를 가져옴

오브젝트는 GetAssetPreview를 통해 프리뷰 텍스쳐를 얻을 수 있고

이를 DrawTextur 함수를 통해 씬 뷰에 그릴 수 있음


private void Update()
{
    SceneView.lastActiveSceneView.Repaint();
}

씬에서 마우스의 위치 변경만 일어날 시 repaint가 일어나지 않기 때문에

그리드 위치 label이 정상적으로 그려지지 않음

update에서 씬 뷰가 계속하여 repaint 될 수 있도록 함

0개의 댓글