うにてぃブログ

UnityやUnreal Engineの記事を書いていきます

【Unity】SceneView をクリックした場所のオブジェクト一覧を取得する

HandleUtility.PickGameObject を利用すれば対象位置のオブジェクトを取得できますが、すべて取得できません

そのため、Ignoreに取得したオブジェクトを詰め込むことですべてのオブジェクトを取得することができます

using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
 
public static class SceneViewUtility
{
    [InitializeOnLoadMethod]
    private static void Initialize()
    {
        SceneView.duringSceneGui -= SceneViewOnGUI;
        SceneView.duringSceneGui += SceneViewOnGUI;    
    }
  
    private static void SceneViewOnGUI(SceneView sceneView)
    {
        var e = Event.current;
        if (e.type == EventType.MouseDown)
        {
            var hitList = new List<GameObject>();
            while (true)
            {
                var picked = HandleUtility.PickGameObject(
                    e.mousePosition,
                    false,
                    hitList.ToArray());

                if (picked == null)
                    break;

                hitList.Add(picked);
            }
 
            if (hitList.Count <= 0)
            {
                Debug.Log("Not Hit");
            }
            else
            {
                Debug.Log($"Hit {hitList.Count}");
            }
        }
    }
}