What does a game world consist of?
动态物
静态物
环境:天空、植被、地形
其他物:空气墙、trigger area、navigation mesh
How should we describe these things?
属性
行为
继承
组件化:解决该继承谁的问题
让开发者好理解好维护
让艺术家好理解好使用
把游戏世界的所有东西抽象成了game object(go)
每个go由各种组件(component)组成
How are these things organized?
每个tick()把每个go的tick()执行一遍
现代引擎中是按系统(或者说是每种component)去tick(),有一个pipeline
go之间的关系,最原始是hardCode,现代是Events事件机制(观察者模式)
Events:发送事件给有关系的go,让go自己处理
管理:
不管理:每次发生爆炸,向所有go发送消息,判断爆炸半径
分治:把世界划分成格子,均匀格子、八叉树格子(层级查找)
空间数据管理: 二叉树、八叉树、BVH
- 很多tick是并行执行的,所以时序很重要,如果让go彼此互相通信,就会产生逻辑混乱,因此引入邮局
- pretick和posttick就是解决时序问题