[유니티 C#] 1주차 - FPS + RPG 게임 제작 - Json 저장

한승호·2022년 7월 11일
0

The Last Of City 1주차(4)

저장하기

저장할 요소는 더 늘어날 수 있지만, 우선적으로 플레이어 능력치를 가지고 만들어봤다.

  • 데이터를 관리할 스크립트
  • 능력치가 변할 때 마다 자동 저장
  • 게임 시작 시 이전 데이터를 받아 이어하기 가능

Json 저장

  • 데이터는 GameData에 저장하고 이를 SaveGameData()에서 저장하는 방식이다.
  • 저장할 파일의 이름을 string으로 만들어주고 아래 플레이어관련 프로퍼티를 활용해 자동으로 저장하도록 한다.

플레이어 능력치


private void Awake()
{
    if(instance == null)
    {
        instance = this;
        DontDestroyOnLoad(this.gameObject);
    }
    else
    {
        Destroy(this.gameObject);
    }

    DataController.Instance.LoadGameData();

    var _gameDate = DataController.Instance.gamaData;

    att = _gameDate.player_Att;
    getGold = _gameDate.player_Gold;
    level = _gameDate.player_Level;
    maxLevel = _gameDate.player_MaxLevel;
    curreuntExp = _gameDate.player_CurrentExp;
    maxExp = _gameDate.player_MaxExp;
    currentHp = _gameDate.player_CurrentHP;
    maxHp = _gameDate.player_MaxHP;
    monsterHuntCount = _gameDate.player_MonsterHunterCount;
}
void Start()
{
    weapon = GetComponentInChildren<Weapon>();
    playerController = GetComponent<PlayerController>();
}
    public float MaxHp
    {
        get 
        {
            return maxHp;
        }
        set
        {
            maxHp = value;

            if (PlayerState_UI.instance != null)
            {
                PlayerState_UI.instance.PlayerHp(currentHp, maxHp);

                DataController.Instance.gamaData.player_MaxHP = maxHp;
                DataController.Instance.SaveGameData();
            }
        }
    }

    #region PlayerAttSet
    public int Att
    {
        get 
        { 
            return att;
        }
        set
        {
            att = value;

            if (PlayerState_UI.instance != null)
            {
                PlayerState_UI.instance.PlayerAttText(att);

                DataController.Instance.gamaData.player_Att = att;
                DataController.Instance.SaveGameData();
            }
        }
    }
    #endregion

    #region PlayerHpSet
    public float CurrentHp
    {
        get
        {
            return currentHp;
        }
        set
        {
            currentHp = value;

            if(currentHp > maxHp)
            {
                currentHp = maxHp;
            }
            if(currentHp <= 0)
            {
                currentHp = 0;

                playerController.Die();
            }
            if (PlayerState_UI.instance != null)
            {
                PlayerState_UI.instance.PlayerHp(currentHp, maxHp);

                DataController.Instance.gamaData.player_CurrentHP = currentHp;
                DataController.Instance.gamaData.player_MaxHP = maxHp;
                DataController.Instance.SaveGameData();
            }
        }
    }
    #endregion

    #region PlayerExp
    public float CurreunExp
    {
        get 
        { 
            return curreuntExp;
        }

        set
        {
            curreuntExp = value;

            if(curreuntExp >= maxExp)
            {
                curreuntExp = 0;
                maxExp += maxExp;
                level++;
                Att += 20;

                if(level >= maxLevel)
                {
                    curreuntExp = 0;
                    level = maxLevel;
                }
            }
            if (PlayerState_UI.instance != null)
            {
                PlayerState_UI.instance.PlayerExpText(curreuntExp, maxExp);
                PlayerState_UI.instance.PlayerLevel(level);
                PlayerState_UI.instance.PlayerAttText(att);

                DataController.Instance.gamaData.player_Level = level;
                DataController.Instance.gamaData.player_CurrentExp = curreuntExp;
                DataController.Instance.gamaData.player_MaxExp = maxExp;
                DataController.Instance.SaveGameData();
            }
        }
    }
    #endregion
    
    #region PlayerGold

    public int GetGold
    {
        get
        {
            return getGold;
        }
        set
        {
            getGold = value;

            if (getGold < 0)
            {
                getGold = 0;
            }
            if (PlayerState_UI.instance != null)
            {
                PlayerState_UI.instance.PlayerGoldText(getGold);

                DataController.Instance.gamaData.player_Gold = getGold;
                DataController.Instance.SaveGameData();
            }
        }
    }
    #endregion

    #region MonsterHunterCount
    public int MonsterHunterCount
    {
        get
        {
            return monsterHuntCount;
        }
        set
        {
            monsterHuntCount = value;

            if (PlayerState_UI.instance != null)
            {
                PlayerState_UI.instance.MonsterHunterCount(monsterHuntCount);

                DataController.Instance.gamaData.player_MonsterHunterCount = monsterHuntCount;
                DataController.Instance.SaveGameData();
            }
        }
    }
    #endregion
  • DataController.Instance.gamaData.player_Att = att;
    DataController.Instance.SaveGameData();
  • 이런 식으로 프로퍼티 내에서 gamaData에 접근해 정보를 저장하도록 만들었다.
  • 깔끔하게 한다고 했는데, 잘 모르겠다.. 더 가독성을 높일 수 있는 방법이 있다면 더 수정해 보고 싶은 부분이다.
profile
모든 실수를 경험해 더 발전하고 싶은 개발자입니다.

0개의 댓글