Как я могу закодировать свою игру для работы над каждым решением Android-устройств? (с единством)

У меня есть игра, которую я сделал в разрешении 480x320 (я установил ее в настройках сборки) в Unity. Но я хотел бы опубликовать свою игру для каждого устройства Android с каждым разрешением. Как я могу это сделать, чтобы сообщить Unity о масштабировании моей игры до разрешения устройства? Можно ли это сделать?

Спасибо заранее!

Ответ 1

Ответ на ваш вопрос во многом зависит от того, как вы реализовали игру. Если вы создали его с использованием графических интерфейсов GUI, то это во многом зависит от того, как вы разместили/размер ваших объектов по сравнению с размером экрана, что делает вещи немного сложными.

Если большая часть вашей игры выполняется с использованием объектов (например, самолетов, кубов и т.д.), то есть два метода, которые я обычно предпочитаю использовать.

1) Первый метод очень прост в реализации, хотя не всегда выглядит слишком хорошо. Вы можете просто изменить соотношение сторон камеры в соответствии с тем, которое вы разработали для своей игры. Итак, в вашем случае, поскольку вы разработали свою игру в 4: 3, вы бы сделали что-то вроде этого:

Camera.aspect = 4f/3f;

Однако, если кто-то играет на экране, предназначенном для 16: 9, игра будет выглядеть искаженной и растянутой.

2) Второй метод не так прост, требуя довольно много работы и расчетов, но даст вам более чистый результат. Если вы используете орфографическую камеру, важно помнить, что независимо от того, какое разрешение экрана используется, орфографическая камера поддерживает высоту на заданной высоте и только изменяет ширину. Например, с орфографической камерой размером 10, высота будет установлена ​​равной 2. Учитывая это, вам нужно будет компенсировать максимально возможную камеру на каждом уровне (например, иметь широкий фон ) или динамически изменить размер орфографии камеры до тех пор, пока его ширина не будет соответствовать тем, что вы создали.

Если вы сделали 3D-игру со стереоскопической камерой, разрешение экрана не должно влиять на то, как она выглядит, но я думаю, что это зависит от игры, поэтому потребуется дополнительная информация.

Ответ 2

То, как я это сделал, - изменить окно просмотра камеры в соответствии с соотношением сторон устройства Подумайте, что вы сделали игру для 800x1280

Вы можете сделать это в любом из script

float xFactor = Screen.width / 800f;
float yFactor = Screen.height  / 1280f;


Camera.main.rect=new Rect(0,0,1,xFactor/yFactor);

и это работает как magic

Ответ 3

Легкий способ сделать это - рассмотреть вашу цель, я имею в виду, если вы делаете игру для Iphone 5, тогда соотношение сторон составляет 9:16 v или 16: 9 h.

   public float targetRatio = 9f/16f; //The aspect ratio you did for the game.
void Start()
{
   Camera cam = GetComponent<Camera>();
   cam.aspect = targetRatio;
} 

Ответ 4

Вот мой script для масштабирования орфографической камеры в 2D-играх

public float screenHeight = 1920f;
public float screenWidth = 1080f;
public float targetAspect = 9f / 16f;
public float orthographicSize;
private Camera mainCamera;

// Use this for initialization
void Start () {

    // Initialize variables
    mainCamera = Camera.main;
    orthographicSize = mainCamera.orthographicSize;

    // Calculating ortographic width
    float orthoWidth = orthographicSize / screenHeight * screenWidth;
    // Setting aspect ration
    orthoWidth = orthoWidth / (targetAspect / mainCamera.aspect);
    // Setting Size
    Camera.main.orthographicSize = (orthoWidth / Screen.width * Screen.height);
}

Ответ 5

Я предполагаю, что это 2D вместо 3D, вот что я делаю:

  1. Создать объект холста
  2. Установите Canvas Scaler на Scale с размером экрана
  3. Установите разрешение ссылок на, например: 480x320
  4. Установите режим соответствия экрана, чтобы соответствовать или высота
  5. Установите соответствие 1, если ваша текущая ширина экрана меньше, 0, если высота меньше
  6. Создать изображение в качестве фона внутри холста
  7. Добавить скрипт соотношения сторон
  8. Установите Aspect Mode на Fit in Parent (чтобы привязка пользовательского интерфейса могла быть где угодно)
  9. Установите соотношение сторон 480/320 = 1,5

И добавьте этот фрагмент в основной метод Canvas 'Awake:

var canvasScaler = GetComponent<CanvasScaler>();
var ratio = Screen.height / (float) Screen.width;
var rr = canvasScaler.referenceResolution;
canvasScaler.matchWidthOrHeight = (ratio < rr.x / rr.y) ? 1 : 0;

Для 3D-объектов вы можете использовать любой из ответов выше

Ответ 6

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

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