2017-12-07 11 views
1

は私のデータをシリアル化する方法を学習しようとしている私の最後の2時間を費やしてきシリアライズに助けが必要私はこれを試してみました:は、私が「StatContainer」に私のデータをシリアライズするコードが必要

https://gamedevelopment.tutsplus.com/tutorials/how-to-save-and-load-your-players-progress-in-unity--cms-20934

とたくさんの詳細が、私はこれは私がそれを

using UnityEngine; 
using System.Collections; 
using System.Collections.Generic; 
using System.Runtime.Serialization.Formatters.Binary; 
using System.IO; 

public static class SaveLoad { 
public static List<StatContainer> savedGames = new List<StatContainer>(); 

//it's static so we can call it from anywhere 
public static void Save() { 
    SaveLoad.savedGames.Add(StatContainer.current); 
    BinaryFormatter bf = new BinaryFormatter(); 
    //Application.persistentDataPath is a string, so if you wanted you can put that into debug.log if you want to know where save games are located 
    FileStream file = File.Create (Application.persistentDataPath + "/savedGames.gd"); //you can call it anything you want 
    bf.Serialize(file, SaveLoad.savedGames); 
    file.Close(); 
} 

public static void Load() { 
    if(File.Exists(Application.persistentDataPath + "/savedGames.gd")) { 
     BinaryFormatter bf = new BinaryFormatter(); 
     FileStream file = File.Open(Application.persistentDataPath + "/savedGames.gd", FileMode.Open); 
     SaveLoad.savedGames = (List<StatContainer>)bf.Deserialize(file); 
     file.Close(); 
    } 
} 
} 
をシリアル化しようとする方法である

using UnityEngine; 
using System.Collections; 

public class Stats : MonoBehaviour 
{ 
StatContainer stats = new StatContainer(); 

// Use this for initialization 
void Start() { 
    InvokeRepeating ("AddCoins", 4.0f, 2.0f); 
    InvokeRepeating ("AddScore", 1.5f, 1.5f); 
} 

// Update is called once per frame 
void Update() { 
    this.stats.Update(); 
} 

void AddCoins(){  
    if (BunnyScript.BunnyAlive == true) { 
     StatContainer.coins += 1; 

    } 
} 

void AddScore(){ 
    if (BunnyScript.BunnyAlive == true) { 
     StatContainer.score += 1; 
    } 
} 
} 
[System.Serializable] 
public class StatContainer 
{ 
public static int coins = 0; 
public static int totalcoins = 0; 
public static int score = 0; 

public static int personalbest = 0; 
public static float UmbrellaSpeed = 0.1f; 
public static float currentumbdur = 500; 

public static int CarrotSpawnRateLVL = 1; 
public static float CarrotSpawnRate = 60f; 
public static int CarrotSpawnRateUpgradeCost = 15; 


public static int UmbrellaDurabilityLVL = 1; 
public static float UmbrellaDurability = 500; 
public static int UmbrellaDurabilityUpgradeCost = 30; 

public static int UmbrellaSizeLVL = 1; 
public static float UmbrellaSize = 0f; 
public static int UmbrellaSizeUpgradeCost = 25; 


public static int CarrotEffectLVL = 1; 
public static float CarrotEffect = 20; 
public static int CarrotEffectUpgradeCost = 25; 


public static int HealthRegenLVL = 1; 
public static float HealthRegenTime = 4f; 
public static int HealthRegenCost = 100; 


public static int BuyTreesCost = 250; 

public static int Tree1Bought = 0; 
public static float Tree1Size = 0; 
public static int Tree1SizeLVL = 1; 
public static int Tree1SizeUpgradeCost = 50; 

public static int Tree2Bought = 0; 
public static float Tree2Size = 0; 
public static int Tree2SizeLVL = 1; 
public static int Tree2SizeUpgradeCost = 50; 

public static int Tree3Bought = 0; 
public static float Tree3Size =0; 
public static int Tree3SizeLVL = 1; 
public static int Tree3SizeUpgradeCost = 50; 
// and the rest 

public void Update(){ 
    if (score > personalbest) { 
     personalbest = score; 
    } 
} 
} 

私のデータをシリアル化する方法を理解することができ波平

私は、ゲームのbegginingに負荷のfuctionを呼び出して、2秒毎

+0

だから、あなたの質問は何ですか? – kirkpatt

+0

StatContainerのデータをシリアル化する方法 –

+0

問題の詳細を追加する必要があります。 – kirkpatt

答えて

0

ファーストを繰り返し呼び出して使用して保存していますあなたのデータにアクセスするにはStatContainer
に静的メンバを削除しますロード関数の戻りStatContainerとあなたのクラスで統計StatContainerを静的に入れるか、singletonの統計情報を作成することができます。

第二に、私はあなたの目的を知らないが、おそらくあなたは、人間が読み取り可能であるので、あなたがeaselyデータを変更することができ、ファイルを持って、代わりにBinaryFormatxml serializationに見てみることができます。
その場合、私はXMLタグを以下のように見てあなたに甘い。
(そして、あなたがあなたのゲームをリリースするとき、あなたのXMLを暗号化することができます)

[System.Serializable] 
[XmlRoot(ElementName = "stats-of-something")] 
public class StatContainer 
{ 
    [XmlAttribute(AttributeName = "coins")] 
    public int coins = 0; 
    [XmlElement(ElementName = "umbrella-speed")] 
    public float UmbrellaSpeed = 0.1f; 
} 

または

[System.Serializable] 
[XmlRoot(ElementName = "stats-of-something")] 
public class StatContainer 
{ 
    [XmlAttribute(AttributeName = "coins")] 
    private int _coins = 0; 
    [XmlElement(ElementName = "umbrella-speed")] 
    private float _umbrellaSpeed = 0.1f; 

    public int coins { get { return _coins; } set { _coins = value; } } 
    public float umbrellaSpeed { get { return _umbrellaSpeed ; } set { _umbrellaSpeed = value; } } 
} 
関連する問題