GAMES104---3rd
GAMES104---3rd
游戏里有什么
- 动态物体
- 静态物体
- 环境
- 地形
- 天空
- 植被 (动和静都有而且量大)
- Trigger Area & Air Wall
这些都叫 Game Object (GO)
无人机例子
属性
- 形状
- 位置
行为
- 移动 ...
类定义
class Drone{
public:
vector3 pos;
float health;
float fuel;
void move();
void scout();
}
根据这个类可以派生各种派生无人机
早期构建方法
容易出现菱形继承
解决方法 --- 组件化
无人机
- Model组件
- Motor组件
- AI组件
- 坐标组件
- ...
组件基类
各种组件继承他
然后每个组件都有一个tick()函数
Unreal --- UObject & Unity --- Object
用于GC的句柄,用来管理生命周期
每个GameObject 都继承于Object方便内存管理
如何动起来
对于每个GO,运行每个组件的tick函数
但是现代引擎里,都是按组件tick的,(可能方便多线程)
交互
GO直接交互
Event机制
每个GO做个邮箱,每个组件tick的时候,先看看邮箱。
如何管理GO
给每个GO一个uid,pos
场景管理
- 画格子
- BVH (现代引擎可能用)
- BSP
- 八叉树(四叉树)
- k-d tree
- Scene Graph
Takeaways
- 每个物体都是一个Object
- GO可以用组件表示
- GO的tick
- GO使用event机制相互沟通
- 尽量先tick父GO再tick子GO
- 用邮局管理event控制时序

浙公网安备 33010602011771号