2017-02-01 5 views
0

私はc#コードを使用して単一システムで作業しています。 この種の保存システムはどのようにして入手できますか?私の空のGameObjectPlayerPrefs GameObjectと同じ

私は、スクリプトを持っており、ここにある:

Counter.cs

public int counter; 

そして、それは私のCounter.cs上ですべてです。今、もしそれがGameObjectの中にあれば、私はそれを保存して入手することができます。カウンターをCounter.csの中に入れたいだけです。

このようにすることはできますか?

SaveAndLoad.cs

public GameObject SaveCounter; 

public void Save(){ 
    PlayerPrefs.SetInt("Player Score", SaveCounter); 
} 

public void Load(){ 
    PlayerPrefs.GetInt("Player Score")); 
} 

は、私はそれをそのような何かを行うことができますか?その後BinaryFormatterといくつかのヘルパーを使用し

[Serializable] 
public class GameState 
{ 
    int m_Score; 

    public int Score 
    { 
     get { return m_Score; } 
     set { m_Score = value; } 
    } 
} 

:YOUはPLAYER PREFS、IN、NOT STOREゲームの状態RELATED THINGSを

代わりにあなたがシリアライズ可能なオブジェクトを作ることができるべきであるあなたの質問

に答えるために

+1

ゲームの進行状況などを保存するために 'PlayerPrefs'を使用しないでください。しかし、それがあなたが欲しいものなら、あなたはそれをいくらか行うことができます。 –

+0

@m.rogalskiのように言った。それは「道のり」ではありません。私はUnityがこれにスクリプト可能なオブジェクトを使用し、それを保存することを推奨していると思います。 ScriptableObjectsはアセットに保存できます:)。または、独自のカスタムgamesaveファイルを作成します。 – Measuring

+0

@ m.rogalskiだから私はこのようにすることができます PlayerPrefs.SetInt( "Player Score"、SaveCounter ()); PlayerPrefs.GetInt( "Player Score"); – TheGinxx009

答えて

2

このデータをファイルにシリアル化するオブジェクト:

public void StoreGameState(GameState state) 
{ 
    using (BinaryWriter writer = new BinaryWriter(File.OpenWrite("./gamestate.bin"))) 
    { 
     var formatter = new BinaryFormatter() 
     formatter.Serialize(state, writer); 
    } 
} 

public GameState RestoreGameState() 
{ 
    using (BinaryReader reader = new BinaryReader(File.OpenRead("./gamestate.bin"))) 
    { 
     var formatter = new BinaryFormatter() 
     return (GameState)formatter.Deserialize(reader); 
    } 
} 

その後GameObjectあなたの空にGameStateを追加します。

public GameState CurrentProgress; 

そして、あなたは、私が投稿した二つの方法を使用、保存またはロードしたい時はいつでも読み:StoreGameStateRestoreGameStateを。あなたはPlayerPrefs内のデータのこれらの種類を保存するには本当にしている場合

は、しかし、あなたはまだやることができます:

public GameObject SaveCounter; 

public void Save(){ 
    PlayerPrefs.SetInt("Player Score", SaveCounter.GetComponentn<Counter>().counter); 
} 

public void Load(){ 
    SaveCounter.GetComponentn<Counter>().counter = PlayerPrefs.GetInt("Player Score")); 
} 

誰もが推奨されていません。

+0

なぜそれはお勧めですか? – TheGinxx009

+1

@ TheGinxx009 1. 'PlayerPrefs'はいくつかの型(int、float、string)しか格納できません。 2.データが保存される場所を制御できません。 3。データの解釈方法を制御することはできません(ラッパーを記述する必要があります)。 'PlayerPrefs'はプレーヤーの進路ではなくプレーヤーの選好のためのものです。ユーザが初めてチュートリアルウィンドウを見た後にチュートリアルウィンドウを非表示にするには、 'PlayerPrefs'を使用します。 – Measuring

+0

@ TheGinxx009これは永続的なファイルではないためです。基本的には各プラットフォームごとに異なります.Windowsではレジストリを使用しますが、これは決して良い書き方とは言えません。 –

関連する問題