###前提
アクション系のゲームを作成しています。
Unityはほぼ初心者です。
下記のようなクラス構成において、ClassAをアタッチしたPrefabをあるゲームオブジェクトに記憶させています。
C#
1public class ClassA : MonoBehaviour 2{ 3 public ClassC instanceC0 = new ClassC(); 4 5 public class ClassB 6 { 7 public string name = ""; 8 public ClassC instanceC1 = new ClassC(); 9 } 10 public ClassB instanceB 11 { 12 get 13 { 14 return new ClassB 15 { 16 name = gameObject.name, 17 instanceC1 = instanceC0, 18 }; 19 } 20 set 21 { 22 value = value ?? new ClassB(); 23 instanceC0 = value.instanceC1; 24 } 25 } 26} 27public class ClassC : MonoBehaviour 28{ 29 //中略 30}
###発生している問題
デバッグ実行中にClassAのアタッチされたオブジェクト(Object0)のinstanceBをClassAのアタッチされた別のオブジェクト(Object1)のinstanceBへ代入します。
ここでObject1のinstanceC0を更新すると、Prefabとして保存されているObject0のメンバinstanceC0まで更新されてしまいます。
C#
1ClassA instanceA0; 2ClassA instanceA1; 3//中略 4instanceA0.instanceB = instanceA1.instanceB; 5instanceA0.instanceC = new ClassC();
上記のコードの場合は、最終行実行時にPrefabにアタッチされたinstanceA1のメンバーinstanceC0が更新されます。
さらに一度デバッグ実行を終了しても更新されたデータはそのままです。
Prefabはゲーム中の動作に影響されずデータを保持するという認識でしたが、勝手に更新されてしまうと厄介なことになります。
###試したこと
ある程度調べましたが、そもそもデバッグ実行中にPrefabへ影響を与えるためには特殊な操作が必要という情報しか探せませんでした。
現状は初期値を固定とすることで応急処置していますが最終的には別の方策が必要となります。
何かしら初歩的な思い違いのような気もしますが、自身での対応が限界近くなったためこちらで相談とさせていただきました。
よろしくお願いします。
###補足情報(言語/FW/ツール等のバージョンなど)
Unityのバージョンは5.4.1f1Personalです。
回答1件
あなたの回答
tips
プレビュー