1 游戏世界的构成
动态物:
静态物:
环境:
别的物体:
空气墙,
每个物体都是很game obcjet(GO),这是方法论!
2 无人机案例
缺陷:很多东西其实并没有清晰的父子关系!
解决方案:组件化!
现代游戏引擎:生产力工具
Uobject:
游戏世界里每个物体都是go;
每个物体都是通过组件来描述的;
3 游戏世界如何动起来
写每个object的函数的时候都要加个tick函数
通常是通过组件来tick的,1
并行
4 如何探索
下面这种方式不好:
事件机制来实现,解耦合,只要发出个event;
unreal 为啥复杂呢?
现代游戏引擎做一个可扩展的消息系统
5 如何管理GO
八叉树
节约计算资源:
6 总结
物体之间的绑定:
GO tick的时候,有时许关系。go之间的通讯是通过消息机制来进行的。
逻辑悖论:逻辑上会混乱,实际上对游戏的影响是非常大的。
引入一个第三方,邮局,确保时序是严格一致的。
pretick()和posttick是解决时序的问题的!
每个组件,是在当前帧还是上一帧接收到的消息的,这一点一定要注意。
ECS是什么?
7 Q&A
1.tick过长,如何处理?
计算过于复杂,
可以tick 跳过两帧,5帧–0.2s左右,批处理
2. 透明的东西
-
渲染流程和tick流程是如何同步的
ticke逻辑,会在tick渲染的后面,
tick渲染的时候,是在做准备,
ticke逻辑会比tick渲染前面 -
空间划分了,动态的怎么办
-
组件模式有什么缺点?
组件模式的效率低,ecs可以解决这个问题
组件之间也需要通讯机制,这个过程对效率的影响也很大, -
事件机制如何调试
锁定一个GO,把收到的所有消息都显示出来
不停的打log;
- 物理和动画冲突了如何处理?