Как сделать так чтобы камера следовала за героем в unity 2d

Добавил пользователь Евгений Кузнецов
Обновлено: 04.10.2024

По идеи не совсем то, по какой-то причине персонаж начинает вращение и не прекращает

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

Kejikeq
> Вопрос - как сделать так, чтобы персонаж передвигался относительно клавиши W,
> то есть условно a,d поворачивали персонажа, а W передвигала бы его прямо, а так
> же, требуется чтобы персонаж делал проверку на то куда смотрит камера и
> разворачивался в её сторону плавно. Сама камера сделана через lookat и
> привязанна к пустышке внутри персонажа.

То есть у тебя камера внутри персонажа, делает look at на персонажа, вращается вслед за персонажем, а персонаж должен вращаться вслед за камерой?

И после этого ты удивляешься, что вращение не прекращается?

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

Increaser
Ну а как привязать камеру к персонажу без привязки ._.

Kejikeq
> Ну а как привязать камеру к персонажу без привязки ._.
Increaser
> погуглить Cinemachine

Increaser
Мне начинает казаться что вся проблема заключается в том, что я хочу чтобы камера могла свободно вращаться вокруг персонажа и при этом следовать за ним а он мог поворачиваться за камерой, а по идеи должно происходить наоборот, камера должна поворачиваться в зависимости от того куда смотрит персонаж и двигаться за ним, ну а уж если мне хочется чтобы она свободно вращалась вокруг персонажа, то скорее всего следует сделать отдельную кнопку при которой камера перестает следовать за персонажем и становится свободной, наверное. Я запутался.

Запустить видео по клику - Как делать игры

zeffyros
Так в Cinemachine те же настройки, loot at и т.д. да функционал шире, но тем не менее.

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

>Kejikeq
Вот несколько вариантов слежения камеры за персонажем, все работает, лично проверял. Если что-то не работает, значит не так сделано.
Ссылка

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

Так сделайте
- найти формулу поиска точки на окружности с заданным радиусом

написать скрипт
- если не нажата клавиша (у вас вперед собственно) но нажата такая-то
тогда
- отодвинуть камеру от персонажа на нужное расстояние (это будет радиус)
- найти следующую точку куда подвинуть камеру (то есть вы хотите на такой-то угол повернуть. ищете точку с этим углом) (оно там в радианах вероятно)
- делаете transform.position, например в эту точку
- делаете поворот камеры по направлению: у вас есть 2 точки сама камера и центр, направление то есть известно. (от камеры к центру)
- повторить операцию пока нажата клавиша.

(это не экспертное мнение и скорее всего все можно проще значительно, просто я бы как-то так бы делал бы, но я сам только разбираюсь, а потом бы разбирался бы есть там какой-то функционал в unity для вращения вокруг центра или нет, вероятно есть)

там формулы что то типа:

test.x = BeginPosition.x + Mathf.Sin(RotationY * Mathf.Deg2Rad) * Width / 2f;

так же надо для Z но там еще одна формула похожая

Kejikeq
> я глянул, тут видишь как у него настроено, его персонаж повернулся, камера
> повернулась за ним, но вращать камеру вокруг персонажа он не может, так как
> камера строго следит ему в затылок условно, а мне то нужно другое.
На 4:10 не то, что ты хочешь разве?

Есть объект, если камера которая следует за ним. Как сделать, чтобы эта камера следовала, но не вращалась за объектом? Вешал Rigidbody на камеру,фризил его вращения - не помогает.

Ответы (3 шт):

Как вариант: помести обьект в камеру как дочерний. Но тогда будет проблема если нужно вращать камеру - ведь обьект будет вращатся если вращать камеру.

Как второй вариант: напиши простенький скрипт который запоминает разницу между координатами обьекта и камеры на инициализации и в каждом апдейте просто меняй трансформ.Позишн на данную разницу.

Самое банальное это просто брать старые координаты и добавлять смещение, сделанное игроком.

Камеры являются устройствами, которые захватывают и отображают мир игроку. Путем настройки и манипулирования камерами, вы можете сделать презентацию своей игры поистине уникальной. Вы можете иметь неограниченное количество камер в сцене. Вы можете настроить рендеринг камерами в любом порядке, на любом месте экрана, либо только в определенных частях экрана.


Свойства

Детали

Камеры очень важны для демонстрации вашей игры игроку. Они могут быть изменены, заскриптованы, наследованы для получения различных визуальных эффектов. Для паззла вы можете сделать камеру статичной и охватывающей обзором весь паззл. Для шутера от первоого лица вы можете сделать камеру дочерней по отношению к игроку и разместить её на уровне глаз персонажа. Для гоночный игры вы можете закрепить камеру позади автомобиля и заставить её следовать за ним.

Вы можете создать несколько камер и назначить каждой свою глубину(Depth). Камеры будут отрисовываться от низшей глубины до высшей глубины. Другими словами, камера с Depth 2 будет отрисована поверх камеры с Depth 1. Вы можете настроить значение свойства Normalized View Port Rectangle для изменения позиции и размера изображения с камеры на экране, например для создания нескольких экранов в одном, или для создания зеркала заднего вида.

Способ рендера

Unity поддерживает различные способы рендеринга. Вы должны выбрать один из них, в зависимости от содержимого вашей игры и целевой платформы / аппаратного обеспечения. Различные методы рендеринга поддерживают различные возможности и дают различную производительность, особенно в аспекте применения теней и источников света. Метод рендеринга, используемый в вашем проекте, выбирается в Player Settings. Дополнительно свой метод рендеринга может быть выбран для каждой камеры.

