unity как привязать камеру к персонажу

Продолжаем делать наш Unity for dummies платформер.

Полные версии кода будут находиться в конце поста.

Если вы не в курсе, как работают хуки жизненного цикла в Unity, вы можете ознакомиться с данной статьёй.

Создаём в панели ассетов C# cкрипт PlayerBehaviour, и запихиваем его в папку Scripts (её можно создать в той же панели ассетов).

Затем выбираем наш объект Player слева, в меню иерархии, и закрепляем инспектор (меню справа), нажав на замок в верхнем правом углу.

Пока закрываем все ненужные компоненты (Box Collider 2D, etc), нажимая на стрелочку у каждого из них.

Теперь перетаскиваем наш скрипт в инспектор, и он прикрепляется к объекту Player (если вы не выполнили предыдщуий пункт с закрепением меню, то вы этого сделать не сможете).

Если зайти в Edit => Project Settings => Input Manager, то мы можём увидеть настройки управления. Например, прыжок (Jump) назначен на пробел, в то время, как движение по горизонтали назначено на a, d, ←,→.

Запомним это для того, чтобы затем использовать в коде (названия инпутов Jump, Horizontal).

Пора покодить. Два раза нажимаем на наш скрипт PlayerBehaviour, и Unity отдаст его в руки Visual Studio.

Сохраняем файл, и переходим обратно в Unity. После того, как Unity проверит код (линтинг, ошибки, пустые переменные). Если что то неправильно, то вы увидите сообщение об ошибке.

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

Мне не нравится, что персонажа переворачивает. Исправим.

Заходим в инспектор, открываем Rigidbody2D и ставим галочку на Freeze Rotation Z.

Есть два основных способа научить камеру двигаться за персонажем.

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

2. Задать движение камеры за персонажем програмно.

Создаём скрипт CameraBehaviour, и привязываем его к объекту Main Camera (добавляем через инспектор).

Открываем наш новый скрипт, и начинаем кодить (да, мне на работе не хватает, продолжаю и после).

Фиксируем объект камеры на замок в инспекторе, и перетаскиваем наш объект Player в GameObject.

Теперь камера двигается за игроком.

Однако камера постоянно вылезает за пределы уровня, показывая синий фон.

Я не уверен, что моё решение правильное. Буду рад, если кто-нибудь поделится своими соображениями на данный счёт.

Добавляем в наш скрипт CameraBehaviour следующий код:

Двигаем камеру, и снимаем наши измерения ее положений.

На скрине ниже камера стоит в левом нижнем углу сцены.

Проставляем снятые позиции для камеры (мои и ваши позиции будут отличаться).

Теперь обновим метод UpdateCameraPosition в скрипте CameraBehaviour

Отлично, камера перестала «гулять». Работаем дальше.

Выбираем наш Foreground, и создаём новый слой ‘Ground’ в инспекторе.

Снова тыкаем на Foreground, и выбираем в поле Layer наш только что созданный слой.

Добавим в PlayerBehaviour такую строчку.

Теперь в объекте Player мы можем выбрать наш свежесозданный слой.

Обновляем наш PlayerBehaviour. Добавим коллайдер (rigidBody мы создавали ранее).

Теперь мы можем обновить обработку перемещения персонажа в методе updatePlayerPosition

Летать мы разучились, а по платформе больше не скользим. Победа!

Я не уверен, что моё решение правильное. Буду рад, если кто-нибудь поделится своими соображениями на данный счёт

Привет.
Я, конечно, дохуя вовремя, когда у тебя уже пять статей и рефакторинг, но вот щас иду за тобой пока вот на этом месте.
Короче, в ассет-сторе есть проект 2D Game Kit от разрабов движка. Там движение камеры сделано буквально следующим образом, если помню (давно открывал). Уровень завёрнут в коллайдер, ещё один коллайдер на камере. Соответственно, когда она о него стукается, то расслабляется и не двигается. И ещё там угарный камера-лаг стоит, чтоб камера не жёстко следовала за персонажем, а как бы за верёвочку.

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

Источник

Советы Доброго Змея unity как привязать камеру к персонажу. Смотреть фото unity как привязать камеру к персонажу. Смотреть картинку unity как привязать камеру к персонажу. Картинка про unity как привязать камеру к персонажу. Фото unity как привязать камеру к персонажу

unity как привязать камеру к персонажу. Смотреть фото unity как привязать камеру к персонажу. Смотреть картинку unity как привязать камеру к персонажу. Картинка про unity как привязать камеру к персонажу. Фото unity как привязать камеру к персонажу

Управление камерой в Unity3D, используя мышку

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

Но мы не ищем лёгких путей

