###前提・実現したいこと
Unityでガチャガチャのようなものを制作しているのですが、ガチャから出てきたモンスターのデータをローカルに保存してゲーム内で利用できればと思いflatbuffesを使用してみましたがうまく動かず苦戦しています。
モンスター一体だけなら保存して読み込みも行えたのですが、ガチャから出てきたモンスターのデータを追加する処理がよくわかりません。
###ソースコード
チュートリアルなどを参考にして下記のようなコードを書いてみたのですがうまくいきません。
//スキーマ定義 table Monster { name:string; detail:string; //・・・ } table MonsterList { Entity:[Monster]; } root_type MonsterList
C#
1 private void SaveMonster() 2 { 3 FlatBufferBuilder fbb = new FlatBufferBuilder(1024); 4 5 ByteBuffer bb = fbb.DataBuffer; 6 MonsterList monsterList = MonsterList.GetRootAsMonsterList(bb); 7 8 StringOffset monsterName = fbb.CreateString("ランダムで取得したモンスター名"); 9 StringOffset monsterDetail = fbb.CreateString("詳細情報"); 10 var monsters = new Offset<Monster>[monsterList.EntityLength + 1]; 11 monsters[monsterList.EntityLength] = MonsterList.CreateMonster(fbb, monsterName, monsterDatail); 12 var monstersData = Monster.CreateMonster(fbb, monsters); 13 14 MonsterList.StartDataList(fbb); 15 MonsterList.AddEntity(fbb, monstersData); 16 17 var offset = MonsterList.EndMonsterList(fbb); 18 MonsterList.FinishMonsterListBuffer(fbb, offset); 19 20 string path = Path.Combine(Application.persistentDataPath, "MonsterData.bytes"); 21 using (MemoryStream ms = new MemoryStream 22 (fbb.DataBuffer.Data, fbb.DataBuffer.Position, fbb.Offset)) { 23 File.WriteAllBytes(filePath, ms.ToArray()); 24 Debug.Log("SAVED !"); 25 } 26 }
C#
1 private void LoadMonster() 2 { 3 string path = Path.Combine(Application.persistentDataPath, "MonsterData.bytes"); 4 ByteBuffer buffer = new ByteBuffer(File.ReadAllBytes(path)); 5 MonsterList monsterList = GetRootAsMonsterList(buffer); 6 7 for(int i = 0; i < monsterList.EntityLength; i++) 8 { 9 Debug.Log(monsterList.Entity(i).value.name); 10 } 11 }
何度実行しても上書き(?)されてしまって一体分のデータしか取れません。
どうすればデータを上書きせずに追加できるのでしょうか?
ご教示ください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/27 02:34
2017/03/27 02:55