技术开发 频道

CLR开发商业3D游戏引擎实践(一)

C++底层游戏引擎的准备

 

我依然觉得C++是游戏最底层引擎理所当然的开发语言。它更加接近计算机的执行原理,功能更强大,执行效率更高。所以,我们现在最底层的游戏引擎,依然采用C++实现。下面将简单介绍一下我们底层引擎的大致功能模块:

 

       1.图形引擎

 

       我们的图形引擎Victory3D,是对图形绘制和管理的功能集。在这里可以找到对3d设备的操作接口,3d数学库的支持,模型,场景的管理,shader系统的定义和管理等等。这是一个超过8万行C++代码的庞大库,概念很多,头文件包含关系复杂。

 

       2.脚本引擎

 

       gcScriptVictory3D v3的通用脚本语言,我们开发了一套game c的游戏脚本语言,此后多次维护,在引擎v3版本的时候,完全重写了一个完全面向对象,全功能的脚本语言gcScript。该脚本虚拟机执行效率比较高,拥有强大而方便的扩充能力。

 

3.  物理引擎

 

现在的游戏,物理系统,是一个很出彩的方向。我们在项目中实际使用的是PhysX免费的PC版,这是一个高效而且稳定的并且非常著名的物理引擎。

期望出现的中层引擎理念

 

      

        我认为游戏引擎不应该只是一个SDK,而更加应该是一个解决方案。在提供了所有的底层操作能力后,应该向用户提供出来一个整体的项目开发方案,这才能真正的指引项目开发方向。所以我们应该在底层引擎的上面包装出一个中层游戏引擎,它应该能提供以下功能:

 

       1.应用程序框架

 

       游戏首先是执行程序,所以在中层引擎中需要一个让游戏运行起来的环境。程序从入口(比如windows AP环境下开发是WinMain函数)进入,开始进入主循环。通常我们还需要一个游戏主窗口,用来作为程序的显示宿主。这样一个灵活可订制的框架,是游戏程序执行的先决条件。

 

       2.游戏设备和环境框架

 

       游戏需要访问到很多设备,例如显卡、声卡、网卡等。这些设备在引擎程序中,都有相应的接口和对象来表征。那么在中层引擎中,需要把这些必要的设备环境构建起来,并且能够让用户方便的访问和设置。

 

       3.功能扩充框架(dll+脚本扩充)

 

       在应用程序和设备环境构架起来后,理论上游戏就可以运行起来了。但是,游戏是一个复杂的工程,开发人员需要不断的去丰富和完善它,所以需要设计一个方便可扩充的系统,来满足各种新的需求。通常我们可以采用dll+脚本来扩充系统。设计好一个规则后,开发者可以通过增加dll来扩充系统的能力,如果拥有一个优秀的脚本系统的话,还可以以此来扩展脚本功能。

 

4UI支持

 

在电脑游戏中,人机交互的方式,很大部分是通过界面来进行,一个方便完善的UI系统,可以大量节约游戏项目开发周期,降低繁杂度。例如WOWUI系统就非常强大。结合wow内嵌的lua脚本,甚至普通玩家都可以自己完成一些方便操作的界面。在我们的构架中,这也是一个设计重点。

 

5.游戏对象的操作管理

 

       游戏不管画面表现如何华丽,其实骨子里面玩得都是数据。如何去组织这些数据才是游戏程序设计的关键点。

 

目前,主流的开发模式都是采用面向对象的开发模式。合理的对象定义和管理,是开发顺利地保证。在底层引擎中,我们能够操作各种数据,但是当开发者直接面对这些接口的时候,会发现这样的操作实在是麻烦。

 

如果我们将底层引擎接口进行以下封装呢?比如,可以封装出一个游戏对象类Item,它能自我定位,拥有图形自我绘制接口,3D音效处理接口,基本的网络处理能力SendTo等等。那么后面的游戏开发可以围绕Item来进一步组合设计,把Item变成一个一个概念清晰的具体游戏对象,很方便的就能操作它们了。

 

 

0
相关文章