Unity3D + C#: Cloning the Content of a Serializable Class
2013-02-07 23:37
381 查看
Unity3D + C#: Cloning the Content of a Serializable Class
Found a pretty simple and neat method for cloning the contents of a serializable class from one to another: http://stackoverflow.com/questions/78536/cloning-objects-in-c-sharpHere's a copy of the script (for Unity use), to make your life easier:
Download
Given the serializable class:
[System.Serializable]
public class SimpleClass
{
publicint x;
publicint y;
publicint z;
}
and the situation:
// where you can change the value inside the inspector
public SimpleClass simpleClass;
private SimpleClass newSimpleClass;
protected void Start()
{
newSimpleClass = simpleClass;
newSimpleClass.x = 123;
Debug.Log(simpleClass.x); // return 123
}
If you're doing it this way, you're simply just referencing simpleClass to newSimpleClass.
And when you change the values inside newSimpleClass (x, y, or z), the values in simpleClass will change too.
Some may try to copy all the values one by one:
protected void Start()
{
newSimpleClass = simpleClass;
newSimpleClass.x = simpleClass.x;
newSimpleClass.y = simpleClass.y;
newSimpleClass.z = simpleClass.z;
}
It works fine, but it's "not a very elegant way of handling the situation".
The ObjectCopier script provided by user "johnc", was a much more elegant way of doing it.
Where you can just "clone" the contents from one serializable object to another:
protected void Start()
{
newSimpleClass = ObjectCopier.Clone(simpleClass);
newSimpleClass.x = 123;
Debug.Log(simpleClass); // shouldn't return 123
}
相关文章推荐
- The content of element type "hibernate-mapping" must match "(meta*,typedef*,import*,(class|subclass|
- The serializable class XXX does not declare a static final serialVersionUID field of type long
- 黄代号:The serializable class *** does not declare a static final serialVersionUID field of type
- Unity3d 提示 "The scripts file name does not match the name of the class defined in the script!"的解决办法
- hibernate The content of element type "session-factory" must match "(property*,mapping*,(class-cache
- 编译环境提The serializable class XXX does not declare a static final serialVersionUID field of type long
- Class for the use of RegQueryInfoKey pinvoke interop in C#
- (转)关于The serializable class XXX does not declare a static final serialVersionUID field of type long的警告
- 关于The serializable class XXX does not declare a static final serialVersionUID field of type long的警告
- The serializable class Myuser does not declare a static final serialVersionUID field of type long
- The content of element type "class" must match "(meta*,subselect?,cache?,synchronize*,comment?,tupli
- The serializable class Proname does not declare a static final serialVersionUID field of type long
- The serializable class Myplayer does not declare a static final serialVersionUID field of type long
- The content of element type "class" must match "(meta*,subselect?,cache?,synchronize*,comment?,tupli
- 关于The serializable class XXX does not declare a static final serialVersionUID field of type long的警告
- The serializable class XXX does not declare a static final serialVersionUID field of type long
- 关于The serializable class XXX does not declare a static final serialVersionUID field of type long的警告
- 关于The serializable class XXX does not declare a static final serialVersionUID field of type long的警告
- The serializable class XXX does not declare a static final serialVersionUID field of type long
- 关于hibernate中报错”The content of element type "class" must match ......“的一点发现