XR플밍 - 12. UnityEngine3D Reactive 프로그래밍 - 기업협약 프로젝트 23일차 (9/17)

이형원·2025년 9월 17일
0

XR플밍

목록 보기
199/215

1. 금일 한 업무 정리

  • 캐릭터 DB 연동에 대해 데이터를 선택적으로 보내는 방법 구성
  • 캐릭터 편성 UI에서 캐릭터 위치를 아치형으로 배치하도록 변경

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

2.1 캐릭터 편성 UI에서의 캐릭터 배치

기존에 일렬로 SPUM 캐릭터를 생성하는 방식에서, 아치형으로 캐릭터를 배치하는 방식을 요청받았다.
따라서 아래와 같이 코드를 수정했다.

private void UIUpdate()
{
    if (_manager != null)
    {
        _status = _manager.GetCurrentPresetData(_index);
    }

    if (_manager == null || _status == null || _status.Data == null)
    {
        if (_obj != null)
        {
            Manager.Pool.Release(_obj);
            _obj = null;
        }

        if(_index == 0)
        {
            _crownImage.SetActive(false);
        }
    }
    else
    {
        if (_status.Data != null)
        {
            if(_index == 0)
            {
                _crownImage.SetActive(true);
            }

            if (_obj == null)
            {
                switch(_index)
                {
                    case 0: 
                        _obj = Manager.Pool.Get(_status.Data.UnitPrefab, new Vector3(-0.5f, -0.3f, 0), Quaternion.Euler(0f, 0f, 0f));
                        break;
                    case 1:
                        _obj = Manager.Pool.Get(_status.Data.UnitPrefab, new Vector3(0.6f, 1f, 0), Quaternion.Euler(0f, 0f, 0f));
                        break;
                    case 2:
                        _obj = Manager.Pool.Get(_status.Data.UnitPrefab, new Vector3(2.1f, 1.6f, 0), Quaternion.Euler(0f, 180f, 0f));
                        break;
                    case 3:
                        _obj = Manager.Pool.Get(_status.Data.UnitPrefab, new Vector3(3.7f, 0.8f, 0), Quaternion.Euler(0f, 180f, 0f));
                        break;
                    case 4:
                        _obj = Manager.Pool.Get(_status.Data.UnitPrefab, new Vector3(5f, -0.4f, 0), Quaternion.Euler(0f, 180f, 0f));
                        break;
                    default:
                        break;

                }
            }
        }
    }
}

캐릭터의 보는 방향을 왼쪽 두 캐릭터는 오른쪽 방향, 나머지 캐릭터는 왼쪽 방향으로 바라보도록 설정하였다.

2.2 캐릭터 데이터를 일부만 DB에 등록하기

해당 방식은 다음과 같다.

  • DTO - Data Trasfer Object 클래스를 생성
    해당 컴포넌트를 이용하여 데이터 중 원하는 부분만 등록하도록 한다.
[System.Serializable]
public class UnitDataDTO
{
    public int ClassSynergy;
    public int Cost;
    public string Description;
    public Grade Grade;
    public int ID;
    public string Name;
    public int PrefferedLine;
    public int Synergy;
    public UnitStats[] UnitStats;
}

이와 같이 클래스를 만든 후, 해당 클래스를 반환하는 함수를 UnitData에 넣는다.

public UnitDataDTO ToDTO(UnitData data)
{
    return new UnitDataDTO
    {
        ClassSynergy = (int)data.ClassSynergy,
        Cost = data.Cost,
        Description = data.Description,
        Grade = data.Grade,
        ID = data.ID,
        Name = data.name,
        PrefferedLine = data.PerferredLine,
        Synergy = (int)data.Synergy,
        UnitStats = data.UnitStats
    };
}

다음으로 해당 데이터를 Init하는 함수를 만들어 이를 로비 씬이 로딩 될 때 실행되도록 한다.

public async UniTask InitializeCharacterData()
{
    var initRef = FirebaseManager.DataReference.Child("InitCharacterData");

    foreach (var charData in Manager.Data.UnitDataDic.Values)
    {
        UnitDataDTO dto = charData.ToDTO(charData);
        await initRef.Child(charData.Name).
            SetRawJsonValueAsync(JsonUtility.ToJson(dto));
    }
}

3. 개선점 및 과제

3.1 캐릭터 업그레이드 데이터를 유저별로 저장하기

해당 부분의 경우 현재 제대로 실행되고 있지 않아 강사님께 찾아가서 여쭤볼 예정이다.

3.2 OBT 준비를 위한 업무 분배

3.3 UI 폴리싱

3.4 리팩토링

profile
게임 만들러 코딩 공부중

0개의 댓글