質問: (1 == PlayerPrefs.GetInt(random_key, isOpen ? 1 : 0)); } //★追加部分------------------------------------ } ``` このtuboClassですが、複数設置した際、まとめて管理をしたいと思っておりまして、継承等で上手く管理して1つのスクリプトから一気にシーン中のtuboClassの全Save関数,Load関数を呼び出し出来ないかと試行錯誤しているのですがなかなかいい方法が見つかりません。 恐らく初歩的な事だとは思うのですが、いまいちこれだとゆうものが解らずにいます。 何かいい方法等ありましたら教えてください。
回答: > > tuboClassの全Save関数,Load関数を呼び出し出来ないか > > > 要件は満たしませんが、必要なタイミングで初期化するのはどうでしょうか?詳しくは後述します。 ``` public class tubo { string random_key; //コンストラクタでrandom_keyを設定 //こうしておくとrandom_keyを強要できるので未設定防止に繋がります。 public tubo(string random_key) { this.random_key = random_key; } int isOpenKey = -1; // 呼ばれた時点でisOpenKeyが-1の場合、初期化。代入があった場合、PlayerPrefsに保存します。 public bool IsOpen { get{ if(isOpenKey == -1) isOpenKey = PlayerPrefs.GetInt(random_key, 0); return isOpenKey == 1; } set{ PlayerPrefs.SetInt(random_key, value ? 1 : 0); } } } ``` ### 上記コードのポイント * 一度にロードせず必要なタイミングで初期化すると処理が分散されるのでおすすめです。 * ロードやセーブのタイミングを考える必要がないので楽です。 ### 注意点など * PlayerPrefs.Save()は重い処理なので細かく呼ばない方が良いです。アプリを閉じる時や、フレームレートが落ちるのを許容できるタイミングで呼ぶと良いと思います。 * ランダムなキーも良いですが、C#は文字列の扱いが苦手なので、可能であればシンプルなintで管理したいところです。 ### 最後に、ここが一番重要です PlayerPrefsは名前の通り環境設定などに使うものです。例をあげるとオーディオのON/OFFなど単純且つあまり呼ばれないものを永続保存したい場合に使用するものです。今回のように頻度が高そうなものはクラスで管理しMessagePackなどを使い保存するのをオススメします。