버튼(프리펩,Prefab) 동적생성


   

BtnB를 클릭하면 그림 처럼 각각 다른 button 4개가 생성되게 만들겠습니다.


1)Panel 세팅



먼저 UI Panel 아래에 BtnGroupWindow를 만들어 줍니다.

button 4개 위치를  BtnGroupWindow 버튼 관리와 위치를 잡아주기 위해서입니다.


2)프리팹(견본생성)


동적으로 프리팹을 만들기 위해서는 먼저 복사?가 될 프리팹을 1개 만들어 주어야합니다.

GameObject -> UI -> Button

Button을 생성한 다음

Hierarchy창에서 Project창으로 드래그로 하면 프리팹이 만들어집니다.



3)BtnGroupWindow스크립트 작성 (BtnGroupWindow 오브젝트에 추가합니다.)

  

public class BtnGroupWindow : MonoBehaviour {

GameObject mbtnPrefab;

   public Transform panelPos;

mbtnPrefab이란 이름으로 프리팹으로 만들어 주기 위한 세팅입니다.


   string[] mstrImageName = new string[]

   {

        "bonbon_cha0025", "bonbon_cha0021"

                       ,"bonbon_cha0020", "bonbon_cha0014"

   };


버튼 4개가 모두 다른 이미지이기 때문에, 이미지를 바꿔 주기위해 배열을 세팅해줍니다.

이미지이름을 문자열로 넣어줍니다.


   void Start () {


mbtnPrefab = Resources.Load<GameObject> ("BtnAnimal");


if (mbtnPrefab ==null)

       { Debug.Log("mbtnpreprefab==null"); }


   }

mbtnPrefab에 아까 만들어 놓은 BtnAnimal 프리팹을 로드해서 넣어줍니다.


   public void CreateBtns()

   {

       for (int nn = 0; nn < 4; nn++)

       {

           

           GameObject button = Instantiate(mbtnPrefab);

//Instantiate(생성할 물체);

           RectTransform btnpos = button.GetComponent<RectTransform>();

//RectTransform을 잡기 위한 코드

button.transform.position = gameObject.transform.position;

//버튼프리팹의 최초 생성 postion값은 부모인 BtnGroup으로 맞춰줍니다.

//텍스처 바꾸기

Image image = button.GetComponent<Image>();

//생성할 버튼 Image 컴포넌트에 접근

Sprite btnsprite = Resources.Load<Sprite>(mstrImageName[nn]);

//nn이 0부터 3까지 도는 동안 각각에 맞는 이미지 sprite을 바꿔줍니다.

image.sprite = btnsprite;


btnpos.SetParent(gameObject.transform);

//SetParent 부모오브젝트 설정 여기서는 부모의 transform을 받기 위함입니다.

btnpos.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Left,(20*nn), 36);

                       //왼쪽 모서리로 부터,얼마만큼 떨어져서 ,버튼의 크기

//버튼의 크기는 만들어 놓은 프리팹의 크기로 맞춰주는게 좋습니다.

       }

}

+원하는 위치에 생성이 안된다면 Panel과 BtnGroupWindow의 Rect Transform의 값을 설정해줍니다.


반응형

+ Recent posts