クラスの中のクラスが参照渡しになってしまいます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;

public class Test : MonoBehaviour
{
[System.Serializable]
public class Party
{
public List<Char> Chars;

public object Clone() { Party tmpParty; tmpParty = (Party)this.MemberwiseClone(); tmpParty.Chars = tmpParty.Chars.ToList(); return tmpParty; } } [System.Serializable] public class Char { public int Char_ID; public string Char_Name; public List<Item> Char_Items = new List<Item>(); } [System.Serializable] public class Item { public string Name; public int Count; } public List<Party> SaveData = new List<Party>(); [SerializeField] public Party SaveData_Playing; void Start() { Item Item1 = new Item(); Item1.Name = "回復剤"; Item1.Count = 1; Item Item2 = new Item(); Item2.Name = "武器"; Item2.Count = 2; Char Man=new Char(); Man.Char_ID = 1; Man.Char_Name = "オトコ"; Man.Char_Items.Add(Item1); Man.Char_Items.Add(Item2); Item Item3 = new Item(); Item1.Name = "魔法剤"; Item1.Count = 3; Item Item4 = new Item(); Item2.Name = "なんか"; Item2.Count = 4; Char WoMan = new Char(); Man.Char_ID = 2; Man.Char_Name = "オンナ"; Man.Char_Items.Add(Item3); Man.Char_Items.Add(Item4); SaveData_Playing.Chars.Add(Man); SaveData_Playing.Chars.Add(WoMan); SaveData.Add(new Party()); SaveData[0]=(Party)SaveData_Playing.Clone(); }

}


上記のようなスクリプトを作りました。
ざっくりですが、ゲームを遊んでいてプレイ状況をセーブしたときの挙動想定です。

ただ、
SaveData_PlayingとSaveDataが一部同期してしまっており困っております。
値渡しのコピーなどをすれば良いと思うのですが、どこをどうな押したら良いかわからず、お知恵を貸していただけますと幸いです

コメントを投稿

0 コメント