C#
1 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5using System.Linq; 6 7public class Test : MonoBehaviour 8{ 9 [System.Serializable] 10 public class Party 11 { 12 public List<Char> Chars; 13 14 public object Clone() 15 { 16 Party tmpParty; 17 tmpParty = (Party)this.MemberwiseClone(); 18 19 tmpParty.Chars = tmpParty.Chars.ToList(); 20 21 return tmpParty; 22 } 23 } 24 25 26 [System.Serializable] 27 public class Char 28 { 29 public int Char_ID; 30 public string Char_Name; 31 public List<Item> Char_Items = new List<Item>(); 32 } 33 34 [System.Serializable] 35 public class Item 36 { 37 public string Name; 38 public int Count; 39 } 40 41 public List<Party> SaveData = new List<Party>(); 42 43 [SerializeField] 44 public Party SaveData_Playing; 45 46 void Start() 47 { 48 Item Item1 = new Item(); 49 Item1.Name = "回復剤"; 50 Item1.Count = 1; 51 52 Item Item2 = new Item(); 53 Item2.Name = "武器"; 54 Item2.Count = 2; 55 56 Char Man=new Char(); 57 Man.Char_ID = 1; 58 Man.Char_Name = "オトコ"; 59 Man.Char_Items.Add(Item1); 60 Man.Char_Items.Add(Item2); 61 62 Item Item3 = new Item(); 63 Item1.Name = "魔法剤"; 64 Item1.Count = 3; 65 66 Item Item4 = new Item(); 67 Item2.Name = "なんか"; 68 Item2.Count = 4; 69 Char WoMan = new Char(); 70 WoMan .Char_ID = 2; 71 WoMan .Char_Name = "オンナ"; 72 WoMan .Char_Items.Add(Item3); 73 WoMan .Char_Items.Add(Item4); 74 75 SaveData_Playing.Chars.Add(Man); 76 SaveData_Playing.Chars.Add(WoMan); 77 78 SaveData.Add(new Party()); 79 SaveData[0]=(Party)SaveData_Playing.Clone(); 80 81 } 82}
上記のようなスクリプトを作りました。
ざっくりですが、ゲームを遊んでいてプレイ状況をセーブしたときの挙動想定しています。
79行目の
SaveData[0]=(Party)SaveData_Playing.Clone();
でセーブスロットにセーブデータを保存したつもりです。
ただ、実際に動かしてみると
SaveData_PlayingとSaveDataが一部同期してしまっており困っております。
例えば、Manの回復剤を2にすると、セーブをしたデータの
SaveData[0]
こちらまで一緒に2に切り替わってしまいます。
ネットで調べた限りだと値渡しのコピー(?)や、DeepCopyをする、と書いてあるのですが、どこをどうしたら良いかわからず、お知恵を貸していただけますと幸いです
回答1件