Unity Dots 网络数据对接

日期:2023-8-7

前阵子项目在提测,迭代就比较快了,没顾上更新。

提一个老生常谈的话题,数据配置。

一般来说,都是策划去做,或者是Excel,或者是服务器甩过来。

我们这里,主要讨论网络数据的对接,本地Excel也同理。

那么,Dots如何去做?

官网的例子,是Bake 。

Unity将Bake分为两个流程,创作模式、运行模式。

创作模式,是人类易于阅读、修改。

运行模式,对性能更优好。

Bake模式的特殊性,便是难点所在了。

创作模式中,外部静态Static无法使用,仅常量Const可以。

同时,Bake模式,打包后无法修改。仅在编辑器生效,EditorBuild过程中,就处理完成。

那么策划编辑的数据,如何应用?

将问题拆分成2步。1,数据的存取、读取方式。2,应用的阶段。

1,首先要思考,Dots可以读取什么样的外部数据。

常量、静态数据。

同时包括 PlayerPrefs 中的数据,对的,将数据用Json存到本地,再去读取。

2,那么什么阶段应用。

Bake中,是无法了。只能选择Bake后

思考一个问题,实例化对象时,我们做了什么。

EntityManager.Instance (Entity),对吧。

我们复制了Entity,但是,Entity是不包含数据的,他仅仅包含了索引,那么,我们实际想修改的便是 Entity所关联的数据,也就是CompoentData。

接下来的思路便是,如何拿到Entity对应的ComponentData,并修改其关联的数据。

1,Bake时,我们将Prefab,转化成Entity,集中在一个单例组件中,例如:PrefabComponentData。

2,网络数据加载完成后,先转为Json,存在PlayPrefs中。

PlayPrefs的key,可以为int,跟 Prefab 对应的枚举做关联。

3,通过单例组件获取 Entity 

(SystemAPI. GetSingle<T>().GetEntity())

4,再获取对应的 Component 

( Component DataT = EntityManager.GetCompoentData())

5,对应PlayerPrefs中的数据,修改拷贝的 Component

6, 将修改后的ComponentData 重新关联给 单例组件中的 Entity。

 ( EntityManager.SetCompoentData( DataT,Entity))

这里讲一下,为什么需要重新关联:

因为 ComponentData为值类型数据,并不是引用类型。

源于ECS高效的内存管理,EntityManager.GetCompoentData() 获取的过程是复制,不是引用,并不会对原数据造成影响。

所以,我们还需要将修改后的Compoent,重新关联给Entity。

猜你喜欢

转载自blog.csdn.net/qq_35623058/article/details/132138417