中图分类号:TP 文献标识码:A 文章编号:1007-0745(2012)08-0126-01摘要:本文浅析Lua、Python脚本语言的特点,介绍并总结脚本系统在游戏引擎框架中的应用,并指出了可视化脚本系统在游戏引擎的发展趋势。
关键词:游戏架构 可视化脚本系统 脚本语言
一、引言
随着游戏产业的蓬勃发展,在国外涌现出一大批优秀的三维游戏引擎,著名的商业引擎有Epic公司的Unreal系列引擎、Crytek公司的CryEngine系列引擎、BigWorld公司的BigWorld引擎和Garage Games公司的Torque 3D引擎等。优秀三维游戏引擎通常包括:渲染引擎、物理引擎、音效引擎、脚本系统、动画系统、人工智能、网络引擎等,而且提供方便、快捷、有效、可扩展的接口以方便游戏开发人员在这个接口上开发游戏相应的模块,并且还提供了功能极其强大的编辑器,主要包括场景编辑器、模型编辑器、物理系统编辑器和粒子系统编辑器等,并配备齐全的第三方插件进行导入和导出,以满足各种复杂的游戏开发的需求。游戏引擎主要是通过脚本系统来控制游戏内容和游戏逻辑[1],即将游戏内容和游戏引擎相分离,避免硬编码,可以不需要重新编译整个工程的情况下,调整、测试和修改游戏运行的机制和特性,并且还能够在发布后很容易的进行扩展[2]。
二、游戏开发中脚本语言的应用
由于游戏引擎规模越来越复杂,游戏内容情节越来越丰富,使脚本技术在游戏引擎框架得到广泛的应用,并且已经成为其中不可或缺的组成部分,在游戏应用领域中大放异彩。目前比较流行的脚本语言:Lua、Python、GameMonkey及Ruby等,其中Lua 是一个小巧、精悍、高效的脚本语言,其设计目的主要是为了嵌入应用程序中,进而为应用程序提供灵活的扩展、配置和定制功能。Lua脚本和C/C++代码可以相互调用,也可以作为配置文件,并且更加容易理解和维护,这使得其得到广泛应用。Lua由标准C代码实现,代码简洁优美,并支持跨平台编译和执行。Lua是一种为支持有数据描述机制的一般过程式编程语言而设计的扩展编程语言[4]。
其实现过程主要是载入Lua基本库(#include "lua.h"、#include "lauxlib.h"和#include "lualib.h")、编写Lua的脚本文件,并调用Lua函数游戏引擎框架3D道具,在Lua中是以函数指针的形式调用函数游戏引擎框架,任何在Lua中注册的函数必须有同样的原型为:typedef int(*lua_CFunction)(lua_State *L)、执行Lua脚本文件(lua_dofile(L, "脚本文件名")来完成。目前应用程序采用Lua作为嵌入式脚本语言游戏动态,以此来实现可配置性、可扩展性,其中包括魔兽世界、愤怒的小鸟等。
而Python是一种面向对象、可扩展性、直译式的语言,其语法简捷而易学,具有丰富和强大的类库的支持。Python标准库的主要提供了:系统管理、数据库接口、文本和文件处理、图形系统、网络通信和协议等功能,Python社区提供了大量、成熟而可靠的第三方应用模块更是大放异采,主要涉及系统编程、多媒体应用、科学计算、Web编程开发和图形系统等领域,并且可以把Python嵌入C/C++程序,但其执行的速度不够快。
目前无论是商业的Unreal、CryEngine及Unity3D等引擎还是开源的图形渲染引擎OGRE,无不例外都提供了相应的脚本系统,从而实现了与外部进行很好的交互,避免直接调用底层,从而使得编码变得简单容易[3]。
三、脚本系统
由于在游戏引擎创建脚本系统能够缩短游戏程序编译时间、减少模块之间的耦合度,有利于代码的复用[5],延长游戏软件的生命周期,降低了开发的成本,提高了开发效率。脚本系统在总体设计上分为属性脚本和命令脚本系统的设计,开发游戏脚本系统,其优点在于:可以创建自定义的脚本语言(语法和语义的规则);为程序提供灵活的可扩展性;发布和授权脚本系统(Lua遵守MIT),缺点主要需要开发人员掌握关于编译器理论、虚拟机等相关领域知识;需要大量花费时间去测试以确保其稳定,其中比较成熟脚本如Unreal Script是为Unreal开发人员创建的,是一种强大的内置的编程语言,主要设计目标: 支持时间、网络、属性等新兴的概念并简化了游戏编程。Unreal提供的诸如Unreal Kismet是一个灵活且强大的可视化脚本系统,它允许非开发人员编写关卡中的复杂的游戏性流程脚本,进而帮助用户创建丰富的游戏剧情等,从而使得可视化脚本系统有着无可比拟的开发效率,进而走在游戏开发设计的最前沿。
四、结束语
为了降低游戏开发进度和难度,当前游戏引擎中都包含可视化脚本系统,其具有友好界面、操作方便、功能强大、修改容易等特点,开发人员只需要通过逻辑关系将已经封装好的功能模块以线条连接方式,就可以创建所需要的脚本功能,极大的发挥可视化脚本系统的灵活性、可交互性和健壮性,非常适合游戏开发。
参考文献:
[1]李广松, 陈荣征.基于Lua的网络游戏脚本系统设[J].现代计算机(专业版),2009(12):180-182
[2]Alex Varanese. 游戏脚本高级编程[M]. 北京:清华大学出版社,2006:16-21.
[3]邵堃.刘宗田.脚本语言发展研究[J].计算机科学2000,27(1).
[4]石晓旻 .游戏引擎扩展脚本技术的研究及实现[C].成都:电子科技大学:14-32.
[5]戴玺,何明耘,陈雷霆.一种可扩展3D游戏脚本系统的设计与实现[j].计算机与现代化.2009(5):48-50.