Обращаю внимание, что в этой статье я «изобретаю велосипед» с целью познакомиться с элементарными операциями в Unity3D, изучения классов и операций с объектами. Поэтому, если Вы гуру программирования, то можете проходить мимо =)

Подготовка объектов.

Итак, начнём с того, что создадим какой-нибудь объект (например куб) и привяжем на него камеру (она у нас сейчас только одна — главная камера).

После этого создадим скрипт C#, и назовём его MoveMouse

Написание скрипта.

Изначально нужно было определить позицию мышки.

Это оказалось довольно просто — через класс Input и его параметр mousePosition, который содержит три координаты для каждой из осей — x, y и z.

Итак, заведём внутреннюю переменную MousePos, и будем сохранять в неё координаты текущей позиции мышки. Делать это лучше всего перед отрисовкой экрана в событии Update().

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

При этом мы считаем, что камера привязана именно к тому объекту, вокруг которого будет вращаться. Поэтому ищем этот объект через связь «Родитель-потомок».

Незачем это делать каждый раз, а достаточно будет сделать при создании самой камеры на сцене:

Итак, у нас уже есть ссылка на камеру, которую будем крутить, ссылка на объект, вокруг которого будем крутить, и координаты мышки.

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

Узнать состояние клавиш мышки можно через всё тот-же класс Input. Специально для этого у него есть метод GetMouseButton.

Само перемещение камеры будем располагать в событии FixedUpdate():

И наконец, мы подошли к самому интересному — определить угол поворота в зависимости от позиции мышки и повернуть камеру.

Коэффициент поворота определить довольно просто: определяем позицию мышки, отнимаем от неё координату середины экрана, и делим получившееся число на размер экрана (отдельно для оси Х и отдельно для Y).

К примеру, мышка находится на координате 852 по оси Х, а размер экрана по ширине равен 1024. Тогда, согласно формуле:

Угол мы рассчитали, теперь осталось только повернуть камеру.

Сделать это можно, используя метод RotateAround класса transform.

Примечание.

Внимательные читатели могли заметить, что ось, указанная для поворота по горизонтали указана goCamera.transform.up. Честно говоря, я не знаю почему так, но именно так оно работает.

И теперь то-же самое для поворота по вертикали:

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

Пользователи всегда хотят настраиваемые параметры. И чувствительность мышки обычно стоит на одном из первых мест при настройке игры «под себя».

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

Скрипт целиком.

Вот теперь точно всё, и осталось только показать весь скрипт целиком, с моими комментариями =)

Источник

Камера

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

unity как привязать камеру к персонажу. Смотреть фото unity как привязать камеру к персонажу. Смотреть картинку unity как привязать камеру к персонажу. Картинка про unity как привязать камеру к персонажу. Фото unity как привязать камеру к персонажу

Свойства

Свойство:Функция:
Clear FlagsОпределяет, какие части экрана будут очищены. Это удобно при использовании нескольких камер для отрисовки разных элементов игры.
BackgroundЦвет, применяемый для фона после отрисовки всех элементов, в случае отсутствия скайбокса.
###Маска отрезанияВключение или исключение слоёв объектов на рендер этой камерой. Назначение слоёв объектам производится через Inspector.
ProjectionПереключает способность камеры симулировать перспективу.
XКамера будет рисовать объекты в перспективе.
XCamera will render objects uniformly, with no sense of perspective. NOTE: Deferred rendering is not supported in Orthographic mode. Forward rendering is always used.
Size (когда выбран ортографический режим)Размер зоны видимости камеры для ортографического режима.
Field of view (когда выбран режим перспективы)Ширина угла обзора камеры, измеряется в градусах по локальной оси Y.
###Clip Planes (Плоскости отреза)Дистанция, на которой камера начинает и заканчивает рендеринг.
XБлижайшая точка относительно камеры, которая будет рисоваться.
XДальняя точка относительно камеры, которая будет рисоваться.
Normalized View Port RectЧетыре значения, отражающие то, в какой области экрана будет выведено изображение с камеры, в экранных координатах (от 0 до 1).
XНачальная позиция области по горизонтали вида камеры, который будет рисоваться.
YНачальная позиция области по вертикали, где вид камеры будет рисоваться.
W (Ширина)Ширина вида камеры на экране.
H (Высота)Высота вида камеры на экране.
DepthПозиция камеры в очереди отрисовки. Камеры с большим значением будут нарисованы поверх камер с меньшим значением.
###Способ рендераОпции для определения методов рендеринга для камеры.
XКамера использует метод рендеринга, установленный в Player Settings.
Вершинное освещениеВсе объекты рисующиеся этой камерой будут рендериться как Vertex-Lit-объекты.
XВсе объекты будут рендериться с одним проходом на материал.
Deferred Lighting (только в Unity Pro)Все объекты будут рендериться сначала без освещения, а затем будет произведён рендер освещения для всех объектов разом, в конце очереди рендеринга.
Target TextureСсылка на Render Texture, которая будет содержать результат рендеринга камеры. Назначение этой ссылки отключает способность камеры рендерить на экран.
HDRВключение технологии High Dynamic Range.
Target DisplayDefines which external device to render to. Between 1 and 8.

