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

이형원·2025년 8월 21일
0

XR플밍

목록 보기
172/215

1. 금일 한 업무

PR은 안 올렸고 아래와 같은 작업을 했다.

  • 게임 씬까지 연결할 UI 작업
  • 캐릭터 편성에 사용하는 데이터 - 플레이어 담당자가 구성한 데이터와 연결 작업
    (현재 캐릭터 편성 관련 기능에서는 연결 완료)

  • 신규 UI 두 개 추가 건

  • 러프하게 UI 연결

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

2.1 캐릭터 데이터 구조 분석

플레이어의 데이터가 워낙 방대하다 보니, 유닛 관련 데이터만 해도 엄청난 것을 볼 수 있었다. 이걸 언제 다 분석하나, 결론으로 정리할 수 있는 건 다음과 같았다.

파악한 정도로만 이 정도고, 진짜 데이터 종류가 토 나오게 많다. 심지어 리더 효과는 아직 구성도 채 안 된 상태라서 이거까지 추가되면 얼마나 머리 아플지 감이 안 잡힌다.

2.2 실행 순서의 문제 및 초기화

UI 구성을 마치고 나서 데이터를 연결하는 작업을 진행해야 했다. 데이터가 저렇게 복잡하니 결국 당사자에게 설명을 받아 들은 바로는, UnitStatus 생성자로 생성을 한 다음에 데이터에 관한 정보를 싹 다 불러오면 된단다. 그래서 일단 코드 분석을 마치고 연결을 시도해봤는데, 이전에서는 발생하지 않는 문제가 계속 발생했다.

NullReferenceException이다. 분명 Null이 나지 않도록 List나 데이터의 초기화를 마쳤는데도 계속 Null 오류가 발생하는 것을 확인했다. 구체적인 오류 발생 상황은 다음과 같았다.

  • Debug.Log로 찍었을 땐 Awake 단계에서 TeamOrganizeManager의 데이터와 SelectedCharacterUnit의 초기화 과정이 분명 진행되고 있는데, SelectedCharacterUnit 이 UI를 업데이트하는 과정에서 TeamOrganizeManager의 데이터를 가져올 때 Null이 되어버리는 현상이 발견됨. 다만 매번 발생하는 것이 아니고 발생할 때도 있고 발생하지 않을 때도 있음.
    또한 해당 Null 오류가 발생했을 때 인스펙터 상에서 데이터가 초기화되지 않았는지 확인하려고 해당 컴포넌트를 눌렀을 때, 해당 컴포넌트가 정상적으로 초기화되면서 이후로는 정상 작동되는 현상이 발견됨.

초기화가 안 됐나 확인하려고 하면 그때가 되서 초기화가 되고 정상 작동을 해 버리니 디버깅이 참 어려웠다. 하지만 결국에 원인을 찾게 되었는데, 이는 결국 내 실수였다.

[Serializable]
public class TeamPresetData
{
    public UnitStatus[] Statuses;

    public TeamPresetData(int size)
    {
        Statuses = new UnitStatus[size];        
    }
}

처음에 Data를 저장하기 위해 만든 클래스는 이와 같이 구성되어 있었지만, 여기서 UnitStatus를 초기화하는 코드가 없었던 것이다. 이에 따라 어떨 때는 초기화가 되고, 어떨 때는 초기화가 안 되기 때문에 발생했던 문제였다.
담당자의 코드를 가져올 때 생성하는 과정에 대해 깊게 생각하지 못해 발생된 문제였다.

이에 따라서 코드를 아래와 같이 수정하여 해당 문제를 해결했다.

[Serializable]
public class TeamPresetData
{
    public UnitStatus[] Statuses;

    public TeamPresetData(int size)
    {
        Statuses = new UnitStatus[size];
        // 각각의 UnitStatus를 초기화
        for (int i = 0; i < size; i++)
        {
            Statuses[i] = new UnitStatus(null, 0);
        }
    }
}

3. 개선점 및 과제

3.1 데이터의 분리 및 UI 연동

3.2 씬 연결

3.3 리팩토링

3.4 프리셋 정보 데이터베이스 저장

profile
게임 만들러 코딩 공부중

0개의 댓글