반응형

2D Sprite에 Text를 추가해 보자.

 

렌더러가 충돌하기 때문에 Sprite에 그냥 Text를 추가할 수 없다.

 

우선 텍스트를 추가하려는 오브젝트에 Empty 오브젝트를 하나 추가한다.

 

빈 오브젝트에서 Text를 추가한다.

 

Rect Transform - Width, Height를 텍스트에 맞게 조절하고 다른 옵션도 적당히 세팅한다.

 

Text가 표시된다.

 

 

하지만 텍스트 길이에 따라 항상 이미지 크기를 조절해야 한다.

Content Size Fitter 컴포넌트와 간단한 스크립트를 사용하면 자동으로 텍스트 길이에 맞는 이미지를 표시할 수 있다.

dialog box.png
0.00MB

 

실습을 위해 위 이미지를 임포트한다.

 

Inspector 에서 위와 같이 설정한다.

 

Sprite Editor 에서 위와 같이 설정한다.

 

2D Sprite Renderer에는 위 이미지 파일을 지정하고 자식(텍스트) 오브젝트에는 Content Size Fitter 컴포넌트를 추가하고 아래와 같이 설정한다.

 

 

Content Size Fitter - Horizontal Fit - Preferred Size로 변경한다.

이제 Rect Transform - Width 필드가 비활성화 되어 수정할 수 없게 된다.

 

using TMPro;
using UnityEngine;
using UnityEngine.UI;

public class word : MonoBehaviour
{
    void Start()
    {
        RectTransform crt = GetComponentInChildren<RectTransform>();
        crt.gameObject.GetComponent<TextMeshPro>().text = "Very very long long text";
        // 미리 자식 오브젝트 Rect Transform을 가져오고, TextMeshPro - text 변경

        LayoutRebuilder.ForceRebuildLayoutImmediate(crt);
        // Forces an immediate rebuild of the layout element and child layout elements
        // affected by the calculations.
        // 위에서 TexhMeshPro - text 값이 변경되고 Content Size Fitter에 의해
        // Rect Transform - Width(sizeDelta.x) 값이 변경 되지만 바로 되지는 않는다.
        // 아래 코드에서 값을 가져오기 전에 업데이트 한다.

        Debug.Log(crt);
        Debug.Log(crt.sizeDelta.x);

        SpriteRenderer sr = GetComponent<SpriteRenderer>();
        sr.size = new Vector2(crt.sizeDelta.x + 0.7f, sr.size.y);
        // 폰트, 폰트 사이즈, 이미지에 따라 다르겠지만 이 예제의 경우
        // Rect Transform - Width(sizeDelta.x) 값에 0.7f를 더하면 적당하다.
    }

    void Update()
    {        
    }
}

 

Sprite Renderer가 있는 부모 오브젝트(Square)에 위 스크립트를 추가한다.

 

 

게임을 실행하기 전 텍스트

 

게임 실행 후 텍스트

 

게임을 실행하면 텍스트가 바뀌고 그에 맞게 이미지의 길이도 자동으로 변경된다.

 

반응형
Posted by J-sean
: