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控制时序
posted @ 2022-03-28 21:15  LRD  阅读(55)  评论(0)    收藏  举报