При разработке 2D-игр на Unity масштабирование фона для соответствия разным размерам экрана является распространенным требованием. Если вы хотите поддерживать различные устройства или создать адаптивный пользовательский интерфейс, динамическое изменение размера фона может улучшить визуальное восприятие вашей игры. В этой статье мы рассмотрим несколько методов фонового масштабирования в Unity 2D вместе с примерами кода.
Метод 1. Масштабирование соотношения сторон с помощью камеры
Один из способов масштабирования фона – регулировка ортогонального размера камеры в зависимости от целевого соотношения сторон. Этот метод гарантирует, что фон останется видимым без искажений.
using UnityEngine;
public class BackgroundScaler : MonoBehaviour
{
public float targetAspectRatio = 16f / 9f;
void Start()
{
float currentAspectRatio = (float)Screen.width / Screen.height;
float scaleHeight = currentAspectRatio / targetAspectRatio;
if (scaleHeight < 1f)
{
Camera.main.orthographicSize = Camera.main.orthographicSize / scaleHeight;
}
}
}
Метод 2. Масштабирование средства рендеринга спрайтов
Если вы используете Sprite Renderer для отображения фона, вы можете масштабировать его в зависимости от размера экрана. Этот метод требует, чтобы фоновый спрайт был установлен в режим «Повтор» в компоненте Sprite Renderer.
using UnityEngine;
public class BackgroundScaler : MonoBehaviour
{
void Start()
{
SpriteRenderer spriteRenderer = GetComponent<SpriteRenderer>();
float cameraHeight = Camera.main.orthographicSize * 2f;
float cameraWidth = cameraHeight * Camera.main.aspect;
float spriteHeight = spriteRenderer.sprite.bounds.size.y;
float spriteWidth = spriteRenderer.sprite.bounds.size.x;
Vector2 scale = transform.localScale;
scale.x = cameraWidth / spriteWidth;
scale.y = cameraHeight / spriteHeight;
transform.localScale = scale;
}
}
Метод 3: наложение холста на экранное пространство
В системе пользовательского интерфейса Unity вы можете использовать холст наложения экранного пространства для создания масштабируемого фона. Поместите компонент изображения в иерархию холста и настройте его свойства для достижения желаемого масштабирования.
using UnityEngine;
using UnityEngine.UI;
public class BackgroundScaler : MonoBehaviour
{
void Start()
{
Image backgroundImage = GetComponent<Image>();
float canvasHeight = GetComponentInParent<CanvasScaler>().referenceResolution.y;
float canvasWidth = GetComponentInParent<CanvasScaler>().referenceResolution.x;
float spriteHeight = backgroundImage.sprite.bounds.size.y;
float spriteWidth = backgroundImage.sprite.bounds.size.x;
Vector2 scale = transform.localScale;
scale.x = canvasWidth / spriteWidth;
scale.y = canvasHeight / spriteHeight;
transform.localScale = scale;
}
}
В этой статье мы рассмотрели три различных метода масштабирования фона в Unity 2D. Первый метод включал настройку орфографического размера камеры, а второй метод использовал компонент Sprite Renderer. Наконец, мы рассмотрели подход Screen Space Overlay Canvas в системе пользовательского интерфейса Unity. В зависимости от ваших конкретных требований и настроек проекта вы можете выбрать метод, который лучше всего соответствует вашим потребностям.
Реализуя эти методы, вы можете создать визуально привлекательный и отзывчивый фон для своих 2D-игр Unity, гарантируя единообразную работу на экранах разных размеров и с разными соотношениями сторон.