在这个问题中,我想要找出这是否可能,并且如何实现。这种技术看起来非常不好,但似乎我正在使用的API(UnityEditor)正在做某些类似的事情,我只是好奇。
如果有多个引用指向同一对象,是否可以将一个新的对象实例化到同一内存槽中,使得所有先前的引用都指向新对象?
我找出了唯一可行的方法,那就是使用非托管的C++。基本上是下面这样的:
如果有多个引用指向同一对象,是否可以将一个新的对象实例化到同一内存槽中,使得所有先前的引用都指向新对象?
我找出了唯一可行的方法,那就是使用非托管的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是建立在Mono .NET框架之上的。
PrefabUtility.ReplacePrefab(prefabCopy, prefab);
内部发生了什么? - Davin TryonPrefabUtility.ReplacePrefab
调用了一个内部方法(根据程序集浏览器)。 - Lea Hayes