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开始,逐系统保存,系统再逐状态保存,逐物体保存。回退的时候,回到快照状态,清理一下状态即可。










网友评论