- Ввод на мобильном устройстве
- Multi-Touch Screen
- Симуляция Мыши
- Акселерометр
- Фильтр низких частот
- Я хочу получить как можно более точные показания акселерометра. Что я должен делать?
- Камера
- Свойства
- Детали
- Способ рендера
- Clear Flags
- Skybox
- Solid color
- Только глубина
- Не очищать
- Clip Planes (Плоскости отреза)
- Маска отрезания
- Normalized Viewport Rectangles
- Orthographic
- Текстура рендера
- Target display
Ввод на мобильном устройстве
На мобильных устройствах класс Input предоставляет доступ к нажатию на экран, акселерометру и географическим/локационным данным.
Доступ к клавиатуре на мобильных устройствах обеспечивается через iOS keyboard.
Multi-Touch Screen
iPhone и iPod способны отслеживать до пяти нажатий на экран одновременно. Вы можете получить статус каждого нажатия на протяжении последнего кадра через массив Input.touches.
Android устройства не имеют определенного лимита на количество нажатий, которое можно отслеживать. Он колеблется от устройства к устройству и может варьироваться от одного-двух нажатий на старых устройствах, до пяти нажатий на некоторых новых.
Каждое нажатие пальцем представлено в структуре данных Input.Touch:
Свойство: | Функция: |
---|---|
fingerId | Уникальный индекс для нажатия. |
position | Позиция нажатия на экран. |
deltaPosition | Изменение позиции на экране с последнего кадра. |
deltaTime | Количество времени, которое прошло с тех пор как изменилось последнее состояние. |
tapCount | The iPhone/iPad screen is able to distinguish quick finger taps by the user. This counter will let you know how many times the user has tapped the screen without moving a finger to the sides. Android devices do not count number of taps, this field is always 1. |
phase | Describes so called “phase” or the state of the touch. It can help you determine if the touch just began, if user moved the finger or if they just lifted the finger. |
Фазы могут быть следующими:
Began | Палец только что прикоснулся к экрану. |
Moved | Палец передвинулся по экрану. |
Stationary | Палец прикоснулся к экрану, но с последнего кадра не двигался. |
Ended | Палец только что оторван от экрана. Это последняя фаза нажатий. |
Canceled | The system cancelled tracking for the touch, as when (for example) the user puts the device to their face or more than five touches happened simultaneously. This is the final phase of a touch. |
Ниже приведен пример скрипта, который выпускает луч там, где пользователь тапает по экрану:
Симуляция Мыши
On top of native touch support Unity iOS/Android provides a mouse simulation. You can use mouse functionality from the standard Input class. Note that iOS/Android devices are designed to support multiple finger touch. Using the mouse functionality will support just a single finger touch. Also, finger touch on mobile devices can move from one area to another with no movement between them. Mouse simulation on mobile devices will provide movement, so is very different compared to touch input. The recommendation is to use the mouse simulation during early development but to use touch input as soon as possible.
Акселерометр
При движении мобильных устройств, встроенный акселерометр сообщает линейное ускорение изменяется вдоль трех основных осей в трехмерном пространстве. Ускорение вдоль каждой оси сообщается непосредственно аппаратным обеспечением как значение G-Force. Значение 1,0 представляет собой нагрузку около +1г вдоль заданной оси, а величина –1,0 представляет –1g. Если вы держите устройство в вертикальном положении (с кнопкой “домой” внизу) перед собой, ось X (положительная) будет по правой стороне, ось Y (положительная) будет направлена вверх, а ось Z (положительная) будет указывать на вас.
Вы можете получить значение акселерометра, путем доступа к свойству Input.acceleration.
Приведенный ниже пример скрипта позволяет двигать объект, используя акселерометр:
Фильтр низких частот
Показания акселерометра могут быть отрывистыми и с шумом. Применив низкочастотную фильтрацию на сигнал, вы сгладите его и избавитесь от высокочастотного шума.
Приведенный ниже скрипт демонстрирует, как применить низкочастотную фильтрацию на показания акселерометра:
Чем больше значение LowPassKernelWidthInSeconds , тем медленнее фильтруется значение, которое будет приближаться к значению входного образца (и наоборот).
Я хочу получить как можно более точные показания акселерометра. Что я должен делать?
Чтение переменной Input.acceleration не означает дискретизацию. Проще говоря, Unity замеряет результат при частоте 60 Гц. и сохраняет его в переменную. На самом деле все немного сложнее — в случае значительной нагрузки на процессор, замеры акселерометра не происходят с постоянными временными интервалами. В результате, система может сделать два замера за один кадр, и один замер за следующий кадр.
Вы можете получить доступ ко всем замерам, выполненным акселерометром в текущем кадре. Следующий код иллюстрирует простое среднее всех событий акселерометра, которые были собраны в течение последнего кадра:
Источник
Камера
Камеры являются устройствами, которые захватывают и отображают мир игроку. Путем настройки и манипулирования камерами, вы можете сделать презентацию своей игры поистине уникальной. Вы можете иметь неограниченное количество камер в сцене. Вы можете настроить рендеринг камерами в любом порядке, на любом месте экрана, либо только в определенных частях экрана.
Свойства
Свойство: | Функция: |
---|---|
Clear Flags | Определяет, какие части экрана будут очищены. Это удобно при использовании нескольких камер для отрисовки разных элементов игры. |
Background | Цвет, применяемый для фона после отрисовки всех элементов, в случае отсутствия скайбокса. |
###Маска отрезания | Включение или исключение слоёв объектов на рендер этой камерой. Назначение слоёв объектам производится через Inspector. |
Projection | Переключает способность камеры симулировать перспективу. |
X | Камера будет рисовать объекты в перспективе. |
X | Camera 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 Display | Defines 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
Это настройка по умолчанию. Пустые участки экрана будут отображать скайбокс текущей камеры. Если текущая камера не имеет скайбокса, то скайбокс будет использован стандартный скайбокс из меню 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
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.
Источник