VanController와 Van Data

devKyoun·2024년 12월 28일
0

Unity

목록 보기
25/27

Van Data를 이용한 데이터 업데이트

인게임에서 플레이 한 뒤 모인 골드를 통해 Van을 업그레이드 해준다.
그렇기에 Van을 업그레이드 한 부분을 관리 할 Data Manage를 필요로 한다.

Data Manager

public class DataManager : Singleton<DataManager>
{

    public PlayerDatas playerData;
    private string path;
    [SerializeField]
    private string fileName = "/save.txt";
    private string keyWord = "sadiqwjwkd#dkwda!! ej2kS@@";

    private void Start()
    {
        path = Application.persistentDataPath + fileName;
        Debug.Log(path);
        LoadData();
    }

    public void SaveData()
    {
        string data = JsonUtility.ToJson(playerData);
        File.WriteAllText(path, EncryptAndDecrypt(data));
    }

    public void LoadData()
    {
        if (!File.Exists(path))
        {
            SaveData();
        }
        string data = File.ReadAllText(path);
        playerData = JsonUtility.FromJson<PlayerDatas>(EncryptAndDecrypt(data));
        UIManager.Instance.UpdateMoneyText(playerData.money);
        UIManager.Instance.UpdateBoosterSpeedLevelAndMoney(playerData.lv_speed, playerData.needUpgradeGold_speed);
        UIManager.Instance.UpdateCarHpLevelAndMoney(playerData.lv_durability, playerData.needUpgradeGold_durability);
        UIManager.Instance.UpdateOfflineRewardsLevelAndMoney(playerData.lv_offline, playerData.needUpgradeGold_offline);
    }

    private string EncryptAndDecrypt(string data)
    {
        string result = "";
        for (int i = 0; i < data.Length; i++)
        {
            result += (char)(data[i] ^ keyWord[i % keyWord.Length]);
        }

        return result;
    }


    public void UpgradeBoosterSpeedData()
    {
        if (playerData.money < playerData.needUpgradeGold_speed)
            return;
        else
        {
            playerData.boosterSpeedValue += 0.25f;

            playerData.money -= playerData.needUpgradeGold_speed;
            UIManager.Instance.UpdateMoneyText(playerData.money);
            playerData.needUpgradeGold_speed += 10;
            playerData.lv_speed++;

        }
        UIManager.Instance.UpdateBoosterSpeedLevelAndMoney(playerData.lv_speed, playerData.needUpgradeGold_speed);

        SaveData();
    }
    public void UpgradeDurabilityData()
    {
        if (playerData.money < playerData.needUpgradeGold_durability)
            return;
        else
        {
            playerData.maxVanHP += 1.0f;
            playerData.money -= playerData.needUpgradeGold_durability;
            UIManager.Instance.UpdateMoneyText(playerData.money);
            playerData.needUpgradeGold_durability += 10;
            playerData.lv_durability++;
        }

        UIManager.Instance.UpdateCarHpLevelAndMoney(playerData.lv_durability, playerData.needUpgradeGold_durability);
        SaveData();
    }

    public void UpgradeOfflineMoneyData()
    {
        if (playerData.money < playerData.needUpgradeGold_offline)
            return;
        else
        {
            playerData.increaseMoneyOffline += 0.2f;
            playerData.money -= playerData.needUpgradeGold_offline;
            UIManager.Instance.UpdateMoneyText(playerData.money);
            playerData.needUpgradeGold_offline += 10;
            playerData.lv_offline++;
        }

        UIManager.Instance.UpdateOfflineRewardsLevelAndMoney(playerData.lv_offline, playerData.needUpgradeGold_offline);

        SaveData();
    }

    public void UpdateMoney(float _money)
    {
        playerData.money += (int)_money;
        UIManager.Instance.UpdateMoneyText(playerData.money);
        SaveData();
    }

    public void SetVanData(VanData vanData)
    {
        vanData.maxVanHP = playerData.maxVanHP;
        vanData.boosterSpeedValue = playerData.boosterSpeedValue;
    }
}

업그레이드 한 내역을 메인 메뉴에서 진행 한 경우 실시간으로 JSON 형태로 저장이 된다.
게임을 시작 할때 해당 JSON 파일의 Van Data를 담을 Van Data << Plain Class >> 를 만들어 주었다.

VanData

public class VanData
{

    

    private float straightSpeed = 40;
    public float StraightSpeed { get { return straightSpeed; } }
    private float straightMaximumSpeed = 140.0f;
    public float StraightMaximumSpeed { get { return straightMaximumSpeed; } }
    private float straightMinimumSpeed = 20.0f;
    public float StraightMinimumSpeed { get { return straightMinimumSpeed; } }


    private float sideSpeed = 8;
    public float SideSpeed { get {  return sideSpeed; } }

    private float sideMinimumSpeed = 8.0f;
    public float SideMinimumSpeed { get { return sideMinimumSpeed; } }
    private float sideMaximumSpeed = 14.0f;
    public float SideMaximumSpeed { get { return sideMaximumSpeed; } }

    private float moveSmoothValue = 0.05f;
    public float MoveSmoothValue {  get { return moveSmoothValue; } }
    private float increaseValue = 2f;
    public float IncreaseValue { get { return increaseValue; } }
    

    public float maxVanHP = 20;
    public float boosterSpeedValue;


    public VanData()
    {
        DataManager.Instance.SetVanData(this);
    }
}

게임을 시작할때 해당 VanData를 생성을 하고 이 VanData를 VanController에서 사용을 해준다.

VanController

private void Start()
{
    data = new VanData();


    // 옵저버 세팅
    if (vanUIUpdater != null)
        Attach(vanUIUpdater);
    if (cameraHandler != null)
    {
        Attach(cameraHandler);
    }

    inputHandler = new InputHandler();
    vanEngine = new VanEngine(data, vanUIUpdater);
    vanDrive = new VanDrive(data, rigidbody, transform);
    crushManager = new CrushManager(data, vanUIUpdater);

    firstPosZ = transform.position.z;
}

즉 Data Manager를 JSON 형태로 Van의 상태를 계속 저장해서 손실되지 않게 해주고
게임 시작시 VanData 클래스를 재생성 함으로써 이 데이터를 가지고 게임 내에서 사용 해주는 구조이다.

profile
Game Developer

0개의 댓글