关于使用ScriptObject作为项目数据配置
最近发现新项目中使用了很多ScriptObject作为配置数据,对于ScriptObject 我先前经历的几个项目都很少或者几乎不使用它作为配置。为什么呢?
优点
- 编辑器模式下运行时可实时修改资源数据并会保存到本地。 真机不行。
- 可视化,编辑简单。
- 可直接引用unity的其他资源 如引用一个prefab,也可被其他资源引用。
- ScriptObject加载上来如果不Instinate,则共享这一份数据。因此也适合做配置.不过MonoBehaviour的gameobject不实例化也是一样的效果。
缺点
- 数据量大了之后可编辑性并不比Excel好。
- 删除修改字段会涉及到所有其他ScriptObject发生变化,更新量大不说,且增加删除字段对于使用lua作为热更方案是无法更新的。
- 涉及到客户端和服务器的共同配置更不能使用ScriptObject了。
- ScriptObject可以直接关联Unity中的其他资源,比如直接引用一个prefab,在真机上,直接关联,加载该ScriptObject时会同时加载其引用的Prefab,但是ScriptObject常被用作配置,大部分情况不需要实时加载引用资源。当然可以记录其引用路径,但需要做引用丢失的检测(引用的prefab被删除的情况) 这个是可以做到的。但是如果记录路径 那不如使用excel或者json、xml等格式。
应用场景
在我看来,结合其优点缺点,可以考虑在编辑器模式下使用ScriptObject存储数据(可视化+方便运行时调试数据,运行时保存),打包之前会生成json等作为真机运行时数据。这样即使用了ScriptObject的优点,又可以通过直接更新json中间文件抵达热更新的效果。
以上仅为个人见解。