Unityを使ってゲーム中の変数を保存したいのですが保存の仕方で悩んでいます。
RPGゲームなんかでは、プレイヤーが壺を壊してアイテムを拾ったりしますが、勿論この壊れた壺からは再度アイテムが取得できる事は有りません。伝説の剣やキーアイテムなら尚更の事です。
壺が壊されているかどうか、といった状態を保存する為に以下のようなスクリプトを追加するとします。
csharp
1public class tubo{ 2 3 bool isOpen = false; 4 5 bool Open(){ 6 if(!isOpen){ 7 isOpen=true; 8 return true; 9 }else{ 10 return false; 11 } 12 } 13 14} 15
シーンを移動してしまうと上記変数isOpenはFalseになってしまいます。
単純にシーンを移動する度に上記変数をstaticなKeyを持ったセーブ用変数に保存して、シーンから戻って来た際に保存しておいた状態を設置し直すのもいいですが、数が1000とかになってくると、staticなKeyを設定するのは大変です。
そこでstaticな変数ではなくランダムなキーを各tuboClass毎に持たせて保存したいと思いました。
上記tuboClassに手を加えると以下のようになります。
csharp
1public class tubo{ 2 3 //★追加部分------------------------------------ 4 string random_key="fapugaw9ug9epgaw9eghf9pawehfiawehfiewhf";//スクリプト設置時にランダムに生成 5 //★追加部分------------------------------------ 6 7 bool isOpen = false; 8 9 bool Open(){ 10 if(!isOpen){ 11 isOpen=true; 12 return true; 13 }else{ 14 return false; 15 } 16 } 17 18 //★追加部分------------------------------------ 19 public void Save(){ 20 PlayerPrefs.SetInt(random_key, isOpen ? 1 : 0); 21 PlayerPrefs.Save(); 22 } 23 24 public void Load(){ 25 isOpen = (1 == PlayerPrefs.GetInt(random_key, isOpen ? 1 : 0)); 26 } 27 //★追加部分------------------------------------ 28 29} 30
このtuboClassですが、複数設置した際、まとめて管理をしたいと思っておりまして、継承等で上手く管理して1つのスクリプトから一気にシーン中のtuboClassの全Save関数,Load関数を呼び出し出来ないかと試行錯誤しているのですがなかなかいい方法が見つかりません。
恐らく初歩的な事だとは思うのですが、いまいちこれだとゆうものが解らずにいます。
何かいい方法等ありましたら教えてください。