2022-09-08【catlike】ObjectManagement

catlikecodingunitytutorials / object-management-12-more-complex-levels — Bitbucket
Unity Object Management Tutorials (catlikecoding.com)

Persisting Objects

持久化物体:
继承自一个带read write结构的结构
可以进行继承逐层的自定义序列化。

Object Variety;Reusing Objects;Spawn Zones

工厂:
Shape工厂。通过目标Shape从工厂中创建对象,并能返还工厂。
其实就是对象池。

Shape:也是继承自可持久化物体。(Entity)
ShapeBehaviour:物体的行为,也是可持久化(Component)
GameLevelObject:系统的行为,也是可持久化(System)

其实是一套类似ECS生命周期的系统,附带简易手写版本的序列化反序列化。

因为可以保存整个系统的信息,可以在按键按下的时候进行记录,对系统进行快照。
然后重新加载,让系统回归原样。

其实和帧同步的预测回滚思路很类似了。
也证明了ECS确实更适合做帧同步(带预测的帧同步)

其他章节

细节分析

1. 它这个是什么

顾名思义,物体管理。管理所有物体的生成,执行,销毁流程。
考虑到的点:
生成与复用(对象池/工厂)
状态保存(接口实现与顺序控制)
复杂的地方:
它不止保存了单个物体的状态,而且考虑到系统的管理级别的状态保存和回退。

2.分析一下它如何进行整个系统的保存和回退


类的继承结构分两部分:
ShapeBehavior -> 对应一个池,可以根据类型从池中获取,获取的是ScriptableObject

  • MovementShapeBehavior
    自己拥有:Velocity 处理:Shape的localPosition
  • RotationShapeBehavior
    自己拥有:AngularVelocity 处理:Shape的Rotation
  • OscillationShapeBehavior(震动Shape行为)
    通过正弦函数得到一个在范围内变化的float
    自己拥有:Offset,Frequency,previousOscillation 处理:Shape的localPosition
  • SatelliteShapeBehavior(卫星Shape行为)
    是一个sin函数和cos函数结合起来的曲线变化
  • 其他略

PersistableObj->对应所有的东西

  • SpawnZone:GameLevelObject 关卡物体
    一个小东西,负责生成东西,自己拥有一个进度条,代表生成到什么进度。
    在生成Shape的同时,会给Shape添加【MovementShapeBehavior】【RotationShapeBehavior】等进行初始化。

PersistentStorage
存储读取的东西
GameDataWriter
GameDataReader

Game.Instance
游戏的起点
按键创建:GameLevel.Current.SpawnShapes->SpawnZone
按键存储:Game.Save:存储Game变量,存储Game所有Shapes,存储当前GameLevel:levelObjects.Save
按键读取:Game.Load:先等场景加载好;读取GameLevel,读取所有Shape(根据物体所在工厂编号,从对应工厂里面拿对象)

从Game开始,逐系统保存,系统再逐状态保存,逐物体保存。回退的时候,回到快照状态,清理一下状态即可。

你可能感兴趣的:(2022-09-08【catlike】ObjectManagement)