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);
}