람다와 액션

게임의 새 시스템 GUI 를 급하게 마무리 하고 있었는데.

특정 시스템의 한 부분을 선택하면, 그 뒷부분으로 노란 배경이 이동해서

선택한 것 처럼 보이는 유아이를 구성 중이었는데

자꾸 귀신이 곡할 노릇처럼 이상한 일이 일어났다.


List<Image> SelectableGUIs = new List<Image>();

void SetSelectionGUI()
{
  var neededCount = GetCurNeedCount(); // 필요한 선택지의 갯수 

  // 매번 변하는 GUIs 수를 맞춰준다. 
  if(SelectableGUIs.Count < neededCount ) // 부족 
  {
    CreatGUIs();
  }
  else if(SelectableGUIs.Count > neededCount ) // 초과
  {
    DestroyGUIs();
  }

  MoveSelectEffect(GetCurSelectedGUI()); // 문제의 선택 효과를 구현하는 부분 
}

위와 같은 코드에서 분명 부족할 시에 선택지 GUI 갯수는 늘어났고 ,

생성시에 HorizontalLayoutGroup 이 위치를 재조정해주니

MoveSelectEffect() 을 통해서 해당 GUI의 좌표로 이동하면 문제 없이 작동해야 할 것 같았는데

결과는 계속해서 이전 갯수의 해당 GUIs 위치로 늘 빗나가서 배경이 선택 되었다.

해결?

커피한잔 하고 곰곰히 생각해보니 HorizontalLayoutGroup 도 결국 리스트가 돈 것을 체크해서 다음 프레임에야 위치를 맞춰 줄 테니 , 당연히 이전 위치를 참조한 후에 레이아웃 그룹이 옮겨줘서 일어나는 현상이었다.

프레임이나 유니티 렌더링, 콜 순서등은 처음에 배울 때는 아무짝에도 쓸모 없어보이나 사실 모르면 굉장히 삽질하기 좋다. @_@

혹시나 위 내용이 잘 이해가 안간다면 유니티 공식 문서에서

Order of Execution for Event Functions

라고 검색하면 나옵니다.