Unity EditorWindow - найти положение мыши в окне обзора - PullRequest
0 голосов
/ 02 февраля 2019

Я гуглю и пытаюсь найти ответ на этот вопрос.Но я ничего не придумала.

private static void OnSceneGUI(SceneView sceneView)
{
    // var mousePos = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition);
    // Ray ray = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition);
    Ray ray = Camera.current.ScreenPointToRay(Event.current.mousePosition);
    Debug.Log("Screen: " + ray);
}

Это то, что я придумал сейчас, чтобы найти положение мыши.

Кажется, что X всегда прав, но Y и Z этоследуя зуму камеры, а не указателям мыши на экране.

Моя цель - найти mousePos, а затем сбросить playerPos туда, где находится моя мышь.

[MenuItem("MyMenu/DevTools/ResetPlayer #r")]
private static void ResetPlayer()
{
    var player = GameObject.Find("Player");
    Transform playerPos = player.GetComponent<Transform>();
    Vector3 reset = new Vector3(-7, 0, 0);

    playerPos.position = reset;
}

Пока ятолько разобрался как сбросить в фиксированную позицию.

Я очень новичок в этом коде редактора, поэтому я ценю любую помощь, которую могу получить!:)

1 Ответ

0 голосов
/ 04 февраля 2019

Хорошо, вот наконец-то разобрался, как это сделать!Я просто поделюсь своими результатами здесь на случай, если кто-то еще застрянет на этом в будущем.:)

static Vector3 resets;
private static void OnSceneGUI(SceneView sceneView)
{
    Vector3 distanceFromCam = new Vector3(Camera.main.transform.position.x, 
                                                Camera.main.transform.position.y, 
                                                    0);
    Plane plane = new Plane(Vector3.forward, distanceFromCam);

    Ray ray = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition);
    float enter = 0.0f;

    if (plane.Raycast(ray, out enter))
    {
        //Get the point that is clicked
        resets = ray.GetPoint(enter);
        //Debug.Log("Mouse Pos" + resets);
    }
}

А вот сочетание клавиш и клавиш.

[MenuItem("MyMenu/DevTools/ResetPlayer #r")]
private static void ResetPlayer()
{
    var player = GameObject.Find("Player");                                     // Find Player GameObject.
    Transform playerPos = player.GetComponent<Transform>();                     // Get the Transform from PlayerGO and make it to a Transform playerPos.
    //Vector3 resets = new Vector3(-7, 0, 0);                                    // Define the hardcoded position you want to reset the player to.                              

    playerPos.position = resets;                                                // Set playerPos to a hardcoded position.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...