今天开始进行新项目的预研,有关游戏引擎的脚本系统。之前自己对Python有所了解,但也仅仅限于应用层,如今要把一个脚本系统加入到游戏引擎里面,一时还有点不知道如何下手。赶紧上网查资料,逛了大半天的gamedev,现在总算有点眉目了。
首先要明确的是脚本系统在游戏引擎中扮演什么样的角色。
脚本系统的必要性
游戏作为上层应用程序,是在游戏引擎的基础上运行的,现在游戏的发展趋势来看,游戏者(gamer)对游戏的可自我配置性有非常高的需求,特别是在游戏运行时的自我配置,已经不能通过简单的传参数来完成这种配置。所以,整个游戏的架构有分成两大块的发展趋势。一块是kernel,另一块是configuration。Kernel是游戏的基础类&Object的集合,而configuration是针对特定的上层应用程序(游戏本身),对kernel的元素进行组织&配置。脚本系统无疑将是configuration的重要组成部分。
游戏引擎需要为脚本系统提供的接口
我们把游戏中的物体(实例)称为object,把可以作用于object的函数叫action
1、保存全局变量&局部变量
2、得到object(s)的引用
3、得到object(s)的属性,并调用object的action
4、提供timer进行周期性触发action
以上4点并不全面,但是却是最最基本需要支持的部分。如果需要更深入,应该还要提供对静态场景的配置、设置场景结束条件以及完善的Debug机制等等。
游戏引擎不应该为脚本系统提供的接口
1、画图&播放声音等算法
2、内存管理
以上2点也并不全面,因为目前的项目没有网络方面的需求,所以没有考虑安全等因素进来。
杂七杂八
外设响应
我们把所有的gamer的输入都归纳为外设输入。那么在游戏引擎里面,对外设的响应应该是游戏实时反应能力的直接体现,在去年从事的游戏引擎项目中,采用了类似于windows消息队列的方式,对某种特定外设输入(比如:游戏手柄左键按下),挂上一个写死的函数。在脚本系统引入以后,应该不再挂上一个编译式语言编写的响应函数,而是调用脚本解释器来运行挂在这个外设上的脚本。所有外设都采用脚本来响应,这一思想是保证游戏可用户自我配置的关键之一。
冗余
脚本的性能总是令人头疼的。所以在引擎提供给脚本的接口当中(全面所述4点当然在内),不要害怕冗余的情况出现,而是要针对游戏开发者的需求,适当的增加引擎输出的功能,让游戏开发者在使用脚本的时候,能用将脚本写得尽量的简单。举例来讲:比如需要在某个时刻获得离主角最近的怪兽,如果只使用前面所提的4种接口,需要在脚本里面枚举出所有的怪兽,然后一一与主角的坐标进行距离计算,然后才能得到最近的一个怪兽。这是十分低效的。如果这一动作需要频繁发生,那么势必影响游戏的整体运行效率。解决办法就是在游戏引擎里面提供一个类似功能的API,由游戏引擎本身的开发语言(一般是编译式语言)来完成这项功能,而游戏开发者只需要在脚本里面调用这个API即可完成这项运算。如此做法在效率上应该比前面的做法要高出许多。
posted on 2007-05-30 22:07
tianlinux 阅读(1046)
评论(1) 编辑 收藏 所属分类:
脚本语言