Как расположить камеру позади игрока в зависимости от направления и посмотреть это направление в Unity - PullRequest
0 голосов
/ 03 марта 2019

Я создаю игру с автономной камерой.Я хочу, чтобы эта камера показывала, куда движется игрок.Игра позволяет игроку иметь широкий диапазон движений, а не просто ходить в 3D.Так, например, если игрок падает на землю, камера должна располагаться над игроком, глядя на него и на землю.И если игрок движется вперед, камера должна расположиться позади игрока, глядя вперед.

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

///This should position the camera in a straight line between the player and the direction the player is heading. This seems to work to work nearly as expected, but seems to line up to what I believe to be the opposite direction in some cases.
v3T = player.transform.position - (player.GetComponent<Rigidbody().velocity - player.transform.position);
p2 = player.transform.position + v3T.normalized * 7.0f;
finalP = Vector3.SmoothDamp(finalP,p2,ref velocity, 0.002f, 850f);
transform.position = new Vector3(finalP.x, finalP.y, finalP.z);

//Using a LookAt like this leads for decent results, but not perfect. Possibly due to me not lining up the camera correctly?
transform.LookAt(player.transform.position);

//Using a Lookat in direction the player is moving doesn't give me the expected result. It seems to lose track of the player easily, and doesn't go in the direction that I thought it would at all times.
//transform.LookAt(player.GetComponent<Rigidbody>().velocity)

Камера работает неправильно

Камера работает правильно

1 Ответ

0 голосов
/ 04 марта 2019

Хорошо, я думаю, что я вроде как обернул голову вокруг этого.Кажется, существует проблема отсечения / пересечения между камерой и проигрывателем, что приводит к странному поведению камеры.Я создал небольшой проект, импортировал Standard Unity Controller от третьего лица и скопировал ваш код на камеру.Сначала я столкнулся с проблемой, когда камера показывает плеер сбоку.Затем я добавил статический вектор в начальное положение камеры, чтобы исправить наложение камеры на символ от третьего лица, и это устранило проблему (по крайней мере, для меня и моей установки).Вот функция обновления компонента «Камера».

    ///This should position the camera in a straight line between the player and the direction the player is heading. This seems to work to work nearly as expected, but seems to line up to what I believe to be the opposite direction in some cases.
    v3T = player.transform.position + new Vector3(5,5,5); //- (player.GetComponent<Rigidbody>().velocity - player.transform.position);
    p2 = player.transform.position + v3T.normalized * 7.0f;
    finalP = Vector3.SmoothDamp(finalP,p2,ref velocity, 0.002f, 850f);
    transform.position = new Vector3(finalP.x, finalP.y, finalP.z);

    //Using a LookAt like this leads for decent results, but not perfect. Possibly due to me not lining up the camera correctly?
    transform.LookAt(player.transform.position);

    //Using a Lookat in direction the player is moving doesn't give me the expected result. It seems to lose track of the player easily, and doesn't go in the direction that I thought it would at all times.
    //transform.LookAt(player.GetComponent<Rigidbody>().velocity)

Вот несколько снимков экрана Я сделал мои настройки и поведение камеры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...