PlayerPrefs を使用して、プレーヤーの現在の状態を保存します。
オプションは次のとおりです。
PlayerPrefs はブール値をサポートしていないため、整数 (0 を false、1 を true) を使用して、各収集物に 1 つの整数を割り当てることができます。長所:実装が簡単。短所:保存されたオブジェクトの数が非常に多く、読み取り/書き込みにより多くのワークロードが必要な場合、メモリを使いすぎます。
1 つの整数を複数の収集物に割り当て、それらをビットごとに格納し、前後に変換します。長所: メモリが少なく、格納されている多数のオブジェクトの読み取り/書き込みが高速です。短所: 各整数の数を int32 のビット数に制限します。つまり32です。
すべての収集品に大きな文字列を割り当て、前後に変換します。長所: true/false 以外の状態を保存することも、暗号化を使用してデータをハッキングから保護することもできます。短所:何も思いつきません。
オプション1:
//store
PlayerPrefs.SetKey("collectible"+i, isCollected?1:0);
//fetch
isCollected = PlayerPrefs.GetKey("collectible"+i, 0) == 1;
ビット単位:
int bits = 0;//note that collectiblesGroup1Count cannot be greater than 32
for(int i=0; i<collectiblesGroup1Count; i++)
if(collectibleGroup1[i].isCollected)
bits |= (1 << i);
//store
PlayerPrefs.SetKey("collectiblesGroup1", bits);
//fetch
bits = PlayerPrefs.GetKey("collectiblesGroup1", 0);//default value is 0
for(int i=0; i<collectiblesGroup1Count; i++)
collectibleGroup1[i].isCollected = (bits && (1 << i)) != 0;
文字列アプローチ:
string bits = "";//consists of many C's and N's each for one collectible
for(int i=0; i<collectiblesCount; i++)
bits += collectibleGroup1[i].isCollected ? "C" : "N";
//store
PlayerPrefs.SetKey("collectibles", bits);
//fetch
bits = PlayerPrefs.GetKey("collectibles", "");
for(int i=0; i<collectiblesCount; i++)
if(i < bits.Length)
collectible[i].isCollected = bits[i] == "C";
else
collectible[i].isCollected = false;