2016-04-14 22 views
0

私が達成しようとしているのは、自分のファイルに保存されている情報に応じて特定のオブジェクトをアクティブまたは非アクティブにしたいシーンです。Unityのシーンにgameobjectsの状態を保存してロードする

ている例:私のゲームでは

、私は壁がある私のシーンの一つをロードするとき、私は特定のポイントに本棚を押して、非アクティブに設定する壁をトリガします。私はこのシーンを終了し、シーンに戻ってくると、壁が再びアクティブになります。私が望むのは、壁が非アクティブに設定されていて、シーンを離れても非アクティブなままで、後でシーンに戻ったときには表示されません。

私が抱えている問題は、これを行う方法です。

[Serializable] 
public class Game_Info { 

    public bool WoodWallEnabled; 

    public void Default(){ 
     WoodWallEnabled = true; 
    } 
} 

マイWoodWallスクリプト:

public class Get_WoodWall_Info : MonoBehaviour { 

    void Awake() { 
     gameObject.SetActive (Helper_Manager.instance.gameInfo.WoodWallEnabled); 
    } 
} 

私が持っている現時点では、私が持っていることは、プレイヤーが「新しいゲーム」ボタンをクリックしたときに、私は新しいGame_Infoを生成し、デフォルトを()を選択しています私はこれを正しい方法でやっていないと感じています。特にこれを行うと、保存されたファイル(Get_WoodWall_Info、Get_WoodWall_Info1など)を操作したい各ゲームオブジェクトに固有のスクリプトが必要になるため、これを処理するより良い方法があります。 ..)しかし、これを行うために膨大な量のスクリプトを作成したとしても、私はゲームオブジェクトの状態を保存する方法を見つけることができません。

このようなデータをどのように処理して渡しますか?

+0

私はあなたの質問の他の部分のための私の答えを編集しました。前にその部分に気付かなかったのは残念です。とにかく、助けてくれる希望。 – DRKblade

答えて

1

私はこの状況ではPlayerPrefが良い選択だと思います。 あなたはこのように行うことができます。

  • コールPlayerPrefs.SetInt("wall enabled", active ? -1 : 0);activeであなたの木の壁の状態を保存するために、壁の状態です。

  • そしてGet_WoodWall_Infoで、代わりにヘルプ・マネージャで値を使用しての、あなたは0からwall enabledキーを設定することもできますので、PlayerPrefsで PlayerPrefs.GetInt("wall enabled") != 0

値は、ゲームセッションを通じて保存されます使用しますあなたが新しいゲームを始めるとき。

あなたはこのように、すべてのゲームオブジェクトのためのスクリプトを作成しないのはなぜEDIT

@JoeyL:

public class StateHandler : MonoBehaviour { 
    void Awake() { 
     string keyName = UnityEngine.SceneManagement.SceneManager.GetActiveScene().name + gameObject.name; 
     if (PlayerPrefs.GetInt(keyName) == 0) 
      gameObject.SetActive(false); 
    } 
    public void SetActiveState (bool state) { 
     string keyName = UnityEngine.SceneManagement.SceneManager.GetActiveScene().name + gameObject.name; 
     PlayerPrefs.SetInt(keyName, state ? -1 : 0); 
     gameObject.SetActive(state); 
    } 
} 

これは、現在のシーン名とあなたの添付ゲームオブジェクト名を使用します。キーとして、このスクリプトを使用するすべてのゲームオブジェクトに別個の名前が付いていることを確認する必要があります。

+0

SetActiveState(bool stat)のPlayerPrefs.SetInt()の最初のパラメータをkeyNameにする必要がありますか? – JoeyL

+0

私はこれが私が探しているものだと本当に思います!私は2D RPGスターターキットを作っています。これを使えば、デベロッパーのためのツールにすることができます.PlayerPrefsは、オンラインでは作っていないものを使っても問題ありません。私たちが話しているように、スクリプトを作ってテストする。 – JoeyL

+0

@JoeyLああ、あなたが正しい、私は間違っていた。また、あなたのゲームで幸運: – DRKblade

1

前述したようにあなただけのWoodWallEnabled変数その後、簡単な使用PlayerPrefを保存している場合。あなたはこのようなオブジェクトの位置やGame_Infoクラス内のすべての変数としてシーン全体の情報を保存する場合さて、あなたは保存それはPlayerPrefを使用して、その後、JsonUtility.ToJsonでJSONクラスを変換する必要があります。ロードするにはPlayerPrefを使用してロードし、次にクラスにシリアル化してJsonUtility.FromJsonとします。

アレイを含む完全な作業例は:

Serialize and Deserialize Json and Json Array in Unity

+0

うん、私はシーンに重要な情報を保存するつもりだが、すべてではない。本棚の移動について言及したときと同じように、私はその場面で約5冊の本棚を持っていますが、私は一例として1つの位置だけを気にしています。シーンによっては保存が必要なものはほとんどなく、保存されているものもあります。 – JoeyL

+0

私が上に投稿したリンクのソリューションはあなたのために働くはずです。 – Programmer

+0

ありがとうプログラマー私はそれをチェックアウトします。ところで、この方法を使用するセキュリティはどのようになっていますか?私はユニティチュートリアルを見て、PlayerPrefsを使うのは安全ではないということを覚えています。なぜなら、ユーザーは自分が望むようにファイルを編集するだけでいいからです。 – JoeyL

関連する問題