Как я могу закодировать свою игру для работы над каждым решением 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, вот что я делаю:
- Создать объект холста
- Установите Canvas Scaler на Scale с размером экрана
- Установите разрешение ссылок на, например: 480x320
- Установите режим соответствия экрана, чтобы соответствовать или высота
- Установите соответствие 1, если ваша текущая ширина экрана меньше, 0, если высота меньше
- Создать изображение в качестве фона внутри холста
- Добавить скрипт соотношения сторон
- Установите Aspect Mode на Fit in Parent (чтобы привязка пользовательского интерфейса могла быть где угодно)
- Установите соотношение сторон 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, который автоматически корректирует расстояние между камерами, поэтому у вас никогда не будет искажения или сокращения независимо от того, какое портативное устройство вы используете.