본문 바로가기
Unity/Manual

Unity에서 SpriteRenderer의 텍스쳐 크기가 다를 때 화면 해상도와 크기를 일치시키는 방법

by Dev_카페인 2024. 6. 12.
반응형

Unity에서 SpriteRenderer의 텍스쳐 크기가 다를 때 화면 해상도와 크기를 일치시키는 방법은 여러 가지가 있습니다. 이 글에서는 다양한 해상도와 텍스쳐 크기에 맞춰 스프라이트를 조정하는 몇 가지 방법을 설명합니다.

 

1. SpriteRenderer 크기를 화면 해상도에 맞추기

방법 1: Camera Viewport를 이용한 조정

카메라의 뷰포트를 이용하여 스프라이트의 크기를 화면 크기에 맞추는 방법입니다. 이 방법은 주로 백그라운드 스프라이트에 유용합니다.

스크립트 예제

using UnityEngine;

[RequireComponent(typeof(SpriteRenderer))]
public class FitToScreen : MonoBehaviour
{
    void Start()
    {
        FitSpriteToScreen();
    }

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

        transform.localScale = Vector3.one;

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

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

        Vector3 newScale = transform.localScale;
        newScale.x = worldScreenWidth / width;
        newScale.y = worldScreenHeight / height;

        transform.localScale = newScale;
    }
}

위의 스크립트는 스프라이트의 크기를 화면 크기에 맞춰 조정합니다. SpriteRenderer의 bounds.size를 사용하여 스프라이트의 실제 크기를 가져오고, 카메라의 orthographicSize와 화면 비율을 이용해 스프라이트의 크기를 조정합니다.

방법 2: RectTransform을 이용한 조정 (UI용)

UI 요소로 스프라이트를 사용할 때는 RectTransform을 이용하여 크기를 조정할 수 있습니다.

스크립트 예제

using UnityEngine;

[RequireComponent(typeof(RectTransform))]
public class FitUIImageToScreen : MonoBehaviour
{
    void Start()
    {
        FitToScreen();
    }

    void FitToScreen()
    {
        RectTransform rt = GetComponent<RectTransform>();
        rt.sizeDelta = new Vector2(Screen.width, Screen.height);
    }
}

위의 스크립트는 RectTransform을 사용하여 스프라이트의 크기를 화면 크기에 맞춥니다. 이는 주로 UI 요소로 사용되는 스프라이트에 유용합니다.

2. 다양한 해상도 대응을 위한 SpriteRenderer 조정

여러 해상도에 대응하기 위해서는 다양한 화면 크기에 맞춰 스프라이트의 크기를 동적으로 조정할 필요가 있습니다. 이를 위해 아래의 방법을 사용할 수 있습니다.

방법 1: 해상도에 따라 스프라이트 크기 비율 조정

해상도에 따라 스프라이트 크기를 비율로 조정하는 방법입니다.

스크립트 예제

using UnityEngine;

[RequireComponent(typeof(SpriteRenderer))]
public class ResponsiveSprite : MonoBehaviour
{
    public Vector2 referenceResolution = new Vector2(1920, 1080);

    void Start()
    {
        AdjustSpriteSize();
    }

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

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

        float targetAspect = referenceResolution.x / referenceResolution.y;
        float screenAspect = (float)Screen.width / (float)Screen.height;

        float scaleFactor = screenAspect / targetAspect;

        Vector3 newScale = transform.localScale;
        newScale.x = scaleFactor * (Screen.width / width);
        newScale.y = scaleFactor * (Screen.height / height);

        transform.localScale = newScale;
    }
}

이 스크립트는 레퍼런스 해상도를 기준으로 스프라이트 크기를 조정합니다. 다양한 해상도에서 일관된 비율로 스프라이트를 유지할 수 있습니다.

방법 2: Viewport 비율을 이용한 조정

카메라의 뷰포트 비율을 이용하여 스프라이트의 크기를 조정하는 방법입니다.

스크립트 예제

using UnityEngine;

[RequireComponent(typeof(SpriteRenderer))]
public class ViewportFitSprite : MonoBehaviour
{
    void Start()
    {
        FitSpriteToViewport();
    }

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

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

        Camera cam = Camera.main;
        float camHeight = 2f * cam.orthographicSize;
        float camWidth = camHeight * cam.aspect;

        Vector3 newScale = transform.localScale;
        newScale.x = camWidth / width;
        newScale.y = camHeight / height;

        transform.localScale = newScale;
    }
}

이 스크립트는 카메라의 뷰포트를 기준으로 스프라이트 크기를 조정합니다. 다양한 해상도와 화면 비율에서 스프라이트가 잘 맞춰질 수 있도록 합니다.

결론

Unity에서 SpriteRenderer의 텍스쳐 크기가 다를 때 화면 해상도와 크기를 일치시키는 방법은 여러 가지가 있습니다. 카메라의 뷰포트를 이용하거나, RectTransform을 사용하거나, 해상도 비율을 기반으로 스프라이트 크기를 조정하는 방법 등 다양한 방법을 사용할 수 있습니다. 각 방법을 적절히 활용하여 다양한 해상도와 화면 크기에 대응하는 반응형 스프라이트를 구현해 보세요.

 

 

Unity - Scripting API: Bounds.size

size.x is the width, size.y is the height and size.z is the depth of the box. Note that size is given in world size. A Bound surrounding a tall human might have size.y approximately 2.0f, meaning a 2 meter height body.

docs.unity3d.com

 

반응형