본문 바로가기
프로그래밍/유니티

[Unity UGUI] Sprite Swap 코드로 하기 (Event Trigger)

by 김시루시루르 2021. 9. 17.

상호작용이 가능한 UI(버튼 등)에는 Transition 옵션이 있고,

이걸 Sprite Swap으로 하면 상호작용 중 스프라이트를 교체하거나 할 수 있는데

레테에서 다국어 지원을 하게 되면서, 스프라이트로 만든 이미지를 다국어로 교체하고...

또 각각의 언어에서 트랜지션을 실행할 필요가 있었어요

 

그런데 트랜지션 옵션엔 기본적으로 한 장씩밖에 안 들어가더라고요

스크립트를 이것저것 찾아보긴 했는데 제가 생각한대로 되진 않아서...

그냥 이렇게 해야겠다! 하고 짜게 된 코드입니다.

 

어제도 Event Trigger 에 대해서 쬐끔 썼었죠 이것도 비슷해요

 

[Unity UGUI] 버튼을 누르고 있을 때 실행하기 (Event Trigger)

UI상에서 버튼을 누르고 있을 때 특정 코드를 실행하기 옛날 옛~날에 유니티 처음 배울때 과제로 러닝게임(그런데 이제 소스가 거의 주어진)을 만드는 게 있었는데 기말과제가 그 소스나 코드 같

drybone-developer.tistory.com


기본 구조

이벤트 트리거를 사용해서 클릭했을 때, 클릭을 떼었을 때를 이벤트 타입으로 넣습니다.

그리고 각각의 타입에 언어 설정에 맞춰 스프라이트를 교체하는 코드를 실행하는 식.

스프라이트는 급한대로(...) 그리고 코드의 재활용을 위해 각 상호작용 오브젝트에 직렬화했습니다.


코드

1
2
3
4
5
6
7
8
9
10
11
12
13
[SerializeFieldSprite[] swapImage = new Sprite[2];
 
public void ClickDownChange()
{
    GetComponent<Image>().sprite = swapImage [1];
    //이미지 크기 등으로 강조표시가 있으면 SetNativeSize 실행
    GetComponent<Image>().SetNativeSize();
}
public void ClickUpChange()
{
    GetComponent<Image>().sprite = swapImage [0];
    GetComponent<Image>().SetNativeSize();
}
cs

저는 이 코드를 사용합니다 (늘 그랬듯이 복사 가능합니다)

해당 스크립트를 쓸 오브젝트에 붙여주고, 스프라이트도 입력해줍니다.

그리고 이벤트 트리거에서

PointerDown에 ClickDownChange를, PointerUp에 ClickUpChange를 연결합니다.

 

제가 이걸 쓴 곳은 일시정지 메뉴인데요,

기본적으로 클릭이 입력되지 않은 상태에서 플레이어에게 보여지므로

기본 이미지가 swapImage[0]과 같이 때문에 ClickUp에 0번을 준 것입니다 뭔 말인지 아시겠죠 대충? (?)

 

이렇게 기본 이미지를 인스펙터에서 두 번 입력하게 되므로

평소에 보여지는 이미지 입력 없이 각 오브젝트의 Awake나 Start 등에서

위 코드의 11번 줄을 실행해주셔도 됩니다 (효율은 이제 나름입니다)


이제 여기서 변형해서 쓰시면 됩니다.

제가 다국어로 버튼 텍스트(인데 이제 스프라이트인)를 어떻게 바꿨나는 다음에 또 .. 뭐.. 써보고...

근데 그건 아직 연구중이에요 완벽하지 않거든요

그점도 포함해서 써보겠습니다 다음에!

댓글