Проблеми з вирішенням при перенесенні гри Unity на Android


9

Отже, я вперше переношу гру на Android в Unity3D. І я зіткнувся з кількома проблемами по дорозі. Моя поточна проблема полягає в тому, що рішення не здається правильним, воно зрізає краї екрана, і мої зупинки прокрутки для прокрутки екрана вліво / вправо більше не знаходяться в потрібному місці.

Провівши трохи досліджень, багато людей кажуть, що вам потрібно зробити свою гру Resolution Independent, щоб мати можливість працювати на всіх Android / Iphone / Ipad. Це правда? Якщо так, то як мені це робити? Якщо ні, то як я можу допомогти виправити роздільну здатність, щоб після порту на мобільні пристрої це виглядало правильно?

EDIT: Я все ще не маю того, що мені потрібно, резолюції все ще не працюють належним чином навіть із кодом та підказками, переліченими нижче. Мені потрібен певний спосіб, щоб роздільна здатність була налаштована на основі пристрою. З якоїсь причини, коли я намагаюся отримати дозвіл пристрою за допомогою коду Mungoid, він повертає 0x0


1
Вам потрібно буде пройти будь-який біт коду, який передбачає певну роздільну здатність екрана, і змінити його, щоб він міг приймати поточну роздільну здатність екрана і щось робити з ним. Залежно від того, що ви робите та як, не існує рішення, яке відповідає всім розмірам.
Тетрад

Що стосується конкретики, це питання детально описується (на цьому сайті є багато питань) gamedev.stackexchange.com/questions/51/…
Тетрад

Так, в основному, що Намар сказав: "Переконайтеся, що ви розміщуєте все із співвідношеннями. Наприклад, панель здоров'я розміщуватиметься на 80% від ширини екрана з 10% ширини екрана для його горизонтальної шкали", так як я можу виправити посилання конкретні ділянки у просторі? Моя прокрутка екрана залежить від конкретних областей у світовому просторі, але це, схоже, псується із змінами роздільної здатності.
Тімоті Вільямс

Чи можете ви бути більш конкретними щодо вашої проблеми? Ви кажете, що роздільна здатність "не здається правильною", і вона "все ще вимкнена" - але роздільна здатність екрана, як правило, є фіксованою властивістю пристрою. Тож не роздільна здатність неправильна, а спосіб відображення на екрані. Якщо ви робите припущення про те, наскільки широкий і високий екран, у вас завжди будуть проблеми на різних пристроях та співвідношеннях сторін.
Килотан

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

Відповіді:


7

Проблема, з якою ви стикаєтесь з Android, полягає в тому, що кожен інший пристрій має свій розмір екрана, роздільну здатність та щільність пікселів. Якщо ви хочете, щоб ваша гра виглядала однаково на всіх пристроях, вам належить багато роботи і, ймовірно, ніколи не будете задоволені результатами. Або гра відображатиметься розтягнутою на широкоекранних дисплеях, або стискається на нешироких екранах. Я пропоную вам вирішити, що по-справжньому важливо, і дозволити що-небудь ще трохи ковзати.

Без будь-яких знімків екрана чи знань, що це за гра та як вона виглядає, ми можемо всі роздумувати над рішеннями, але ми не маємо конкретного напрямку, щоб дати тобі конкретні поради.

У Unity ви можете отримати доступ до розмірів поточного екрану за допомогою класу Screen : Screen.widthта Screen.height(серед інших властивостей). Потім ви можете змінити співвідношення сторін камери , щоб змінити те, що видно на екранах різного розміру, виходячи з розмірів екрана та вашого особистого очікування того, що має бути видно.

Якщо вам потрібно переконатися, що будь-які HUD-дисплеї масштабуються належним чином, ви можете це зробити, змінивши матрицю перетворення GUI на основі розмірів екрана в кожній OnGUI()функції. Я робив це раніше, створивши цей простий скрипт і приєднавши його до всього, що відображав елементи GUI, які я хотів масштабувати:

//GUI values in code are assigned based on an 800x600 screen
private var nativeWidth : float = 800.0f;  
private var nativeHeight : float = 600.0f;
private var guiMatrix : Matrix4x4;

function Start () 
{
    var scale : Vector3 = Vector3(Screen.width / nativeWidth, 
                                  Screen.height / nativeHeight,
                                  1.0f);
    guiMatrix = Matrix4x4.TRS(Vector3.zero, Quaternion.identity, scale);
}

function GetGUIMatrix() : Matrix4x4
{
    return guiMatrix;
}

Потім у фактичних OnGUI()функціях я відразу встановлюю матрицю перетворення:

function OnGUI()
{
    GUI.matrix = guiScale.GetGUIMatrix();
    /* Everything Else */
}

Встановлення співвідношення сторін камери на основі ширини та висоти екрану не допомагає, якщо телефон вертикальний, він взагалі не відображається, а коли телефон горизонтальний, він показує точно так само, як і раніше. Гра розбита на три секції, ви плавно прокручуєте між секціями пальцем (як у Angry Birds), ось малюнок того, як має виглядати ліва сторона. І середина . Ось ліва сторона, коли мій телефон тримається вертикально ,
Тімоті Вільямс

А ось горизонтально . Сподіваюсь, ці фотографії можуть допомогти, це вперше я переходжу з Unity на Android або навіть роблю гру для Android. Я трохи загубився.
Тімоті Вільямс

Судячи з (моєї інтерпретації) ваших пояснень та ваших фотографій, проблема не є вирішенням; ваша камера не знаходиться в такому місці, яке, можливо, може відображати все, що ви хочете, на маленькому екрані. Зменшіть рівень або зменшіть камеру назад, щоб показати щось чи щось. Я б запропонував встановити вікно гри на набагато менший розмір, щоб відображати розмір фактичного пристрою замість розміру 1230x530ish, який ви маєте зараз, щоб ви могли відчути те, що ви побачите, коли натискаєте на нього.
хаосТехнік

Проблема в тому, що я вже значно зменшив камеру. Якщо ця проблема буде тривалою, як я можу точно врахувати різні екрани та розміри та змінити це?
Тімоті Вільямс

@TimothyWilliams, ви, ймовірно, могли щось розробити, вибравши мінімальну роздільну здатність (800x600 чи щось), з якою працює ваша гра. Потім використовуйте Screen.widthта .heightв тандемі з Camera.fieldOfViewта Camera.aspectдля відтворення однакового виду на довільних розмірах екрана. Було б просто потрібен якийсь трюк, щоб конкретно розібратися, як це зробити.
хаосТехнік

0

ви можете спробувати щось подібне та застосувати це. Я б здогадався, що мобільний пристрій повинен повертати лише одну роздільну здатність.

function Start()
{
    var resolutions : Resolution[] = Screen.resolutions;
    // Print the resolutions
    for (var res in resolutions) {
        print(res.width + "x" + res.height);
    }
    // Switch to the lowest supported fullscreen resolution
    Screen.SetResolution (resolutions[0].width, resolutions[0].height, true);
};

Ознайомтесь також з додатковою інформацією про Екран у єдності http://unity3d.com/support/documentation/ScriptReference/Screen.html


Це не допомогло мені, резолюція все ще вимкнена.
Тімоті Вільямс

Він повертає "0x0" на моєму Android чомусь ...
Тімоті Вільямс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.