Как настроить камеру в юнити 2д под телефон
В этой статье попробуем разобрать метод “свободного” перетаскивания 2D камеры на сцене с помощью мыши либо касаний, после прочтения которой вы узнаете как преобразовывать экранные координаты в координаты мира на сцене, как создавать проекции плоскостей и как управлять движением камеры. Примерный результат работы можно увидеть по анимации ниже.
Проекция
Структура Plane представляет собой проекцию поверхности в пространстве. Этот мнимый объект представляет из себя плоскость бесконечного размера, который находится в определенной точке и повернут в определенную сторону. Зачем нужны какие то проекции вообще? Дело в том, что если мы хотим пускать луч из точки нажатия необходимо иметь поверхность с которой этот луч столкнется, чаще всего такие поверхности делают коллайдерами, но так как на сцене у нас кроме камеры и простого спрайта больше ничего нет, нам необходимо иметь какой то другой объект в который можно пускать луч. Этим объектом и является плоскость Plane.
Камера
Все действия камеры будем обрабатывать в скрипте CameraControl.
- publicsealedclass CameraControl : MonoBehaviour
- privatevoid Start () <>
- privatevoid Update () <>
- >
В методе Start будем брать компонент камеры на объекте, а в методе Update обрабатывать действия мыши и перемещения. Для этого добавим еще пару методов: UpdateInput, где будем обрабатывать действия мыши либо касаний, и метод UpdatePosition, где будем совершать само перемещение камеры.
- publicsealedclass CameraControl : MonoBehaviour
- privatevoid Start () <>
- privatevoid Update ()
- UpdateInput ();
- UpdatePosition ();
- >
- privatevoid UpdateInput () <>
- privatevoid UpdatePosition () <>
- >
Для обработки действий мыши добавим еще несколько отдельных методов: OnPointDown который будет вызываться при нажатии мышкой либо касании экрана, OnPointMove метод, где будем обрабатывать перемещении мыши по экрану и метод OnPointUp который будет срабатывать при завершении перетаскивания мыши. Также каждый этот метод будет принимать параметры позиции мыши в виде Vector2.
- publicsealedclass CameraControl : MonoBehaviour
- privatevoid Start () <>
- privatevoid Update ()
- UpdateInput ();
- UpdatePosition ();
- >
- privatevoid UpdateInput () <>
- privatevoid UpdatePosition () <>
- privatevoid OnPointDown ( Vector2 mousePosition ) <>
- privatevoid OnPointMove ( Vector2 mousePosition ) <>
- privatevoid OnPointUp ( Vector2 mousePosition ) <>
- >
Теперь необходимо в методе UpdateInput обработать события мыши.
Еще добавим переменную камеры, в которую мы будем помещать сам компонент Camera в методе Start.
И так задача скрипта заключается в следующем: необходимо перемещать камеру в том направлении в котором мы двигаем мышкой либо касанием по экрану. Так как мы уже обрабатываем действия мыши в трех методах OnPointDown, OnPointMove и OnPointUp, необходимо экранные координаты перевести в координаты сцены, то есть мировые, для чего нам и понадобятся рейкасты и проекция Plane. Новый метод GetWorldPoint будет принимать экранные координаты мыши и переводить их в мировые.
При работе в орфографическом режиме на камере направление чаще всего будет forward, то есть туда же куда смотрит камера. Проекция готова, теперь необходимо пустить в нее луч с помощью метода Raycast и получить мировые координаты точки.
Готово, теперь переходим к обработке действий мыши. В методе OnPointDown будем указывать точку отсчета координат движения мыши.
Во время нажатия левой кнопки мыши по экрану, получаем мировые координаты в в переменной tempCenter, это и станет точкой отсчета перемещения мыши. Теперь опишем действия при окончании перемещения мыши в методе OnPointUp.
Здесь мы просто задаем переменно isDragging значение false, и переходим в метод OnPointMove, где будем обрабатывать движения мыши по экрану.
Для начала проверим условие, что мы сейчас совершаем перетаскивание камеры мышкой используя переменную isDragging. Далее определим текущую мировую координаты позиции мышки с помощью метода GetWorldPoint.
Для того чтобы камера не двигалась при минимальном движении мышки, добавим новое условие, в котором укажем минимальное расстояние для совершения действия перемещения.
После чего можно определить направление в котором необходимо будет переместить камеру с помощью метода normalized.
Перемещать камеру будем в методе UpdatePosition используя текущую позицию камеры, направление движения и чувствительность.
Камеры являются устройствами, которые захватывают и отображают мир игроку. Путем настройки и манипулирования камерами, вы можете сделать презентацию своей игры поистине уникальной. Вы можете иметь неограниченное количество камер в сцене. Вы можете настроить рендеринг камерами в любом порядке, на любом месте экрана, либо только в определенных частях экрана.
Свойства
Детали
Камеры очень важны для демонстрации вашей игры игроку. Они могут быть изменены, заскриптованы, наследованы для получения различных визуальных эффектов. Для паззла вы можете сделать камеру статичной и охватывающей обзором весь паззл. Для шутера от первоого лица вы можете сделать камеру дочерней по отношению к игроку и разместить её на уровне глаз персонажа. Для гоночный игры вы можете закрепить камеру позади автомобиля и заставить её следовать за ним.
Вы можете создать несколько камер и назначить каждой свою глубину(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.
"
Условия использования кода
Код я писал с нуля, прямо во время написания статьи, так что у вас не должно быть проблем с повторением моих шагов. Кодом можно свободно пользоваться, редактировать его, улучшать.
Условие только одно: при использовании кода (в том числе модифицированного) в коммерческом проекте необходимо указать ссылку на автора (т.е. fischer — меня).
Код примера, используемого в статье, можно скачать отсюда.
Для начала создайте пустую сцену без объектов. Удалите объект MainCamera, добавленный по умолчанию.
- Создать пустой объект (GameObject -> Create Empty).
- Выбрать его и добавить ему компонент Camera (Component -> Rendering -> Camera).
Для 2d-графики положение спрайтов в пространстве не важно. На много важнее, как спрайты друг друга перекрывают. Камера поддерживает два режима (вида проекции): перспективный (Perspective) и ортогональный (Orthographic). Первый используется во всех 3d-играх: объекты, расположенные дальше от камеры, выглядят меньше. Это почти то, как мы видим наш мир. Нам нужен второй режим, Orthographic – объекты всегда рисуются реального размера и перекрывают друг друга в зависимости от расстояния до камеры. Идеальный режим камеры для 2d и изометрии. В окне Inspector в компоненте Camera вновь созданного объекта в поле Projection выберите Orthographic. При этом некоторые параметры (соответствующие Perspective-режиму) пропадут, но появится параметр Size – размер ортогональной камеры.
Теперь настроим камеру так, чтобы каждый пиксель на экране соответствовал одной единице (unit) пространства в Unity. В дальнейшем это будет удобно при перемещении спрайтов и задании их размеров в пикселях. Для этого размер ортогональной камеры (параметр Size) должен равняться половине высоты экрана в пикселях. Например, если это экран iPhone 3G в портретном режиме, разрешение экрана которого 320x480, то Size = h/2 = 480/2 = 240.
Для того чтобы каждый раз не делать всего этого вручную, напишем скрипт:
- Автоматически этому объекту добавится компонент Camera. За это отвечает атрибут RequireComponent.
- Выполнится функция Awake. За это отвечает атрибут ExecuteInEditMode, который заставляет выполняться скрипты прямо в редакторе.
- В результате вызова этой функции камера станет ортогональной.
- Ее размер будет установлен таким, чтобы один пиксель на экране соответствовал одной единице Unity (вызов функции SetUniform). Это будет выполняться автоматически для любого экрана.
Улучшения
- Если размер экрана может меняться во время выполнения (поворот экрана смартфона, смена разрешения пользователем), неплохо бы автоматически менять размер камеры. Это можно делать в функции LateUpdate.
- Если освещение использоваться не будет (как и бывает в большинстве 2d-игр), рекомендую в настройках проекта (File->Build Settings->Player Settings->Other Settings) установить параметр Rendering Path в значение Vertex Lit. Это самый простой способ отрисовки объектов (каждый объект за один шаг для всех источников света), поддерживаемый большинством устройств. В моем случае для iOS-устройств это дало скачок в производительности. То же самое можно сделать для конкретной камеры. По умолчанию камера используют значение из Player Settings.
Спрайт — прямоугольник с наложенной на него текстурой. Договоримся, что он по умолчанию будет расположен в плоскости XOY. Тогда за взаимное расположение спрайтов (слои) будет отвечать координата Z.
Подсказка: для того, чтобы легче было увидеть спрайты, повернуть координатную ось можно щелкая на осях сцены, справа вверху, пока они не примут надлежащий вид (в нашем случае положение Back).
Спрайт будет задаваться несколькими параметрами:
-
zero – положение нулевой точки спрайта относительно его нижнего левого угла. Измеряется в долях спрайта, т.е. (0.5, 0.5) – это центр спрайта. Нужен для правильного смещения спрайта в не зависимости от того, как он расположен на текстуре.
Подсказка: чтобы в редакторе увидеть на спрайте оси поворота/перемещения именно в нулевой точке, а не в центре (по умолчанию), необходимо на элементе управления Transform Gizmo Toggles панели инструментов выбрать Pivot.
- списком вершин,
- списком индексов вершин, составляющих вершины треугольников, из которых состоит прямоугольник,
- списком соответствующих вершинам текстурных координат.
Чтобы нарисовать меш, понадобятся компоненты MeshRenderer и MeshFilter. Первый компонент содержит ссылки на материалы текстур для спрайта. Второй из них содержит объект MeshFilter.mesh, который он и рисует. Для изменения спрайта нужно, соответственно, изменять этот объект. Сам спрайт реализуется через компонент SampleSprite. Для того чтобы у спрайта эти два компонента были всегда, добавим ему соответствующие атрибуты RequireComponent:
Атрибут AddComponentMenu добавляет в меню Component редактора пункт Sprites->Sample Sprite. Используя его можно добавить к любому объекту Unity наш компонент SampleSprite.
Для того чтобы можно было видеть спрайт во время редактирования, атрибут ExecuteInEditMode позволяет вызывать функции Awake и Start класса SampleSprite прямо в редакторе. Внутри этих функций создается меш:
При инициализации меша нужно учитывать флаг pixelCorrect. Проверяем, во сколько раз высота экрана отличается от размера камеры — во столько раз нужно увеличить меш, учитывая, что при нормальном варианте (высота экрана равна удвоенному размеру ортогональной камеры) размер меша равен размеру области текстуры для спрайта:
NonNormalizedTextureCoords – текстурные координаты в пикселях. Определяются через нормализованные текстурные координаты (параметр спрайта) и размер самой текстуры TextureSize:
Заметьте, что меш инициализируется в функции Start, потому что при его инициализации используется информация из камеры, а она инициализируется нами в Awake, т.е. в Start такая информация уже доступна для других объектов (в Unity сначала вызываются все Awake, затем все Start, но порядок вызова одной и той же функции для различных объектов не определён). Так же в этом примере используется Camera.main — главная камера на сцене. Т.е. наша камера должна быть помечена тегом MainCamera.
В принципе, на этом этапе со спрайтом уже можно работать. Для этого к любому объекту нужно прикрепить компонент SampleSprite (например, через меню Component или перетянув на него файл скрипта). Автоматически к нему добавятся компоненты MeshFilter и MeshRenderer. Теперь если перетянуть на этот объект материал текстуры (или текстуру, а материал создастся автоматически), и настроить параметры, то можно будет увидеть готовое 2d-изображение.
Настройка параметров текстуры
- чтобы движение спрайта было плавным, чтобы при изменении размеров спрайт выглядел сглаженным, необходимо параметр экспорта текстуры Filter Mode установить в Bilinear или Trilinear);
- установите Texture Type в значение GUI;
- не забудьте убрать компрессию, установив значение параметра Format в Truecolor.
Освещение
- В версии 3.3 есть группа шейдеров Unlit с отключенным освещением. Для спрайтов с прозрачностью подойдет шейдер Unlit->Transparent, для заднего фона Unlit->Texture.
- В старых версиях Unity можно использовать шейдер Transparent->Diffuse. Но тогда надо не забыть в Edit->Render Settings проставить Ambient Light в белый, чтобы все спрайты были натурального цвета. Иначе они будут затемненными, потому что по умолчанию в качестве Ambient Light стоит оттенок серого.
- Можно написать свой шейдер, в котором освещение будет отключено. О том, как это сделать, можно посмотреть в официальном пособии по шейдерам Unity.
- Тег EditorOnly.
- Создание редакторов игровых объектов в Инспекторе Компонентов путем наследования от класса Editor.
- Создание окон редактора путем наследования от класса EditorWindow.
Внимание: все скрипты, связанные с редактором, должны располагаться в папке Assets/Editor.
Редактируемые параметры добавим в класс SampleSprite и сделаем их условно-компилируемыми (чтобы этот код не попал в конечный продукт, а работал только в редакторе):
В данном случае параметр Zero измеряется в тех же единицах, что и size, а TextureCoords – в пикселях текстуры.
Уменьшение числа Draw Calls
Некоторые улучшения кода
- Конечно, лучше избавится от постоянного вызова функции CreateMesh, который приводит к созданию нового меша (в данном случае это несущественно, т.к. все происходит в редакторе, а в реальном приложении спрайт будет создаваться один раз и больше не будет меняться). Вместо этого достаточно изменять параметры Mesh.vertices, Mesh.uv, Mesh.triangles. Не забывайте вызвать mesh.RecalculateBounds(), если был изменен массив вершин vertices. Если же изменен массив triangles, то эта функция вызовется автоматически.
- Вместо Camera.main лучше задавать камеру как параметр скрипта.
Как делать анимации
Как делать полноценные спрайтовые анимации можно посмотреть на примере SpriteManager.
В нашей игре Papa Penguin спрайтовых анимаций не было. Вместо этого, например, пингвин скреплялся из частей по нулевым точкам спрайтов, а движение этих частей осуществлялось с помощью компонента Animation. Этого вполне хватило. В Unity это очень мощный инструмент. В анимацию, например, можно вставлять даже вызовы функций из скриптов.
2d-физика
- Сделать объект триггером (флажок Is Trigger).
- Позволить объекту подвергаться физическим воздействиям. Для этого к объекту можно дополнительно прикрепить компонент Component->Physics->Rigidbody.
Физика Unity3d предлагает также другие богатые возможности: силы, приложенные к определенным точкам объекта, гравитация, точки соединения (Fixed Joint, Spring Joint). Используя все это, можно создать неплохую игру, основанную на физике.
-
– простая платная система для создания 2d-анимаций в Unity (на момент написания статьи плагин стоил $35). – система классов для создания спрайтовых анимаций. Поддерживает отрисовку спрайтов за один Draw Call, менеджер спрайтов, анимации и атласы. Довольно неудобен в настройке, но если бюджет ограничен, вполне пригоден для использования. (Sprite Manager 2) – платный менеджер спрайтов с поддержкой редактора. Поддерживает множество полезных функций в дополнение к бесплатной версии: создание атласов, использование возможностей редактора для выделения области текстуры, автоматического создания анимаций и многое другое. Если не хочется реализовывать спрайты вручную, то SM2, на мой взгляд – самый лучший выбор. Стоит $150 с 60-дневной возможностью вернуть деньги назад, если не понравится. , $50. Этот плагин не совсем спрайтовый, а скорее векторный. Плагин обладает множеством интересных возможностей:
- создание 2d-мешей и линий на основе кривых Безье;
- контуры объектов различной ширины;
- заливка одним цветом/градиент;
- текстурированные объекты;
- и многое другое.
Всего того, о чем я написал, вполне хватит для написания своей 2d-системы и последующего ее использования при создании двухмерной игры. Трехмерность движка и поддержка физики предлагает нам новые богатые возможности, а высокая скорость разработки на Unity (что является большим плюсом движка) позволит сократить затраты.
Заполняем нужные поля (я собираюсь делать игрушку для своего Андроида с разрешением 320х480).
Теперь нам нужно создать и настроить камеру, чтобы в ней все спрайты отображались пиксель в пиксель.
Идем в настройки камеры(по умолчанию в пустом проекте камера уже есть).
Выставляем Projection в Orthographic. Size выставляем в половину высоты 480 / 2 = 240
Сейчас окно Unity3d выглядит так:
Теперь добавим спрайт.
Появился прямоугольник. Повернем его к нам лицом:
Rotation X = 90, Y = 180. Теперь нужно натянуть на него текстуру. Например, такую:
Во вкладке Project создаем папку Textures и перетаскиваем туда из проводника текстуру. У текстуры установим Filter Mode в Point (чтобы текстура не размазывалась) и Format в True Color.
Теперь создаем материал. Во вкладке Project создаем папку Materials, затем нажимаем кнопку Create->Material. Созданный материал положим в папочку Materials. У материала пока одно свойство Shader. Выбираем Transparent->Diffuse. Теперь нашу текстуру перетаскиваем в окошко для текстуры материала. Оп! На шарике появилась наша текстура. Теперь материал перетаскиваем на наш спрайт. Опа! И на нем появилась тектура, И сразу прозрачная! Сейчас мое окно выглядит так:
Только мы видим, что текстура темновата. Не беда! Добавим источник света. Закладка Hierarchy->Create->Directional Light. Созданный источник света светит куда-то вбок. Направим его на спрайт: Rotation X = 0, Y = 0, Z = 0. Сразу стало ярче. Теперь замечаем, что на игровом экране наш спрайт занимает неприлично мало места. Его срочно нужно увеличить, причем так, чтобы он занимал на экране 256х256 пикселей(это размер текстуры). Проведем эксперимент: нажимаем кнопку воспроизведения наверху окна. Появляется окно игры. Делаем скриншот и узнаем, что при масштабе 1 наш спрайт занимает на экране 10х10 пикселей. Значит, нам нужно выставить масштаб 256 / 10 = 25.6.
Scale X = 25.6, Y = 1, Z = 25.6.
Запускаем игру еще раз:
Position X = 160, Y = 240
Теперь наш спрайт с координатами X = 0, Y = 0 занял место с левом нижнем углу:
Настройка IP камеры
Доброго Всем времени суток! Прошу помочь в следующей проблеме : Имеются в наличие ip-camer'ы.
Настройка камеры в three.js
Здравствуйте, у меня вот какая проблема, 3d модель во весь рост, а нужно увеличить ее и настроить.
настройка камеры
у меня 2д игра, и мне нужно что бы камера была привязана к игроку только по оси х, то есть что бы.
Настройка IP камеры
Добрый день. Камера Vesta VC5200. Необходимо настроить запись по движению на жёсткий диск.
Благодарю, данный урок я ранее находил, но он не решил полностью мою проблему так как в уроке нет фона, а у меня есть. Не совсем понятно, как решать вопрос, с фоновым изображением который в разрешении 1080 на 1920 корректно отображается, но если включаю разрешение хонора 1080 на 2340, то фоновое изображение сжимается по бокам и выглядит ужасно. Есть ли возможность как-то обрезать фоновое изображение чтобы оно не сужалось если попадается разрешение экрана как на хонор?
Решение
Черные полосы/обрезка изображения вызваны тем, что изображение пытается сохранить соотношение сторон из-за использования средства aspect ratio fitter.
Он отлично работает в форматах 576x1024, 720x1280, 1440x2560 и т.д., Поскольку формат изображения такой же, как у исходного изображения (или холста, который составляет 1080x1920), с соотношением сторон 9:16.
Если вы не хотите, чтобы черные полосы или часть изображения обрезались, вам нужно растянуть/обрезать изображение до нового соотношения сторон (например, соотношение сторон 1: 2, если вы хотите 1080x2160)
Чтобы сделать это, вам нужно удалить установщик соотношения сторон и убедиться, что на вашем компоненте изображения отмечен флажок Сохранять preserve aspect. А затем сделать изображение всегда заполнить холст/размер экрана. Например, сделайте background GameObject дочерним элементом вашего холста, добавьте компонент image к background и установите width и height преобразования такими же, как у Screen.currentResolution (из класса Screen)
Это, однако, будет растягивать ваше изображение в направлении, в котором оно не соответствует соотношению сторон (если исходное изображение 9:16 (1080x1920), и вы хотите, чтобы оно отображало 2: 1 (2160x1920), оно растянется в два раза по размеру. на оси х, что приводит к искаженному и в основном уродливому изображению). Чтобы противостоять этому, вы, вероятно, захотите сделать отдельные изображения для нестандартных форматов изображения или сделать изображение, которое не выглядит плохо при растяжении.
GLSL настройка камеры
Здравствуйте! Изучая GLSL столкнулся с проблемой некорректного отображение сцены. Раньше при.
Настройка параметров IP камеры
Здравствуйте. Не знал в какой пункт ещё определить свой вопрос. Подскажите пожалуйста, мне бы.
Настройка вэб-камеры
У меня на мониторе встроенная камера. Когда я разговариваю по Скайпу, мне-бы хотелось ее.
Настройка CMS камеры
Здравствуйте! Извините если тему не в том разделе создал. Подскажите, камеры работают через.
Настройка web-камеры в Skype
Как осуществить настройку web-камеры в Skype?
Читайте также: