XR플밍 - 12. UnityEngine3D Reactive 프로그래밍 - 기업협약 프로젝트 2일차 (8/19)

이형원·2025년 8월 19일
0

XR플밍

목록 보기
170/215

1. 금일 한 업무

  • 로비 씬 전체적인 틀 구현
  • 코스트가 풀일 때 빈 칸은 X자로 표기되도록 설정
  • 프리셋 확장 기능 구현 프리셋 확장 기능 구현

2. 문제의 발생과 해결 과정

2.1 스크롤 뷰의 말썽

스크롤뷰는 매번 세팅할 때마다 이상하게 작동하는 것 같다. 특히 Vertical Layout Group을 적용해서 그런가, 우선은 이런 세팅으로 해놨지만 나중에 수정될 수도 있다,

계속 패널이 이상하게 위치해서 오프셋으로 처리하고, 순서가 자꾸 거꾸로 되서 Reverse Arrangement 처리를 했다. 지금은 이걸로 잘 작동되지만, 추후에 문제가 생기면 다시 고칠 수도 있다.

2.2 프리셋 확장 기능, 예외 처리의 방법에 대하여

프리셋 확장 기능을 넣기 위해서 생성되지 않은 슬롯에 대한 체크를 해야만 했다. 처음에는 아래와 같이 체크를 하려고 했다.

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

3. 개선점 및 과제

3.1 팝업매니저를 이용한 로비 씬의 상호작용 구현

3.2 프리셋 확장 시도할 때 돈이 부족할 때 - 재화의 연동을 통한 금액 부족시 효과 TODO

3.3 Adressable R&D

profile
게임 만들러 코딩 공부중

0개의 댓글