2023.02.06 - [Unity/수업내용] - [Unity UI] 1일차 Button
이전 글에서 있었던 문제의 원인을 찾아보았다.
문제가 발생한 코드
UIButtons의 Start
private void Start()
{
for(int i = 0; i < arrBtns.Length; i++)
{
this.arrBtns[i].onClick.AddListener(() =>
{
this.onClick((eBtnTypes)i);
});
}
}
ButtonsSceneMain의 Start
void Start()
{
this.uiButtons.onClick = (btnType) =>
{
Debug.Log(btnType);
};
}
(생각)
ButtonsSceneMain에서 UIButtons를 참조하고 있어
UIButtons의 Start 부분이 먼저 실행된 후에 참조되어 btnType변수에 저장된다고 생각한다.
( ButtonsSceneMain -UIButtons 참조 - for문 - btnType출력 )
이때, for문이 다 돌고 난 후 i가 참조되어 반복문의 종료 시점의 i++(3)이 출력된것이 아닐까 싶다.
(해결방법)
따라서, 종료시점의 i가 아닌 for문이 시행되고 있을 때, 각 i마다 새로운 지역변수를 받아 저장한다면
이벤트가 발생할 당시의 변수가 전해지기 때문에 원하던 출력물을 얻을 수 있었다.
private void Start()
{
for(int i = 0; i < arrBtns.Length; i++)
{
int typeN = i;
this.arrBtns[typeN].onClick.AddListener(() =>
{
this.onClick((eBtnTypes)typeN);
});
}
}
'Unity > 수업과제' 카테고리의 다른 글
[Unity 3D] Shop Tab (0) | 2023.02.20 |
---|---|
[Unity] Object Pooling 오브젝트 풀링_최적화, Garbage Collector (0) | 2023.02.06 |
[Unity3D] Coroutine 활용 예제 (1) | 2023.02.02 |
[Unity 2D] Mecanim (애니메이션 상태 시스템) 연습 (0) | 2023.02.01 |