См. способы рендеринга для получения всех подробностей.

Clear Flags

Каждая камера хранит информацию о цвете и глубине, когда рендерит свой вид. По умолчанию, незаполненные части экрана, будут показаны в виде скайбокса. При использовании нескольких камер, каждая камера будет иметь свои буферы цвета и глубины, заполняемые при каждом рендеринге. Каждая камера будет рендерить то, что видно с её ракурса, а путем изменения настройки Clear Flags можно выбрать набор буферов, которые будут обновлены (очищены), во время рендеринга. Это осуществляется, выбором одного из четырёх вариантов:

Skybox

Это настройка по умолчанию. Пустые участки экрана будут отображать скайбокс текущей камеры. Если текущая камера не имеет скайбокса, то скайбокс будет использован стандартный скайбокс из меню Render Settings ( Edit->Render Settings ). Если и там не будет указан скайбокс, то будет использован цвет Background Color . Также к камере может быть добавлен компонент Skybox. Если вы хотите создать новый скайбокс, см. это руководство.

Solid color

Любые пустые части экрана будут отображать текущий фоновый цвет ( Background Color ) камеры.

Только глубина

Если вы хотите рисовать оружие игрока не подвергая его обрезке объектами окружения, внутри которых оно находится, установите одну камеру, рисующей окружение, с Depth 0, и ещё одну камеру, рисующую оружие — Depth 1. Для камеры оружия выберите Clear Flags depth only . Это позволит отобразить окружение на экране, но проигнорировать всю информацию о взаимном положении предметов в пространстве. Когда оружие будет отрисовано, непрозрачные части будут полностью отрисованы на экране поверх ранее находившегося там изображения, независимо от того, насколько близко оружие находится к стене.

Оружие отрисовано последним после очистки буфера глубины предшествовавшей камеры.

Оружие отрисовано последним после очистки буфера глубины предшествовавшей камеры.

Не очищать

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

Clip Planes (Плоскости отреза)

Near и Far Clip Plane — свойства, определяющие, где начинается и заканчивается область отрисовки камеры. Эта область ограничивается плоскостями, перпендикулярными направлению камеры, и находившимися в этих позициях относительно неё. Near Plane — это ближайшая позиция, а Far Plane — дальняя позиция.

Плоскости также определяют точность буфера глубины. Для обеспечения наивысшей точности вам следует отодвинуть Near Plane так далеко, насколько возможно.

Обратите внимание, что эти плоскости вместе определяют поле зрения камеры, которое известно как фрустум. Unity гарантирует, что объекты, полностью находящиеся за пределами фрустума, не будут отображаться. Это называется Frustum Culling и это срабатывает независимо от Occlusion Culling.

Из соображений производительности вы можете прекращать отрисовку мелких объектов раньше, чем отрисовку прочих. Для этого поместите их в separate layer и настройте дистанцию обрезки для этого слоя, используя функцию Camera.layerCullDistances.

Маска отрезания

Culling Mask используется для выборочного рендеринга групп объектов посредством использования слоёв. Больше информации об использовании слоёв можно найти здесь.

Normalized Viewport Rectangles

Normalized Viewport Rectangles предназначено для определения части экрана, на которой будет отрисовано изображение с камеры. Вы можете, к примеру, вставить изображение карты в нижний правый угол экрана, а вид с камеры на выпущенной ракете — в верхний левый угол. Немного поработав над дизайном, используя Viewport Rectangle , вы сможете создать кое-какие уникальные системы.

Очень просто создать раздельный экран для двух игроков, используя Normalized Viewport Rectangle . После создания двух камер, установите обеим камерам свойство H в значение 0.5 и для одной из них свойство Y в значение 0.5, а для другой — в значение 0. В результате, первая камера будет рисовать изображение в верхней половине экрана, а вторая камера — в нижней половине экрана.

Создание экрана для двух игроков с помощью Normalized ViewportRectangle

Создание экрана для двух игроков с помощью Normalized ViewportRectangle

Orthographic

Переключив камеру в ортографичесий ( Orthographic ) режим, вы устраните всю перспективу из отрисовываемого ей изображения. Это полезно для создания двумерных и изометрических игр.

Заметьте, что туман отрисовывается при этом равномерно, так что может выглядеть не так, как вы ожидали. Прочтите справко по компоненту Render Settings для получения подробностей.

Перспективная камера. Ортографическая камера. Изображение объектов не уменьшается при увеличении дистанции.

Текстура рендера

Эта возможность доступна лишь в расширенных лицензиях Unity. Она позволяет отрисовывать изображенеи с камеры в текстуру (Texture), которая может быть применена к другому игровому объекту. Это делает простым создание спортивной арены с видеомониторами, камеры наблюдения, отражений и т.д.

Использование рендертекстуры для создания монитора

Использование рендертекстуры для создания монитора

Target display

A camera has up to 8 target display settings. The camera can be controlled to render to one of up to 8 monitors. This is supported only on PC, Mac and Linux. In Game View the chosen display in the Camera Inspector will be shown.

как сделать движение камеры за персонажем в unity легко

Zivert - CRY | Премьера клипа

04:24

LOBODA - Americano (Премьера сингла, 2021)

03:31

Баста – Любовь и страх (feat. Дворецкая)

05:41

Ozoda - Esla Meni (Offıcıal Clıp 2021)

05:02

Султан Лагучев - Cкучает осень (премьера 2021)

02:29

Oliver Tree & Little Big - The Internet [Music Video]

03:36

Coldplay X BTS - My Universe (Official Video)

04:43

Читайте также: