XR플밍 - (휴일작업) 기업협약 프로젝트 34.1일차 (10/3)

이형원·약 17시간 전
0

XR플밍

목록 보기
214/215

추석을 낀 긴 연휴의 시작이고, 조금은 기분 전환이 필요해서 작업 자체는 많이 하지 못했다. 이슈도 있었다 보니 오늘은 조금 쉬어가는 느낌으로 정리하려고 한다.

1. 금일 한 업무 정리

  • 게임 출시 리젝 판정, 그리고 대응
  • 마법석 강화 시스템 구현

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

2.1 게임 출시에 대한 리젝 및 대응

게임 출시를 위해서 구글 플레이 콘솔을 통해 심사를 받았다. 그리고, 어젯밤 출시에 대해 리젝이 되었다는 결과를 받았다.

리젝의 사유는 캐릭터 업그레이드 시스템에서 캐릭터 상세 정보를 표시하기를 눌렀을 때, 캐릭터 정보가 제대로 표시되지 않고 공백으로 뜬다는 것이었다.

한 번에 출시할 수 있으면 좋았으나, 리젝 사유가 다행히도 명확했기 때문에 해당 문제만 해결하면 출시가 될 수 있을 것이라고 기대하며 우선은 해당 문제가 왜 발생하는지 확인했다.

  • 에디터 상에서는 잘 작동된다, 하지만 빌드 버전에서는 업그레이드 상세 정보가 뜨지 않는 문제

빌드본에서 실제로 실행시켜 봤을 때, 이와 같이 강화 상세정보를 눌렀을 때 제대로 실행되지 않는 것을 확인할 수 있었다.
여기서 캐릭터 아이콘 및 스킬 아이콘이 표기되지 않는 문제가 리젝의 사유였다.

실제로 이렇게 특정 아이콘이 없는, 그냥 빈 화면으로만 출력되어 리젝을 당한 팀이 제법 있었기 때문에 이와 같은 사유로 리젝이 되지 않도록 유의할 필요가 있었다.

  • 아이콘이 뜨지 않는 이유? 어드레서블 설정 문제 때문

그러면 에디터 상에서는 연동이 잘 되는데, 빌드본에서 뜨지 않는 이유는 무엇인가.
이유는 프로젝트에 설정된 어드레서블 세팅에서, 캐릭터의 LevelUpData가 어드레서블로 설정이 되어 있지 않기 때문이었다.

구글 플레이에서 게임을 출시하기 위해서, 게임 용량이 80MB를 넘기지 않는 것이 좋으며, 추가적인 리소스를 어드레서블로 처리한 부분이 있다. 흔히 게임에서 추가 리소스 다운을 받도록 요청하는 부분이 이와 같이 기본 게임 용량에 데이터를 포함하지 않도록 하는 요소이다.

다만 필수적인 게임 리소스 중 하나인 LevelUpData가 리소스에 포함되지 않아, 게임 캐릭터의 레벨업 정보를 가져올 수 없으므로 NullReferenceException이 뜨면서 해당 UI가 제대로 표기되지 않는 문제가 발생했다.

이는 가챠 등 다른 요소에서도 데이터가 들어가야 하는 요소에서도 동일한 문제가 발생했고, 필요한 데이터를 어드레서블로 등록한 다음 추가 다운 리소스 파일로 등록하는 과정을 거친 후에 해결되었다.

2.2 마법석 강화 확률 적용

캐릭터 레벨별 스테이터스를 적용하는 방식과 비슷하게 적용했다.

using System;
using System.Collections.Generic;
using UnityEngine;

[CreateAssetMenu(fileName = "MagicStoneUpgradeProbData", menuName = "Data/Upgrade/MagicStoneUpgradeProbData")]
public class MagicStoneUpgradeProbData : ScriptableObject
{
    public List<MagicStoneLevelGrowth> StoneUpgradeProbs;

    public List<SubGradeProb> GetCurrentLevelProbData(int level)
    {
        MagicStoneLevelGrowth levelGrowth = StoneUpgradeProbs.Find(l => l.Level == level);
        if (levelGrowth.Equals(default(MagicStoneLevelGrowth)))
        {
            Debug.LogWarning($"[MagicStoneUpgradeProbData] 해당 Level({level}) 데이터가 없음");
            return null;
        }

        return levelGrowth.GradeProbs;
    }
}

[Serializable]
public struct MagicStoneLevelGrowth
{
    public int Level;
    public List<SubGradeProb> GradeProbs;
}

[Serializable]
public struct SubGradeProb
{
    public SubGrade Grade;
    public float Probable;
}

UI상 출력은 아래와 같이 진행한다.

private void UpdateStoneProbable()
{
    List<SubGradeProb> probs = _currentMagicStoneUnit.Data.UpgradeProbData.
        GetCurrentLevelProbData(_currentMagicStoneUnit.Data.UpgradeData.CurrentUpgradeData.UpgradeLevel);
    
    for(int i = 0; i < _stoneProbleText.Length; i++)
    {
        _stoneProbleText[i].text = probs[i].ToString();
    }
}

3. 개선점 및 과제

3.1 UI 폴리싱 작업

현재 UI 폴리싱을 위한 작업 요청을 받은 부분이 있다. 해당 작업을 진행해야 한다.

3.2 게임 출시를 위한 마무리 작업

3.3 리팩토링

profile
게임 만들러 코딩 공부중

0개의 댓글