목차

반응형
button.GetComponent<Button>().onClick.AddListener(() =>
{
PartController.PanelOn();
WheelController.categoryPanelsOff();

})

코드는 위와 같아.

버튼을 클릭하면 패널이 하나 켜지고 기존에 켜져있던 패널이 꺼져야한다.

하지만 버튼을 눌러보면 아무 일도 일어나지않는다 (에러도 안나오고)



테스트삼아서 로그를 띄워보지만

button.GetComponent<Button>().onClick.AddListener(() =>
{
Debug.Log("test");
PartController.PanelOn();
WheelController.categoryPanelsOff();

})

심지어 로그자체도 먹지않는다.

클릭리스너가 아예 안먹는것같은느낌?



이것저것 뒤져도 딱히 안나왔다.

하지만 이상한것은

button.GetComponent<Button>().onClick.AddListener(() =>
{
PartController.PanelOff();
categoryPanelsOn();
wheelCategoryPanels.Find(item => item.panel.name == categoryName).listOn();
wheelCategoryPanelsParent.GetComponent<ScrollRect>().content =
wheelCategoryPanels.Find(item => item.panel.name == categoryName).recttransform;
})

위의 코드는 먹는다.

조금더 설명을 하자면 위의 코드를 포함하고있는 오브젝트는 정적으로 생성되고 PartController라는 외부변수 또한 정적으로 지정되어있었다.


button.GetComponent<Button>().onClick.AddListener(() =>
{
Debug.Log("test");
PartController.PanelOn();
WheelController.categoryPanelsOff();

})

하지만 위의 코드를 포함하고 있는 오브젝트는 동적으로 생성되고 그에따라 PartController라는 외부 변수도 물론 똑같은 정적 객체를 불러오지만 동적으로 할당이 된다.


차이점은 해당 코드를 포함하고 있는 오브젝트가 동적으로 생성되느냐 정적으로 생성되느냐 인것같다.

내가 직접 여러가지 테스트를 해봤는데 해결법을 찾았다.

외부변수를 사용했을때 제대로 작동이 안하는 오브젝트에서 해당 외부변수를 static으로 선언하는 것이다.

즉 PartController라는 변수를 static으로 지정한뒤 오브젝트가 생성될때 동적으로 스태틱할당을 해주면 잘 작동한다.

반응형