일단 버튼을 만들고 버튼의 Image -> Source Image에 스프라이트를 넣음으로써 버튼의 모습을 바꿀 수 있습니다.
그런데 상황에 따라 버튼의 모양을 실시간으로 바꿔야 할 때가 있죠.
public class CanvasFieldController : CanvasBase
{
[SerializeField] private Sprite normalSpeed;
[SerializeField] private Sprite doubleSpeed;
[SerializeField] private Sprite haltSpeed;
Sprite로 선언된 변수에는, public이나 [SerializeField]가 붙어있는 경우 드래그&드롭을 통해 Inspactor에서 그림데이터를 넣을 수 있습니다.
public class CanvasFieldController : CanvasBase
{
[SerializeField] private Sprite normalSpeed;
[SerializeField] private Sprite doubleSpeed;
[SerializeField] private Sprite haltSpeed;
private Button btnGameSpeed;
void Awake()
{
var gameSpeed = GameObject.Find("GameSpeed");
btnGameSpeed = gameSpeed.GetComponent<Button>();
btnGameSpeed.onClick.AddListener(GameSpeed);
}
private void GameSpeed()
{
Sprite spr = normalSpeed;
switch(DT.NextScale())
{
case DT.TimeScale.Halt: spr = haltSpeed; break;
case DT.TimeScale.Normal: spr = normalSpeed; break;
case DT.TimeScale.Double: spr = doubleSpeed; break;
default:
false.Assert("Invalid enum");
break;
}
var img = btnGameSpeed.GetComponent<Image>();
img.AssertNotNull("Image null");
img.sprite = spr;
}
}
와 같이 버튼에서 Image 컴포넌트를 꺼내서 sprite변수에 넣는 식으로 버튼의 모양을 바꿀 수 있습니다.