스크롤뷰는 매번 세팅할 때마다 이상하게 작동하는 것 같다. 특히 Vertical Layout Group을 적용해서 그런가, 우선은 이런 세팅으로 해놨지만 나중에 수정될 수도 있다,
계속 패널이 이상하게 위치해서 오프셋으로 처리하고, 순서가 자꾸 거꾸로 되서 Reverse Arrangement 처리를 했다. 지금은 이걸로 잘 작동되지만, 추후에 문제가 생기면 다시 고칠 수도 있다.
프리셋 확장 기능을 넣기 위해서 생성되지 않은 슬롯에 대한 체크를 해야만 했다. 처음에는 아래와 같이 체크를 하려고 했다.
if (_currentCharacterSOs[index] == null)
{
...
}
하지만 이와 같이 처리했을 경우, ArgumentException으로 index가 범위 밖으로 벗어났다는 오류가 발생했다.
문제는 해당 if문이 처리되는 과정 자체가 오류여서 null 체크가 되지 않는다는 것이었다. 직접적으로 null 체크를 하기가 어려우므로 다른 방법을 생각해보다, 현재 리스트의 개수(Count를 세는 방식으로 전환했다.
또한 기능을 분리하여 아래와 같이 작성했다.
#region Preset
public void SelectCharacterPreset(int index)
{
// 리더 캐릭터가 배치되지 않았을 시 경고 팝업 띄우기
if (_currentCharacterSOs[0] == null)
{
if (PopupManager.Instance != null)
{
PopupManager.instance.ShowPopup("Leader is not added.\nPlease add.");
}
return;
}
// 해당 프리셋이 생성되지 않은 프리셋일 시 확장 가능한지 확인하고, 확장을 진행
if (_selectedCharacters.Count < index + 1)
{
if (PopupManager.Instance != null)
{
PopupManager.instance.ShowConfirmationPopup("Add Preset?\nConsumes 500 Gold.", () => CreatePreset(index), null);
}
}
else
{
LoadPreset(index);
}
}
private void CreatePreset(int index)
{
// TODO : 금액이 부족할 시에 조건 추가
Debug.Log("Used 500 Gold");
_selectedCharacters.Add(new SelectedCharacters(5));
// 이 부분은 UI 디자인 변경 시 변경 필요
_presetAddButton[index - 2].buttonText = $"{(index + 1)}";
_presetAddButton[index - 2].UpdateUI();
LoadPreset(index);
}
private void LoadPreset(int index)
{
_currentCharacterSOs = _selectedCharacters[index].CharLists;
_currentCost = 0;
_currentOverallPower = 0;
for (int i = 0; i < _currentCharacterSOs.Length; i++)
{
if (_currentCharacterSOs[i] != null)
{
_currentCost += _currentCharacterSOs[i].Cost;
_currentOverallPower += _currentCharacterSOs[i].OverallPower;
}
}
OnCharacterDataChanged?.Invoke();
}
#endregion