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 될 수 있도록 함