Подтвердить что ты не робот

Как работать с различными разрешениями экрана

Я использую Unity 4.3.3 для своей игры. Я делаю игру для устройств Android и iOS. Поскольку я довольно новичок в единстве, я не могу найти способ работать с различным разрешением экрана. Я использую С# для своих скриптов.

Я хочу, чтобы моя игра запускалась в полноэкранном режиме. Я тестировал его на iPad 2, и он работает идеально, но для iPhone 4 стороны обрезаны, а для iPhone 5 они обрезаются еще больше. Каково решение? Какой вариант выбрать в настройках проигрывателя > iOS > OtherSettings > Target Resolution?

4b9b3361

Ответ 1

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

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

Camera.aspect = 4f/3f;

Просто имейте в виду, что это исказит игру по разным пропорциям.

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

Компоненты GUI проще реализовать, просто устанавливая их положение в зависимости от разрешения экрана везде, где это необходимо. Например, если вы хотите, чтобы в верхнем правом углу появилась кнопка, вы просто устанавливаете ее положение на что-то вроде position = new Vector2(Screen.width - 50, 50);

EDIT: поскольку вы упомянули устройства, которые вы использовали, я немного искал, какое соотношение сторон использует каждый: Ipad2 = 4: 3, Iphone4 = 3: 2 и Iphone5 = 16: 9

Поскольку вы сказали, что он отлично смотрится на Ipad2, я предполагаю, что вы разработали свою игру, чтобы использовать соотношение сторон 4: 3, поэтому вы называете "обрезание" именно тем, что ваша орфографическая камера расширилась. Решение состоит в том, чтобы использовать один из двух описанных выше методов.

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

Ответ 2

Возможно, вам захочется попробовать захватить разрешение устройства, используя Camera.ScreenWidth и Camera.ScreenHeight.

Затем сделайте некоторую математику, чтобы вычислить разницу с имеющейся у вас разрешением и применить ее к родительскому объекту.

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

Ответ 3

Если ваша цель - получить предыдущую ширину:

[RequireComponent(typeof(Camera))]
public class ResizeCamera : MonoBehaviour 
{
    private float   DesignOrthographicSize;
    private float   DesignAspect;
    private float   DesignWidth;

    public  float   DesignAspectHeight;
    public  float   DesignAspectWidth;

    public void Awake()
    {
        this.DesignOrthographicSize = this.camera.orthographicSize;
        this.DesignAspect = this.DesignAspectHeight / this.DesignAspectWidth;
        this.DesignWidth = this.DesignOrthographicSize * this.DesignAspect;

        this.Resize();
    }

    public void Resize()
    {       
        float wantedSize = this.DesignWidth / this.camera.aspect;
        this.camera.orthographicSize = Mathf.Max(wantedSize, 
            this.DesignOrthographicSize);
    }
}

Ответ 4

Вам нужно изменить окно просмотра камеры в соответствии с соотношением сторон устройства. Предположим, вы сделали игру для 720x1080

Затем в script вы должны сделать

float xFactor = Screen.width / 720f;
float yFactor = Screen.height  / 1080f;

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

Или

Другой способ: если вы делаете игру с соотношением сторон 9:16, то

Сделайте это в script,

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

Ответ 5

Самый простой способ, которым я решил это, был, как указал Стивен, заставлять мое перспективное соотношение сторон камеры к тому, для которого я разрабатываю. Конечно, это искажает некоторые объекты, если аспектный рацион, который я разработал, отличается от одного из устройств. Для объектов пользовательского интерфейса, если вы используете сборку, я создаю прямоугольники на основе процента от размера экрана

Rect(0.5 * Screen.width, 0.5 * Screen.height, 0.25 * Screen.width, 0.25 * Screen.height) 

Это поместит верхний левый угол в центр экрана и создаст прямоугольник 1/4 высоты и 1/4 ширины экрана. Я использую NGUI 2.7 для пользовательского интерфейса, и до сих пор я не видел никаких проблем с различными пропорциями, и что один использует орфографическую камеру для отображения пользовательского интерфейса

Ответ 6

Я знаю, что это старый поток, но люди все равно могут найти ответ.

Чтобы настроить перспективную камеру на разные пропорции экрана с различным поведением, чем по умолчанию Unity, вам нужна некоторая тригонометрия. Вся необходимая информация здесь: https://en.wikipedia.org/wiki/Angle_of_view

Если вам нужен простой выход, вот решение, которое работает со всеми типами камер: http://u3d.as/oUX

Ответ 7

Если вы разрабатываете игру 2d, то ваша камера находится в орфографическом представлении, тогда просто выполните следующий код и прикрепите его к вашему игровому объекту. Он масштабирует игровой объект (в данном случае спрайт) с разрешением экрана.

void Resize()
{
    SpriteRenderer sr=GetComponent<SpriteRenderer>();
    if(sr==null) return;

    transform.localScale=new Vector3(1,1,1);

    float width=sr.sprite.bounds.size.x;
    float height=sr.sprite.bounds.size.y;


    float worldScreenHeight=Camera.main.orthographicSize*2f;
    float worldScreenWidth=worldScreenHeight/Screen.height*Screen.width;

    Vector3 xWidth = transform.localScale;
    xWidth.x=worldScreenWidth / width;
    transform.localScale=xWidth;

    Vector3 yHeight = transform.localScale;
    yHeight.y=worldScreenHeight / height;
    transform.localScale=yHeight;

}

Ответ 8

В Asset-store есть бесплатный актив по этой проблеме... Просто проверьте...

http://u3d.as/content/palash-bhowmick/fit-all-screen-size/9q9

если форма вашего объекта изменена, а затем удалите строки, которые начинаются с: -

transform.localScale.x =

Ответ 9

Это очень просто для Unity Now, поскольку Unity3D имеет собственную систему пользовательского интерфейса. Для 3D Unity Автоматическая настройка камеры с использованием размера экрана. Проблема возникает для UI на самом деле, и это немного сложно. Прежде всего, попытайтесь выяснить, какие элементы должны изменить положение и размер с размером экрана. Например, если у вас есть кнопка точно в центре экрана. Тогда ему не нужно менять позицию в соответствии с экраном. Он останется в центре.

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

Теперь давайте возьмем другой случай, в котором у вас есть фон в вашем меню. Теперь вам нужно применить растягивание для этого спрайта BG. Этот BG будет растягиваться и сокращаться соответственно, но все элементы на нем будут иметь размер исправления. Для этого рекомендуется, чтобы BG были плоскими, чтобы один и тот же BG мог иметь хорошее качество для 16:10 или 4: 3 (Все о пользовательском интерфейсе Unity Native)

Ответ 10

Если у вас нет выбора Вы также можете выполнить еще одну работу и добавить на камеру специальный Script, который:

  • проверяет разрешение экрана для устройства
  • устанавливает целевое разрешение для этого
  • а также устанавливает целевое соотношение сторон для (ВАЖНО)

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