VR OculusInteractionSamplesRayCanvas 활성화 / 비활성화, PointableCanvasModule 오류

2022. 4. 9. 06:04유니티

핸드트래킹을 통한 UI 조작 구현을 하면서,

오큘러스가 제공한 OculusInteractionSamplesRayCanvas 라는 UI를 사용했는데

이것을 SetActive로 비활성화 할 때 실행은 되지만 오류가 발생했었다.

 

원인은 이 UI의 EventSystem인 PointableCanvasModule 의 Process 함수였다.

EventSystem의 Update 함수에서 PointableCanvasModule의 Process 함수를 실행시키는데, 이 때 _pointerMap 콜렉션을 돌다가 저 UI오브젝트가 갑자기 비활성화되어서 내부의 moveNext에서 오류가 발생했다.

 

처음에는 그냥 SetActive 하지말고 그럼 scale만 조정하면 되지않을까 싶었는데, 더 많은 버그가 튀어나왔다..

 

결론적으로 해결방법은 저게 Update를 통해 동작하는 것이기 때문에, 프레임 중간에 비활성화 하지말고,

코루틴을 써서 프레임끝까지 기다리고, SetActive true / false를 하면 되는 것이었다.

 IEnumerator SetActiveObject(GameObject go, bool isActive)
{
     yield return new WaitForEndOfFrame();
     go.SetActive(isActive);
}

unity lifecycle