Unity Editor Scripting

1 Scriptable Object
通常不单独使用
通常在编辑器开发中用到(使用IMUI方式)
是数据的容器
和monoBehaviour(用于GameObject)平行存在,但是不能用于GameObject
实例化的scriptableObject可以和assets一样保存在project里
代替3方的数据格式,适应于大量数据,灵活装载
2个用途:editor session 存数据、runtime 存数据

使用scriptableobject:
1 constructor(注意,在deserialized之前)
2 deserialized(这里会覆盖之前的数据)
3 onenable(这里可以初始化数据)

可以使用attribute([CreateAssetMenu(fileName=”xxx”,menuName=”ooo”,order=111)])
或ScriptableObject.createinstance()来实例化
Mysoc myso = ScriptableObject.createinstance();
AssetDatabase…….

2 serialization
Unity需要在c++ core和script side来传数据(使用serialized data)
关于serialization,存储编码后数据,使用unity自己的方式。每次进入和退出play mode都要把serializable的数据通过c++存一遍再重新装载一遍,包括Dlls,最后再呈现在script side。这也是为什么play mode没有存储改变。

2个attribute来指明serialize:
serializable
标识class或struct
serializeField
标识private字段

2个陷阱:
shared references
会被序列化成“值”。所以存多次。可能丢失shared references。
这里使用scriptable object可以正确的存储一个reference。

shutting down the editor
lose data。
这里使用scriptable object,可以把数据像asset一样存下了。

3 inventory
1 class item,名字呀,texture2d呀什么的,这个要serializable的attributes
2 class itemlist, 这个要继承scriptableobject
3 class createitemlist,建立这个list的asset实例,提供create()
4 class itemeditor,继承editorwindow,这里调用create()

你可能感兴趣的:(unity)