私はゲームで簡単なキャラクターショップを作ろうとしています。 4つのUIボタンを作成し、クリックするたびにBuySkin関数を呼び出しています。これは普遍的なスクリプトであり、私はこれらのボタンのすべてを一つずつ置いてから、私はちょうど価格のような変数を調整しました。私は店の状態を保存することに問題があります。私の心に最初に来たことはこれです。しかし、私が1つのキャラクターを購入してから、ゲームを再開すると、すべてのキャラクターがロック解除されます。助言がありますか?ショップの状態を保存する
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
public class Button : MonoBehaviour {
public int price = 100;
public int bought = 1;
public AnimatorOverrideController overrideAnimator;
private PlayerController player;
private Text costText;
void Start()
{
player = GameObject.FindObjectOfType<PlayerController>();
costText = GetComponentInChildren<Text>();
costText.text = price.ToString();
Load();
if (bought == 2)
{
costText.enabled = false;
}
else
{
costText.enabled = true;
}
}
public void BuySkin()
{
if(CoinManager.coins >= price)
{
if(bought == 1)
{
player.GetComponent<Animator>().runtimeAnimatorController = overrideAnimator;
bought = 2;
CoinManager.coins -= price;
costText.enabled = false;
Save();
}
}
if (bought == 2)
{
player.GetComponent<Animator>().runtimeAnimatorController = overrideAnimator;
}
}
public void Save()
{
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Create(Application.persistentDataPath + "/playerInfo.shopstates");
ShopData data = new ShopData();
data.bought = bought;
bf.Serialize(file, data);
file.Close();
}
public void Load()
{
if (File.Exists(Application.persistentDataPath + "/playerInfo.shopstate"))
{
BinaryFormatter bf = new BinaryFormatter();
FileStream file = File.Open(Application.persistentDataPath + "/playerInfo.shopstates", FileMode.Open);
ShopData data = (ShopData)bf.Deserialize(file);
file.Close();
bought = data.bought;
}
}
}
[Serializable]
class ShopData
{
public int bought;
}