Unity - вращать мышью вокруг объекта - PullRequest
0 голосов
/ 17 апреля 2020

Я надеюсь, что кто-то может прояснить это для меня, я буквально потратил на это дни.

Мне нужно сфокусировать камеру на передней части объекта, а затем позволить игроку вращаться вокруг объекта, удерживая кнопку мыши. Мне удалось заставить камеру сфокусироваться на передней части объекта, используя это:

if (!arrived)
{
    //Centre on our object
    var newPos = target.transform.position + currentRotation * (distance * target.transform.forward);
    transform.position = Vector3.Lerp(transform.position, newPos, 0.25f);
    transform.LookAt(target.position);
    return;
}

Но затем я ищу удерживаемую кнопку мыши и пытаюсь вращаться вокруг целевого объекта, сохраняя постоянное расстояние от него.

Я пробовал так много разных способов, но у всех есть проблемы.

Я пробовал:

transform.RotateAround(target.position, Vector3.down, (movementForce * 100000) * Time.deltaTime);

Но который отлично работает по горизонтали но то же самое с использованием Vector.left не работает по вертикали.

Я пробовал:

transform.LookAt(target.position);
Vector3 rotation = new Vector3(Input.GetAxisRaw("Mouse X"), Input.GetAxisRaw("Mouse Y"), 0);
transform.Translate(rotation * Time.deltaTime * 10);

Но это с течением времени отодвигает камеру от цели.

И, наконец, я не пытаюсь это сделать:

//Horizontal
Vector3 relativePos = target.position - transform.position; // Vector from camera to player
Vector3 relativePosRight = Vector3.Cross(relativePos, Vector3.left);
transform.RotateAround(target.position, relativePosRight, 100 * Time.deltaTime * Input.GetAxisRaw("Mouse X"));

//Vertical
Vector3 relativePos = target.position - transform.position; // Vector from camera to player
Vector3 relativePosRight = Vector3.Cross(relativePos,Vector3.up);
transform.RotateAround(target.position, relativePosRight, 100 * Time.deltaTime * Input.GetAxisRaw("Mouse Y"));

, который работает нормально по вертикали, но при перемещении мыши по горизонтали, кажется, также влияет на него по вертикали и вращается под странным углом.

Прошу прощения за любые очевидные ошибки в вышеприведенном, я буквально прибегаю к копированию и вставке каждого решения, которое я нахожу в Интернете, чтобы получить правильную вещь.

Заранее спасибо!

1 Ответ

0 голосов
/ 17 апреля 2020

Как выглядит иерархия вашей сцены? Можете ли вы сделать камеру дочерней по отношению к объекту, который вы хотите повернуть, чтобы камера всегда смотрела на объект, а затем вращала объект с помощью мыши?

Похоже на этот ответ .

Примерно так:

// Move the camera to the correct position/distance from the target.
Camera.main.transform.position = target.position + new Vector3(0,1,0); // 1m above the target.
Camera.main.transform.LookAt(target.position);
Camera.main.transform.SetParent(target);

// Rotate the target with the mouse input.
Vector3 rotation = new Vector3(Input.GetAxisRaw("Mouse X"), Input.GetAxisRaw("Mouse Y"), 0);
target.Translate(rotation * Time.deltaTime * 10);

Возможно, это не совсем то, что вам нужно, но визуально выглядит, будто он вращается вокруг объекта.

Надеюсь, это поможет !

...