引擎开发

ReEngine游戏引擎设计——引擎基本架构

Spread the love

入口类

World是整个引擎的入口类
其中包含了初始化,更新,以及卸载的过程。
大多事情,主要包含的就是各个系统的循环,都是放在World中的Update当中的。

Entity与Component

然后比较重要的就是Component与GameObject(在ReEngine中是Entity),Component是形成各种行为的基础。
这个部分的写法我还是比较想参照Unity去做。

GameObject拥有多个Component,而Component可以访问到自己的Component。

GameObject与Compnent都能设置Active或者Deactive,
GameObject与Component一般都被专门的管理器列表进行管理。
例如GameObject就有GameObjectManager去记录每一个GameObject,
Component则是被特定功能的管理器管理,例如Renderer就会被RendererManager进行逐个渲染,AudioSource就是被音频管理器进行管理。

在Unity4中,GameObject被创建出来之后会立刻挂上一个Transform并且调用Active,Active会将其加入到GameObject的激活列表当中以供下一帧实际使用。

Behavior

接下来就是Behavior类了,Behavior类继承与Component,自身有Update、FixedUpdate以及LateUpdate三个行为。
这三种更新模式由三个不同的UpdateManager进行管理,

注意以上的所有Manager都会在游戏的主循环中进行调用,也就是World(在Unity中对应Player这个类)

MonoBehavior

MonoBehavior的实现其实就是继承了Behavior,在第一次用到这个MonoBehavior代码的时候会将Mono层的函数缓存起来,之后将其调用注册到三个UpdateManager中就可以实现C#代码的调用了。如果真的写得很简单的话完全可以只做个单入口,毕竟目前大多数项目也是这么做的,过多的MonoBehavior效率非常低。

但是我还是会做出MonoBehavior的形式,这样相对来说也会更加灵活一些。

开发路径

实际上开发完上述的构架还是没办法做任何的事情。
最必要的还是Renderer、Transform等组件的编写。

要渲染出一个简单的场景需要以下组件:

  • Transform:管理物体位置
  • MeshRenderer:渲染Mesh
  • Camera:提供摄像机空间
  • Light(暂时就平行光吧):提供光照

以及以下系统:

  • RendererSystem:提供渲染模块
  • InputSystem:输入模块
  • OnGUISystem:GUI模块

需要的Manager:

  • GameObjectManager:管理GameObject对象
  • 三种UpdateManager:管理更新

本来还想着今年年初的时候好好学学OpenGL然后写个像样的东西出来,也是没想到自己的进度这么慢。
很烦。
不过现在项目里面也在做一些很重要的功能,现在热更新也是在疯狂怼,根本没时间开发就是了……
等明年上线了闲下来一定要好好写一写!

github地址(连个半成品都不是呀)

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.