Можно ли использовать Unity 2D для создания пиксельных игр?

16

Я смотрю на новые 2D-функции, представленные в Unity 4.3, и думаю, что мне чего-то не хватает.

Мне кажется, они предназначены для 2D-игр с высоким разрешением, где масштабирование спрайтов в порядке, но не подходит для игр с пиксельной графикой.

Спрайт в пиксельной графике предназначен для отображения на экране ровно 1: 1 пикселей: масштабирование уничтожает его (линейное увеличение - исключение, т.е. вы можете масштабировать его 2x, 3x, 4x и т. Д.).

Однако я не нашел способа «просто отобразить его как есть», по-видимому, Unity настаивает на том, чтобы масштабировать его до любого разрешения, которое он сочтет нужным: я могу управлять параметром Camera.size и параметром «пикселей в единицах» в спрайте. , но мне не удалось получить этот результат.

о0' .
источник
1
Если я не ошибаюсь, игра "Organ Trail" была сделана полностью на Unity3d, до 4.3.
Фелипе

Ответы:

19

Эта статья дает некоторые полезные объяснения, даже если это было до выхода 4.3:

Если вы ищете «пиксельную графику», то орфографический размер камеры имеет решающее значение; это самая сложная часть гвоздя 2D в Unity.

Размер орфографии показывает, сколько мировых единиц содержится в верхней половине проекции камеры. Например, если вы установите орфографический размер 5, то вертикальные экстенты области просмотра будут содержать ровно 10 единиц мирового пространства. (Горизонтальные экстенты зависят от соотношения сторон дисплея.)

Напомним, что ваш спрайт-четверка находится на 1 единицу в сторону Это означает, что размер орфографии говорит вам, сколько спрайтов вы можете сложить вертикально в окне просмотра (деленное на 2).

Чтобы рендеринг пиксель-арта выглядел чисто, вам нужно убедиться, что каждый пиксель исходной текстуры спрайта отображается 1: 1 на отображение в окне просмотра. Вы не хотите, чтобы исходные пиксели были пропущены или удвоены, иначе ваши спрайты будут выглядеть искаженными и «грязными». Хитрость в обеспечении этого соотношения 1: 1 состоит в том, чтобы установить ортогональный размер, который соответствует вашему вертикальному разрешению экрана, деленному на высоту пикселя спрайта.

Допустим, вы работаете с разрешением 960x640 и используете спрайты 64x64. Разделив разрешение экрана по вертикали (640) на высоту пикселя спрайта (64), получим 10, число спрайтов 64x64, которые могут быть вертикально сложены в 640 пикселей. Помните, что орфографический размер составляет половину высоты, поэтому ваш целевой орфографический размер в этом случае будет 5 (половина от 10). Это должно выглядеть так:

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

Переменное разрешение

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

// set the camera to the correct orthographic size
// (so scene pixels are 1:1)
s_baseOrthographicSize = Screen.height / 64.0f / 2.0f;
Camera.main.orthographicSize = s_baseOrthographicSize;

Хотя это простое исправление, у него есть недостаток: с уменьшением разрешения экрана вы будете видеть все меньше и меньше мира, а спрайты будут занимать все больше и больше экрана. Это является следствием сохранения соотношения 1: 1 между пикселями источника и экрана: спрайт 64x64 занимает больше видимого пространства при 640x480, чем при 1920x1200. Является ли это проблемой или нет, зависит от потребностей вашей конкретной игры.

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

(некоторый акцент добавлен)

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


TL; DR :cameraSelf.orthographicSize = screenH / (float)spriteSize / 2f;

о0' .
источник
5
Еще одна полезная вещь - установить фильтрацию текстуры на «Точка».
Фелипе
Хороший вопрос @Felipe: я забыл об этом, потому что я уже понял это.
о0 '.