В Unity можно ли установить разрешение экрана в игре так, чтобы при несовпадении с разрешением экрана устройства оставались черные полосы по краям?

Как можно настроить разрешение игры, чтобы на устройстве с разрешением 2400x1080 по бокам оставалось черное пространство, а экран не растягивался горизонтально? Например, в игре есть следующие разрешения: <br/> 2160x1080 <br/> 1920x1080 <br/> и т.д.
  • 14 апреля 2025 г. 4:35
Ответы на вопрос 2
Да, в Unity можно установить разрешение экрана таким образом, чтобы при несовпадении с разрешением устройства оставались черные полосы по бокам. Для реализации этого эффекта можно использовать "Letterboxing", которое подразумевает, что изображение будет центрироваться на экране, и при этом границы будут заполняться черным цветом.

Вот как вы можете это сделать:

### 1. Использование Canvas и Aspect Ratio Fitter

Если у вас имеется UI, вы можете настроить `Canvas` с использованием компонента `Aspect Ratio Fitter`:

1. Создайте `Canvas` и добавьте компонент `Aspect Ratio Fitter` к нему.
2. Установите `Aspect Mode` на `Fit In Parent`.
3. В поле `Aspect Ratio` установите желаемое соотношение сторон (например, 16:9 для 1920x1080).

### 2. Настройка камеры

Если вы работаете с 3D графикой, вы можете сделать следующее:

1. Установите `Main Camera` на нужное разрешение (например, 1920x1080).
2. Убедитесь, что у вас установлено правильное значение для `Viewport Rect` камеры:
   - Пример для 16:9: `X = 0, Y = 0, W = 1, H = 0.5625` (для Full HD)

### 3. Создание черных полос

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

1. Создайте два прямоугольника (`UI -> Image`) — один для левой полосы, второй для правой.
2. Установите их в `Canvas` и масштабируйте так, чтобы они занимали необходимые области.
3. Задайте цвет черным.

### 4. Код для ручной настройки разрешения

Вы можете установить разрешение в коде:

```csharp
void Start()
{
    Screen.SetResolution(1920, 1080, true); // Установите нужное разрешение
    // Дополнительно, если хотите, чтобы игра ресизировалась в зависимости от соотношения сторон
    float targetAspect = 16f / 9f; // Например, 16:9
    float windowAspect = (float)Screen.width / (float)Screen.height;
    float scaleHeight = windowAspect / targetAspect;

    if (scaleHeight < 1.0f)
    {
        Rect rect = Camera.main.rect;
        rect.height = scaleHeight;
        rect.y = (1.0f - scaleHeight) / 2.0f;
        Camera.main.rect = rect;
    }
    else
    {
        float scaleWidth = 1.0f / scaleHeight;
        Rect rect = Camera.main.rect;
        rect.width = scaleWidth;
        rect.x = (1.0f - scaleWidth) / 2.0f;
        Camera.main.rect = rect;
    }
}
```

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

### Подводя итог
Используя указанные методы, вы сможете установить разрешение игры в Unity так, чтобы на устройствах с различными соотношениями сторон оставались черные полосы по краям.
Можно пересчитать Viewport Rect камеры, для высоты или ширины которая не вписывается в требуемую. 
Camera.main.rect = new Rect(0.1f, 0.1f, 0.8f, 0.8f);

Похожие вопросы