본문 바로가기

개발/Unity, C#

UGUI Text 너비가 애매해서 텍스트가 끝까지 차지 않을 때

 

 

UGUI의 Text를 사용하다 보면 안 예쁘게 텍스트 줄이 바뀔 때가 있음

 

width에 비해 많이 남음

 

 

이럴 때는 일반적으로 사용하는 스페이스(' ')가 아닌 non-breaking space(nbsp, '\u00A0')을 사용해주면 됨

 

 

Text를 상속 받아 새로 만든 UIText

using UnityEngine;
using UnityEngine.UI;

public class UIText : Text
{
    [SerializeField] private bool m_DisableWordWrap;

    public override string text
    {
        get => base.text;
        set
        {
            if (m_DisableWordWrap)
            {
                string nsbp = value.Replace(' ', '\u00A0');
                base.text = nsbp;
                return;
            }
            base.text = value;
        }
    }
}

 

UITextInspector

using UnityEditor;
using UnityEditor.UI;

[CustomEditor(typeof(UIText))]
public class UITextInspector : TextEditor
{
    private SerializedProperty m_DisableWordWrap;

    protected override void OnEnable()
    {
        base.OnEnable();
        m_DisableWordWrap = serializedObject.FindProperty("m_DisableWordWrap");
    }

    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();

        serializedObject.Update();

        EditorGUILayout.PropertyField(m_DisableWordWrap);

        serializedObject.ApplyModifiedProperties();
    }

}

 

이런 코드를 작성 해주면

 

Disable Word Wrap 옵션이 인스펙터에 표시됨

 

 

테스트

using UnityEngine;
using UnityEngine.UI;

public class Test : MonoBehaviour
{
    public Text text;
    public UIText uiText;

    void Start()
    {
        uiText.text = "텍스트가 넘어가도 자동으로 줄이 바뀌지 않습니다.";
        text.text = "텍스트가 넘어가면 자동으로 줄이 바뀝니다.";
    }
}

 

 

결과

 

 

잘 됨