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 : 함수를 불러온다. 콜백






+ Recent posts