Чи можна Unity 2D використовувати для створення піксельних ігор?


16

Я дивлюся на нові 2D-функції, представлені в Unity 4.3, і я думаю, що я можу щось пропустити.

Мені здається, вони створені для 2D-ігор з високою роздільною здатністю, де масштабування спрайтів нормально, але це не підходить для піксельних арт-ігор.

Спрайт піксельних зображень призначений для відображення на екрані рівно 1: 1 пікселів: масштабування знищує його (лінійне масштабування - виняток, тобто ви можете масштабувати його 2х, 3х, 4х і т.д.).

Однак я не знайшов способу "просто відобразити його як є", мабуть, Unity наполягає на масштабуванні його до тієї роздільної здатності, яку він вважає за потрібну: я можу керувати параметром Camera.size та параметром спрайту "пікселів до одиниць". , але мені не вдалося отримати цей результат.


1
Якщо я не помиляюся, гра "Organ Trail" була зроблена повністю на Unity3d, до 4.3.
felipe

Відповіді:


19

У цій статті дано кілька корисних пояснень, навіть якщо це вийшло до появи 4.3:

Якщо ви збираєтеся виглядати "піксельним мистецтвом", то ортографічний розмір камери має вирішальне значення; це найскладніша частина цвяхів 2D в Unity.

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

Згадаймо, що твій квадроцикл спрайта - 1 одиниця в бік. Це означає, що ортографічний розмір говорить про те, скільки спрайтів можна скласти вертикально у вікні перегляду (розділене на 2).

Для того, щоб зображення пікселя виглядало чисто, вам потрібно забезпечити, щоб кожен піксель текстури спрайта справляв 1: 1 на дисплей вікна перегляду. Ви не хочете, щоб вихідні пікселі були пропущеними або подвоєними, або їхні спрайти будуть виглядати спотвореними та "брудними". Трюк у забезпеченні цього співвідношення 1: 1 - встановити ортографічний розмір, який відповідає вашій вертикальній роздільній здатності екрана, розділеній на висоту пікселя спрайта.

Скажімо, ви працюєте у форматі 960x640 і використовуєте спрайти 64x64. Розділення вертикальної роздільної здатності екрана (640) на висоту пікселя спрайта (64) дає 10, кількість 64 спрайтів 64х64, які можна скласти вертикально в 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;


5
Ще одна корисна річ - встановити для фільтрування текстури значення «Точка».
felipe

@Felipe гарний момент: я забув про це, тому що вже зрозумів це.
o0 '.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.