Remplacer l'instance d'un objet à un autre en C#

Dans cette question, je voudrais savoir si et comment cela est possible. Cette technique semble très mauvaise pratique, mais il semble que l'API (UnityEditor) que j'utilise, est en train de faire quelque chose de ce genre et je suis juste curieux.

Si il y a plusieurs références pour le même objet, est-il possible d'instancier un nouvel objet dans le même emplacement de mémoire de sorte que toutes les précédentes références pointer vers le nouvel objet?

J'ai compris que le seul moyen de le faire est d'utiliser le C++. Essentiellement les suivants qui se passe:

//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?

Certains comment prefab est maintenant pointe vers un objet différent?

Remarque: gardez à l'esprit que l'Unité est construite au-dessus de la Mono saveur .NET

  • Ce qui se passe à l'intérieur de PrefabUtility.ReplacePrefab(prefabCopy, prefab);?
  • PrefabUtility.ReplacePrefab invoque une méthode interne (selon l'assemblée navigateur).
InformationsquelleAutor Lea Hayes | 2012-07-07