1인 개발/숫자의 신

숫자의 신 개인 프로젝트 8일차

잼잼재미 2024. 8. 7. 03:53

구현 내용


1. 데이터 저장


https://kkln2486.tistory.com/408

 

데이터 저장 (Easy Save 에셋)

Easy save데이터를 쉽고 빠르게 저장 가능모바일 기기에서도 빠른 속도 JSON 및 XML과 비교하여 훨씬 빠르고 훨씬 적은 메모리 사용효율적이고 안전한 데이터 암호화빠른 개발과 오래된 지속적인 업

kkln2486.tistory.com

 

 

데이터 저장은 Easy Save 에셋을 사용했다. 에셋을 통해 쉽고 안전하게 데이터를 로컬 저장할 수 있다. 전체적인 데이터는 모두 에셋을 이용해서 로컬에 저장하고, 랭킹 관련 데이터만 뒤끝 서버를 이용할 것이다.

 

 

2. 인벤토리 구현


 

 

  • 현재 획득한 Number 확인 가능
  • 숫자 범위 별, 칼라 적용
  • 장착 버튼 미구현

 

 

DataManager 스크립트

[System.Serializable]
public class GameData
{
    [Header("Inventory")]
    public bool[] InventoryNumbers = new bool[50];
    public int[] EquipNumbers = new int[5];
}


public void Init()
{
    GameData = new GameData();

    for (int i = 0; i < GameData.EquipNumbers.Length; i++)
    {
        GameData.EquipNumbers[i] = -1;
    }
    
    for (int i = 1; i <= 9; i++)
    {
        GameData.InventoryNumbers[i] = true;
    }

}

 

DataManager에 현재 숫자의 보유 상태를 알 수 있는 bool의 배열과 장착한 숫자의 int 배열을 정의했다. 그리고 class를 선언하여 각각 초기값을 입력했다. 게임 시작 시, 아무것도 장착하지 않기 때문에 -1이라는 정수값으로 초기화했다. 그리고 숫자 1~9는 처음부터 가지고 있는 숫자이므로 true로 초기화 했다.

 

 

EquipSlot 스크립트

public void ShowEquipNumber()
{
    _button.SetActive(false);

    if (GameManager.I.DataManager.GameData.EquipNumbers[_slotNum] == -1) return;
    else
    {
        _number.text = GameManager.I.DataManager.GameData.EquipNumbers[_slotNum].ToString();
        _button.SetActive(true);
    }
}

 

DataManager의 EquipNumber 배열의 값을 읽어서 숫자를 장착 중이면, 오브젝트를 활성화하고, 장착 중이 아니라면, 오브젝트를 비활성화 했다. 각 Slot에 스크립트를 적용했다.

 

 

InventorySlot 스크립트

public void ShowInventoryNumber()
{
    SetColor();
    NoEquipNumber();
    _number.text = _slotNum.ToString();

    if (GameManager.I.DataManager.GameData.InventoryNumbers[_slotNum]) EquipNumber();  
}

 

EquipSlot 스크립트와 비슷하게 작성했다. 다른점은 오브젝트를 활성화, 비활성화 하지 않고, 획득한 숫자가 아니라면, Color의 A 값을 100으로 설정해서 흐리게 보이도록 했다. 역시나 각각 Slot에 스크립트를 적용했다.

 

 

Inventory 스크립트

private void OnEnable()
{
    SetInventory();
}

private void SetInventory()
{
    for (int i = 0; i < _equipSlotContent.transform.childCount; i++)
    {
        _equipSlotContent.transform.GetChild(i).GetComponent<EquipSlot>().ShowEquipNumber();
    }

    for (int i = 0; i < _inventorySlotContent.transform.childCount; i++)
    {
        _inventorySlotContent.transform.GetChild(i).GetComponent<InventorySlot>().ShowInventoryNumber();
    }
}

 

Inventory 스크립트를 Inventory UI에 적용했다. UI 오브젝트가 활성화 될 때 마다, 인벤토리가 변경될 수 있도록 OnEnable 함수에서 실행했다. 각각 Slot을 반복문을 통해 해당 숫자가 DataManager에 가지고 있는지 판단을 해서 인벤토리에 보여지도록 구현했다.

 

 

회고


인벤토리를 구현하기 위해 UI를 알맞게 제작하고, 데이터 저장을 구현했다. 데이터 저장은 이전 Json으로 구현한 적 있었지만, 계속 Json을 구현하는 것 보다, Easy Save 에셋을 사용하는 것이 간단하다고 생각해서 에셋을 사용했다. 현재, 인벤토리는 구현했고, 추가로 장착 시스템을 구현해서 완성하도록 하겠다.