팀프로젝트, 팀프로젝트 GDD작성
TArray는 언리얼의 배열이다. 배열은 0부터 시작하고, 마지막 인덱스는 Num() - 1이다.
IsValidIndex()는 범위 밖의 인덱스에 접근해도 되는지 검사한다.
if (weaponPreviews.IsValidIndex(weaponIndex) == false)
{
return false;
}
// weaponIndex >= 0 && weaponIndex < weaponPreviews.Num() 과 같은 조건
RootSwitcher
└─ MissionSelect
└─ MissionSelect 내부 Switcher
├─ MapSelect
└─ CharacterSelect
WidgetSwitcher가 너무 편한 것 같아서 남발하면서 썻더니 나중에 가서는 화면제어가 많이 꼬였다.
RootWidgetSwitcher 안에 MissionWidgetSwitcher가 있으니까 MissionWidgetSwitcher의 Widget을 사용하려면 타고타고 안으로 들어가야해서 매우 불편했다.
그리고 Back버튼을 눌렀을 때도 헷갈릴 수 있다.
Back이 Root화면을 바꿔야하나?, MissionSelect 내부 화면만 바꿔야 하나?, 카메라도 같이 바꿔야 하나? 등 고려할게 훨씬 많아졌다.
WidgetSwitcher의 남발은 상태 관리 주체가 너무 많아지므로 Widget Class가 늘어나는걸 관리하기 복잡하다고 생각하지말고 Root에만 WidgetSwitcher를 두고 Widget Class를 늘려서 사용하는 방식으로 가는게 좋다.
bool은 단순히 판단용으로 생각했었다. 예를 들어 bIsWin 이런 것들 말이다.
함수가 무언가를 시도했을 때, 성공했는지 실패했는지 호출한 쪽에 알려줘야 할 때가 있다. 이때 bool반환이 유용하다.
bool ShowNextWeapon();
이 함수는 이렇게 해석 할 수 있다.
true -> 다음 무기로 실제 변경됨
false -> 마지막 무기라 변경되지 않음
예를 들어 마지막 무기에서 Next를 누르면 무기가 바뀌면 안되게 설계를 해야할때가 많다. 이때 bool을 사용하면 함수가 false를 반환하고, UI는 텍스트를 갱신하지않는다.
const bool bChanged = previewManager->ShowNextWeapon();
if (bChanged == false)
{
return;
}
SetWeaponInfo();