質問: new ClassC(); ``` 上記のコードの場合は、最終行実行時にPrefabにアタッチされたinstanceA1のメンバーinstanceC0が更新されます。 さらに一度デバッグ実行を終了しても更新されたデータはそのままです。 Prefabはゲーム中の動作に影響されずデータを保持するという認識でしたが、勝手に更新されてしまうと厄介なことになります。 ### 試したこと ある程度調べましたが、そもそもデバッグ実行中にPrefabへ影響を与えるためには特殊な操作が必要という情報しか探せませんでした。 現状は初期値を固定とすることで応急処置していますが最終的には別の方策が必要となります。 何かしら初歩的な思い違いのような気もしますが、自身での対応が限界近くなったためこちらで相談とさせていただきました。 よろしくお願いします。 ### 補足情報(言語/FW/ツール等のバージョンなど) Unityのバージョンは5.4.1f1Personalです。
回答: 質問投稿後に何となく分かったような分からないような気がしたので、一応回答投稿しておきます。 ■大前提 =で代入したり、setを通してもクラスは全て「参照渡し」になります。 **1.最初**(インスタンス化された時) public ClassB instanceB のgetによって、 instanceA0.instanceB.instanceC1 は instanceA0.instanceC0 と同じもの。 instanceA1.instanceB.instanceC1 は instanceA1.instanceC0 と同じもの。 これを(1)とします。 **2.instanceA0.instanceB = instanceA1.instanceB; した時** public ClassB instanceB のsetによって、 instanceA0.instanceC0 は instanceA1.instanceB.instanceC1 と同じもの。これを(2)とします。 (1)と(2)から、 instanceA0.instanceC0 は instanceA1.instanceC0 となります。これを(3)とします。 **3.instanceA0.instanceC0 = new ClassC(); した時**(「instanceC」は「instanceC0」だと仮定) (3)から、 instanceA1.instanceC0 = new ClassC(); としているのと同義になります。 よって『「instanceA1のメンバーinstanceC0が更新されます。 」とは「instanceA1のメンバーinstanceC0が初期値に戻ります。(new ClassC()された状態になります)」 という意味である』ならば、それは正常な動作です。 ■Prefabが更新されている? 仰る通り、『インスタンス化される前の』Prefab(に付いたスクリプト)は通常のスクリプトから変更されません(EditorScriptを書く必要があります)。 逆に言うと、『インスタンス化された後の』Prefab(=Prefabを元にインスタンス化しただけの普通のオブジェクト)は自由に編集可能です。 この辺りの確認をしたく、「何をもって更新されていると判断したのでしょうか」と質問させて頂きました。