この質問では、これが可能かどうか、そしてどのように可能かを知りたいと思います。この手法は非常に悪い習慣に思えますが、私が使用しているAPI(UnityEditor)はこのようなことをしているようで、興味があります。
同じオブジェクトへの複数の参照がある場合、以前のすべての参照が新しいオブジェクトを指すように、同じメモリスロットに新しいオブジェクトをインスタンス化することは可能ですか?
そのための唯一の実行可能な方法は、アンマネージC++を使用することであることがわかりました。基本的に、次のことが起こっています。
// Original prefab
GameObject prefab = x;
prefab.tag = "Untagged";
// A copy of the original prefab
GameObject prefabCopy = PrefabUtility.InstantiatePrefab(prefab) as GameObject;
prefabCopy.tag = "EditorOnly"; // Change from initial value "Untagged"
Debug.Log(prefab.tag); // "Untagged" - expected
Debug.Log(prefabCopy.tag); // "EditorOnly" - expected
// Replace contents of prefab file with `prefabCopy`
PrefabUtility.ReplacePrefab(prefabCopy, prefab);
// Destroy the copy
DestroyImmediate(prefabCopy);
Debug.Log(prefab.tag); // "EditorOnly" - whoa?
別のオブジェクトをどのようprefab
に指しているのでしょうか。
注:Unityは.NETのMonoフレーバーの上に構築されていることに注意してください