Детали

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

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

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

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

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

Clear Flags

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

Skybox

Solid color

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

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

unity как привязать камеру к персонажу. Смотреть фото unity как привязать камеру к персонажу. Смотреть картинку unity как привязать камеру к персонажу. Картинка про unity как привязать камеру к персонажу. Фото unity как привязать камеру к персонажуОружие отрисовано последним после очистки буфера глубины предшествовавшей камеры.

Не очищать

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

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

unity как привязать камеру к персонажу. Смотреть фото unity как привязать камеру к персонажу. Смотреть картинку unity как привязать камеру к персонажу. Картинка про unity как привязать камеру к персонажу. Фото unity как привязать камеру к персонажуСоздание экрана для двух игроков с помощью Normalized ViewportRectangle

Orthographic

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

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

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

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

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

unity как привязать камеру к персонажу. Смотреть фото unity как привязать камеру к персонажу. Смотреть картинку unity как привязать камеру к персонажу. Картинка про unity как привязать камеру к персонажу. Фото unity как привязать камеру к персонажуИспользование рендертекстуры для создания монитора

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.

Источник

Создание эффекта плавной камеры, следующей за объектом — краткий туториал Статьи редакции

Поэтапное описание реализации эффекта с примером кода.

Пользователь Reddit под ником Awsomelity опубликовал короткий туториал для Unity, в котором показал, как сделать камеру, плавно следующую за объектом. Автор представил код, а также подробно показал все этапа реализации этого эффекта.

На сцене вам понадобится лишь несколько объектов: направленный свет, плоскость, предмет и камера. Сперва нужно создать скрипт.

Затем прикрепите скрипт к камере и откройте его. В этом окне удалите ненужную часть кода.

Затем вам нужно добавить переменную «object» — это объект, за которым следует камера, а также переменную «distanceFromObject» — дистанция камеры относительно объекта. Для этого добавьте следующий код:

Затем нужно добавить функцию «LateUpdate».

Пора добавлять новые переменные: «positionToGo» — переменная, которая указывает на какую позицию переместится камера, «smoothPosition» определяет, насколько плавным будет перемещаться камера. Показатель «t:0.125F» определяет скорость движения камеры — вы можете замедлить или ускорить её, меняя значение. Пример кода:

Затем перетащите камеру, чтобы установить её базовое положение относительно объекта. Когда вы сделаете это, перенесите значение в поле «Distance From Object», которое находится в окне Inspector.

На этом этапе эффект плавной камеры выглядит вот так:

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

Вот так выглядит финальная версия эффекта:

Даже по последней гифке видно, что камера нифига не плавно поворачивает.

Автору стоит почитать и понять то как работает lerp, в его варианте каждый вызов ф-ии LateUpdate будет перемещать камеру на 12.5% от требуемого смещения. И чем дальше и быстрее обьект будет удаляться от камеры тем более вырвиглазно это будет выглядеть.

К тому же, константное значение dt в лерпе делает его fps-независимым => на разных fps, результат будет выглядеть по разному.

Источник

Unity3D: камеры от третьего лица

Камера является одним из самых важных элементов в 3D-игре. Он действует как глаза игрока, позволяя им видеть игровой мир с разных точек зрения. В Unity3D 3D-камера работает так же, как пленочная камера. Его можно панорамировать, наклонять и масштабировать для кадрирования сцен. Из этого туториала вы узнаете, как создавать несколько перспектив камеры от третьего лица.

Для вдохновения или для использования в качестве отправной точки для своей работы ознакомьтесь с некоторыми из самых популярных 3D-моделей на Envato Market. Или получите помощь один на один, выбрав один из сервисов 3D-дизайна и моделирования в Envato Studio.

unity как привязать камеру к персонажу. Смотреть фото unity как привязать камеру к персонажу. Смотреть картинку unity как привязать камеру к персонажу. Картинка про unity как привязать камеру к персонажу. Фото unity как привязать камеру к персонажу

Настройка проекта

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

unity как привязать камеру к персонажу. Смотреть фото unity как привязать камеру к персонажу. Смотреть картинку unity как привязать камеру к персонажу. Картинка про unity как привязать камеру к персонажу. Фото unity как привязать камеру к персонажу

Выполните следующие шаги для настройки проекта:

Создать игрока

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

В сценарии Player добавьте два открытых свойства для движения и скорости поворота. Затем добавьте следующий код в ваш метод Update ():

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *