2016-11-06 15 views
0

私はゲームで簡単なキャラクターショップを作ろうとしています。 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; 
} 

答えて

0

問題を発見するのは簡単です。

ボタンを押して状態を保存すると、"playerInfo.shopstate"にはdata.bought = 2が含まれます。次回にゲームをロードすると、各ボタンはLoad()メソッドを呼び出し、それぞれが同じファイルを読み込みます。ファイルに2があるため、各ボタンはbought = 2;

となります。すべてのボタンは同じショップに属していますが、それぞれがショップ内でユニークな状態にあるとします。これを解決するにはいくつかの方法があります。たとえば、各ボタンの状態を保存し、右ボタンの正しい値を読み込むことを担当するShopManagerがあります。

関連する問題