1인 개발/PushAndSlash

푸쉬앤슬래시 개인 프로젝트 15일차

잼잼재미 2024. 5. 27. 05:39

구현 내용


1. 상점 구현


 

  • 캐릭터를 뽑기 가능
  • 일반 / 레어 / 유니크 캐릭터 뽑기 가능 (현재 일반만 구현)
  • 1회, 10회 뽑기 가능 (현재 1회만 구현)

 

public void DrawCharacter(int B, int A, int S, int SS)
{
    int count = _dataWrapper.CharacterDatas.Length;

    while (true)
    {
        int CharacterRank = Random.Range(0, 4);
        int CharacterNum = Random.Range(0, count);
        int randomValue = Random.Range(1, 101);

        if(CharacterRank == 0)  // B랭크
        {
            if (_dataWrapper.CharacterDatas[CharacterNum].CharacterRank != CharacterData.Rank.B) continue;
            else
            {
                if (randomValue <= B)  // B랭크 확률
                {
                    _drawCharacter = _dataWrapper.CharacterDatas[CharacterNum];

                    if (!CharacterIsGet(_drawCharacter)) GameManager.I.DataManager.DataWrapper.CharacterInventory.Add(_drawCharacter);
                    else
                    {
                        int inventoryOrder = FindInventoryOrder(_drawCharacter);
                        StarExpUp(inventoryOrder);
                    }
                    break;
                }
                else continue;
            }
        }
        else if(CharacterRank == 1) // A랭크
        {
            if (_dataWrapper.CharacterDatas[CharacterNum].CharacterRank != CharacterData.Rank.A) continue;
            else
            {
                if (randomValue <= A)  // A랭크 확률
                {
                    _drawCharacter = _dataWrapper.CharacterDatas[CharacterNum];

                    if (!CharacterIsGet(_drawCharacter)) GameManager.I.DataManager.DataWrapper.CharacterInventory.Add(_drawCharacter);
                    else
                    {
                        int inventoryOrder = FindInventoryOrder(_drawCharacter);
                        StarExpUp(inventoryOrder);
                    }
                    break;
                }
                else continue;
            }
        }
        else if(CharacterRank == 2) // S랭크
        {
            if (_dataWrapper.CharacterDatas[CharacterNum].CharacterRank != CharacterData.Rank.S) continue;
            else
            {
                if (randomValue <= S)  // S랭크 확률
                {
                    _drawCharacter = _dataWrapper.CharacterDatas[CharacterNum];

                    if (!CharacterIsGet(_drawCharacter)) GameManager.I.DataManager.DataWrapper.CharacterInventory.Add(_drawCharacter);
                    else
                    {
                        int inventoryOrder = FindInventoryOrder(_drawCharacter);
                        StarExpUp(inventoryOrder);
                    }
                    break;
                }
                else continue;
            }
        }
        else if (CharacterRank == 3) // SS랭크
        {
            if (_dataWrapper.CharacterDatas[CharacterNum].CharacterRank != CharacterData.Rank.SS) continue;
            else
            {
                if (randomValue <= SS)  // SS랭크 확률
                {
                    _drawCharacter = _dataWrapper.CharacterDatas[CharacterNum];

                    if (!CharacterIsGet(_drawCharacter)) GameManager.I.DataManager.DataWrapper.CharacterInventory.Add(_drawCharacter);
                    else
                    {
                        int inventoryOrder = FindInventoryOrder(_drawCharacter);
                        StarExpUp(inventoryOrder);
                    }
                    break;
                }
                else continue;
            }
        }
    }
}

 

Random 함수를 사용해서 캐릭터 뽑기 구현

  • 랜덤 함수로 캐릭터의 랭크 결정
  • 랜덤 함수로 1~100의 숫자를 결정해서 확률 적용
  • 전체 캐릭터 중, 랜덤으로 하나의 캐릭터를 결정
  • 결정한 캐릭터가 랜덤 랭크와 동일하고, 매개변수의 일정 확률 이상이라면 결정한 캐릭터를 뽑음
  • 일정 확률 이상이 아니라면, 위 과정을 처음부터 반복

 

회고


우선 이전에 Easy Save 에셋의 Auto Save 사용을 제거했다. 이유는 Auto Save를 사용 시, 현재 씬에서는 간편하게 잘 저장되지만, 씬을 이동하게 되면 저장된 데이터가 로드되지 않고 새로운 별개의 데이터가 생성되었다. 아마도 Auto Save 기능에서 추가적인 셋팅을 해야하지만, 아직 제대로 숙지하지 못한 것 같아서 Easy save 에셋의 저장 기능만 사용하는 것으로 변경했다. 그리고 로비 씬에서 상점 기능을 구현했다. 구매한 UI 에셋의 데모 프리팹을 사용했지만, 내가 기획한 게임 컨셉에 맞게 수정이 많이 필요했다. 현재 캐릭터를 랜덤으로 뽑는 기능을 구현했으며, 추가적인 구현이 필요하다. 코드를 작성하는 것 보다 생각보다 항상 UI를 재배치하는 것에 많은 시간이 걸리는 것 같다. 내일은 상점 기능을 완성하고, 구현한 UI를 전체적으로 다듬는 작업을 하도록 하겠다!