
유니티의 기본 지원 UI들은 어떤 것들이 있는 지, 어떻게 쓰는 지 알아본다
// 기본 지원UI
using UnityEngine.UI;
// 레거시 Text
using UnityEngine.UI.Text;
// Text Mesh Pro
using TMPro;
// 이미지
Image image;
// 버튼
Button button;
// 텍스트 메시 프로 텍스트
TMP_Text text;
// 인풋 필드
TMP_InputField inputField;

UI. Material을 추가할 수도 있다
Image와는 다르게 Texture로 표현한다public class ImageTest : MonoBehaviour
{
[SerializeField] private Image _image;
[SerializeField] private RawImage _rawImage;
[SerializeField] private Sprite _sprite;
[SerializeField] private Texture2D _png;
private void Awake()
{
_image.sprite = _sprite;
_rawImage.texture = _png;
}
}

On Click() 이벤트에 수행할 내용을 추가할 수 있다. 스크립트로도 제어 가능하다
Interactable : 상호작용 여부를 결정할 수 있다Transition : 상호작용에 따라 변화하는 방법을 설정할 수 있다public class ImageTest : MonoBehaviour
{
[SerializeField] private Image _image;
[SerializeField] private RawImage _rawImage;
[SerializeField] private Sprite _sprite;
[SerializeField] private Texture2D _png;
[SerializeField] private Button _button;
private bool _isImageOn;
private void Start()
{
_button.onClick.AddListener(ImageOnOff);
}
private void ImageOnOff()
{
_isImageOn = !_isImageOn;
if(_isImageOn)
{
_image.sprite = _sprite;
_rawImage.texture = _png;
}
else
{
_image.sprite = null;
_rawImage.texture = null;
}
}
}

public class ImageTest : MonoBehaviour
{
[SerializeField] private Image _image;
[SerializeField] private RawImage _rawImage;
[SerializeField] private Sprite _sprite;
[SerializeField] private Texture2D _png;
[SerializeField] private Button _button;
[SerializeField] private Slider _slider;
private bool _isImageOn;
private void Start()
{
_button.onClick.AddListener(ImageOnOff);
_slider.onValueChanged.AddListener(AlphaChange);
}
private void ImageOnOff()
{
_isImageOn = !_isImageOn;
if(_isImageOn)
{
_image.sprite = _sprite;
_rawImage.texture = _png;
}
else
{
_image.sprite = null;
_rawImage.texture = null;
}
}
private void AlphaChange(float value)
{
_image.color = new Color(_image.color.r,_image.color.g,_image.color.b, value);
}
}

스크롤 바를 통해 사용용, 모바일 플랫폼을 위한 터치 및 반동 기능도 지원한다
elastic 이면 스크롤에 탄성이 있다. 컨텐츠 끝보다 더 스크롤이 되지만, 손을 놓으면 다시 돌아간다. clamped는 그와 반대로 끝까지만 간다.Unrestricted 는 제한없이 스크롤이 된다
Content 안에 여러 요소들을 추가해서 이렇게 배치할 수 있다Font Asset Creator로 만든다. 사용할 폰트를 Asset 폴더에 넣고 Font Asset Creator로 폰트 에셋으로 만들어 준 후 사용하면 된다TMP는 Button, Scroll View 등 다른 UI들에도 쓰이므로 잘 알아보는 것이 좋다
Source Font File : 폰트 원본 파일 삽입Sampling Point Size : 텍스쳐화 될 폰트 이미지에 삽입될 글자의 크기, 일반적으로 Auto Sizing을 선택한다.Padding : 글자 이미지 간의 여백, 보통 5를 선택한다Packing Method : 폰트들을 한 장의 이미지로 합쳐 아틀라스를 생성한다. 두 옵션의 차이가 크지 않으므로 Fast를 선택한다Atlas Resolution : 글자로 구성된 한 장의 이미지의 최대 크기, 너무 작다면 폰트가 제대로 출력되지 않을 수 있고 너무 크다면 성능적으로 좋지 않다. 한글이라면 일반적으로 2048 ~ 4096을 추천한다Character Set : 폰트에셋으로 지정해 둘 폰트를 지정하는 단계. 보통 ASCII로 해결되지만, 한글폰트가 포함되어야 하므로 Custom Range로 설정한다.Character Sequence : 유니코드 단위의 10진수로 범위를 지정한다.32-126 : 영문자44032-55203 : 한글12593-12643 : 한글 자모음8200-9900 : 특수문자RenderMode : 텍스트를 이미지화 할 때 사용되는 렌더링 모드. 거리에 따라 선명도를 계산해 렌더링 하는 방식인 SDF를 사용하고, 그 중에서도 SDF16 을 선택하지만 이 수치는 디바이스 환경이나 해상도 등에 차이가 있을 수 있으며 숫자가 높을수록 더 많은 연산이 발생하므로 많은 테스트를 통해 결정되어야 한다빛의 계승자 - 진지한 느낌의 폰트로 쓰기 좋다무료 폰트 모음
- 공유마당 : 상업적 이용이 가능한 폰트들을 모아놓은 사이트

스프라이트들을 바둑판 식으로 이미지들을 모아놓고 하나의 이미지로 만든 것이다. 2D 에서 자세히 다룰 예정
GPU 입장에서는 100개의 이미지 파일을 메모리로 가지고 있는 것보다, 큰 이미지 파일 하나에서 일부분을 그리도록 사용하는 방법이 더 빠르다. 캐쉬 친화도가 높아진다
Grid Layout Group이다
Add Component 로 검색해서 추가하자

Cell Size : 자식들의 크기 조정Spacing : 자식들 간의 간격Padding : 자식들의 테두리를 기준으로 한 간격Start Corner : 정렬 시작 기준이 되는 자식Start Axis : 정렬 축Child Alignment : 패널 기준 위치를 정해준다Constraint : 행, 렬을 정해줄 수 있다. Flexible을 선택하면 유동적이다
레이아웃컴포넌트 들은 자식들을 조정한다


