AddListener 이용해서 함수불러오기
버튼 프리팹 동적 생성하기(http://funfunhanblog.tistory.com/15)
동적으로 생성한 버튼을 위 그림 처럼 클릭 시 각각 다른 함수를 실행할 수 있도록 하자
유니티에는 UI버튼 기능중에는 OnClick( )이 있다. 일반적으로는 버튼을 생성하면 인스펙터 창을 통해 적용하면 되는데
동적으로 생성된 버튼에는 당연히 인스펙터창에서 실행할 함수를 적용할 수 가 없다.
그러면 스크립트에서 버튼이 생성됨과 동시에 각 버튼마다 OnClick( ) 기능을 주어야한다.
1) 실행 시킬 메서드 생성(스크립트 생성)
먼저 버튼이 눌리면 실행 할 함수들을 작성해준다.
public class BtnAnimal : MonoBehaviour {
Debug.Log(" 로그 로그 ");
}
public void OnClickRed()
{
Debug.Log("레드 클릭");
}
public void OnClickDog()
{
Debug.Log("강아지 클릭");
}
public void OnClickCow()
{
Debug.Log("소 클릭");
}
public void OnClickOct()
{
Debug.Log("문어 클릭");
}
2) 함수불러오기 AddListener
저번 포스팅에서 만들어 줬던 동적생성 메소드에서 작성해준다.
public void CreateBtns()
{
////생략
for (int nn = 0; nn < 4; nn++)
{
if (mbtnPrefab == null)
{
Debug.Log("널값");
mbtnPrefab = Resources.Load<GameObject>("BtnAnimal");
}
GameObject button = (GameObject)Instantiate(mbtnPrefab);
mmgr.Add(button); //리스트에 추가
////생략
Button btnMthod = button.GetComponent<Button>();
BtnAnimal clickbtn = btnMthod.GetComponent<BtnAnimal>();
if (nn == 0)
{
btnMthod.onClick.AddListener(()=> { clickbtn.OnClickRed(); });
}
else if(nn==1)
{
btnMthod.onClick.AddListener(() => { clickbtn.OnClickDog(); });
}
else if (nn == 2)
{
btnMthod.onClick.AddListener(() => { clickbtn.OnClickCow(); });
}
else if (nn == 3)
{
btnMthod.onClick.AddListener(() => { clickbtn.OnClickOct(); });
}
(명시적으로 표현하기 쉬운 if else 사용)
AddListener을 이용하여 BtnAnimal에 있는 함수를 불러오고 있다.
*AddListener : 함수를 불러온다. 콜백
'유니티 > UI관련' 카테고리의 다른 글
Unity3D) UGUI UI 위치지정 (RectTransform,anchoredPosition) (0) | 2019.07.02 |
---|---|
유니티)기초 UI 체력바 만들기 (1) | 2018.12.29 |
유니티) UI기초 버튼 사용하기 (0) | 2018.12.07 |