람다와 액션

게임의 새 시스템 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

라고 검색하면 나옵니다.

개발자 공부 방향 잡기

Published on November 24, 2023

git branch name on windows and linux

Published on November 19, 2023