SceneView 内での World 座標取得


検索して出てくるコードではうまくいかなかった。Retina とかの高解像度の際のためかな? scaledPixelHeight でもだめだったけど、 EditorGUIUtility.pixelsPerPoint を使ったらうまくいった。

static StageGeneratorHelper()
{
    SceneView.duringSceneGui += OnSceneViewGUI;
    stageDebugger = Object.FindObjectOfType<StageDebugger>();
}

private static void OnSceneViewGUI(SceneView obj)
{
    Event e = Event.current;

    Vector3 mousePosition = Event.current.mousePosition * EditorGUIUtility.pixelsPerPoint;
    mousePosition.y = SceneView.currentDrawingSceneView.camera.pixelHeight - mousePosition.y;
    mousePosition = SceneView.currentDrawingSceneView.camera.ScreenToWorldPoint(mousePosition);
    mousePosition.z = 0f;

    // 適当なものを追従させる
    GameObject.Find("ゲームオブジェクトの名前").transform.position = mousePosition;
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です