为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

3D游戏开发大全高级篇

2012-09-30 50页 doc 1015KB 54阅读

用户头像

is_039292

暂无简介

举报
3D游戏开发大全高级篇 3D游戏开发大全(高级篇) 在我的第一本书——《3D游戏开发大全》中,我们曾经对3D游戏开发完成了一次犹如探索原始丛林般的旅程:首先,我们对3D游戏产业进行了初步了解;接着,在编程和三维概念上小试牛刀;随后,我们开始在Torque这个广袤的大草原上阔步前进,使用Torque引擎开发了一些简单的单玩家游戏环境;顺道,我们还经过了用游戏艺术手法(模型和纹理)创作的翠绿森林。在整个神奇的探索之旅中,我们对游戏开发的理解逐渐明晰起来,对Torque如何帮助我们初步开发游戏也有了更好的认识。经过这一旅程,我们了解了3D游戏开发的各个方...
3D游戏开发大全高级篇
3D游戏开发大全(高级篇) 在我的第一本书——《3D游戏开发大全》中,我们曾经对3D游戏开发完成了一次犹如探索原始丛林般的旅程:首先,我们对3D游戏产业进行了初步了解;接着,在编程和三维概念上小试牛刀;随后,我们开始在Torque这个广袤的大草原上阔步前进,使用Torque引擎开发了一些简单的单玩家游戏环境;顺道,我们还经过了用游戏艺术手法(模型和纹理)创作的翠绿森林。在整个神奇的探索之旅中,我们对游戏开发的理解逐渐明晰起来,对Torque如何帮助我们初步开发游戏也有了更好的认识。经过这一旅程,我们了解了3D游戏开发的各个方面,并仔细探究了在3D游戏开发道路上可能遇到的一些问题。 然而,到目前为止,我们只是对所遇到的很多特性和概念匆匆一瞥,未能深究。毕竟游戏开发之旅的沿途风景这么美丽多饶,每一处都让人应接不暇,面面俱到也就是面面不到。所以,在本书中,我们将故地重游某些地方并进行更深入的探索,以期学习更多的知识,从而形成全面的认知和理解。 前言与目录  3D游戏开发大全(高级篇) 前言  3D游戏开发大全(高级篇) 目录 第1章 多目标环境  1.1 TorqueScript脚本语言  1.2 3D数学预览  1.3 可玩性  1.4 制作‘Bots  1.4.1 AI概念  1.4.2 继续上一个话题  1.4.3 群体动力学  1.5 艺术性  1.5.1 细节  1.5.2 入口  1.5.3 光照  1.5.4 外皮脱卸  1.6 本章小结 第2章 使用TorqueScript脚本语言  2.1 Torque 项目的组织  2.2 安装Torque  2.3 TorqueScript概览  2.4 问题解决机制  2.4.1 日志  2.4.2 编译器错误检查  2.4.3 清除字节码模块  2.4.4 调试输出说明  2.4.5 使用trace函数  2.4.6 使用dump函数  2.4.7 使用游戏中的对象浏览器  2.4.8 TorqueScript源代码调试器  2.5 对象  2.5.1 创建对象  2.5.2 操作对象  2.6 数据块对象  2.6.1 创建数据块对象  2.6.2 数据块的声明  2.7 ScriptObject  2.7.2 使用ScriptObject  2.8 文件处理  2.8.1 export语句  2.8.2 文件对象  2.9 使用字符串  2.9.1 标记字符串  2.9.2 转义序列  2.10 本章小结 精彩技术文章推荐  一种2D游戏引擎的设计与实现  用林登脚本语言实现第二人生脚本编程  策划人员如何产生游戏测试  J2ME专业手机游戏开发基础  使用NetBeans进行游戏移植的解决方案  SDL.NET为.NET游戏开发提供跨平台支持  J2ME开发手机游戏物理模型之抛物线  将GAPI游戏从纵向模式移植到方形屏幕  如何做好游戏开发项目基本需求分析  用VisualBasic.NET编写扑克牌游戏  浅谈即时战略游戏在 J2ME 上的实现  游戏引擎原理  Asp.net 实现“九连环”小游戏  Java手机游戏编程之MIDP图形设计篇 0.1  关于本书的姊妹篇——《3D游戏开发大全》 如果您尚未看过3DGPAI1这本书,那么请允许我先在这里对它简要地的介绍一下:3DGPAI1可以全面的地教会您如何使用Torque 游戏引擎开发3D游戏。它涵盖了程序设计基础、使用Torque引擎进行编程、3D图形学基础、使用MilkShape 3D和 QuArK进行3D建模、使用Audacity进行音频处理、使用Paint Shop Pro进行纹理处理,它还给出了TorqueScript(Torque引擎提供的一种脚本语言,译者注)脚本语言的大量使用技巧。尽管3DGPAI1已经比较全面的地介绍了关于游戏开发的众多主题,但仍不要奢望那本区区600多页的书能够涵盖游戏开发所涉及的全部内容,所以引来一群举着火把的示威者也就不足为奇了。 0.2  关于本书 这本书将引导您进一步学习,它将涉及许多更难的技术领域:诸如人工智能、动态皮肤以及对游戏引擎运行机制的更深入剖析等。我们还将通过研究TorqueScript脚本语言的goodie-box来揭示它的实现机制,从而使您的游戏开发水平有一个较大的提升。 0.2.1  您需要准备什么 学习本书,您需要安装一个合适的计算机操作系统。假定您现在使用的是Windows XP系统,当然,您也可以使用其他Windows版本。 这并不是一本如3DGPAI1那样适合初学者学习的书。如果您已经购买了3DGPAI1,并且在使用它后获得了不错的学习效果,那么您一定也可以在本书中获得同样的体验,当然,这也不是绝对的。 1. 技能 如果您是一名非常全面的程序员(不管用什么编程语言),或者您有过使用Valve’s Hammer 或3D Max等工具建模的工作经验,那么您不用参考3DGPAI1一书中的基础内容部分,也可以很好地跟上本书。 阅读本书时您应该比较熟悉以下计算机相关操作:找到Windows文件夹和硬盘上某一位置的路径、使用 Windows的shell 命令(cmd.exe)、创建快捷方式和编辑它们的属性。 2. 系统 您需要一台基于Windows系统的计算机来配合学习这本书(以下给出系统的最低配置要求)。如果您使用的是Macintosh或者 Linux系统,也可以使用本书来制作一款游戏,因为本书中所使用的Torque游戏引擎也适用于这些操作系统。但是,并不是所有要用到的开发工具在Mac 和Linux 系统下都可用,因此这本书将主要以基于Intel系列的Windows 操作系统作为开发平台。 系统需求 处理器     最低配置为Pentium III/800MHz 操作系统   Windows 98/ME /2000/XP 显卡       三维加速器卡,NVidia GeForce2-32MB或者更好的 显示器     推荐17英寸的显示器 输入设备   键盘和鼠标 内存       最低配置为128MB,推荐256MB 硬盘       最低配置为4GB 光驱       最低配置为CD-R 并且,我还建议您使用好一点的新型声卡,并且能够使用宽带上网。 0.2.2  本书将提供什么 为了能使您最大限度地利用好本书,建议购买Torque 游戏引擎的使用授权,现在您只需付100美元就可获得它的使用授权。如果您已获得该授权,就可以去GarageGames网站(www.garagegames.com) 下载最新版本的社区资源,其中包含很多本书没有涉及到的技术。 本书所使用的Torque版本是Torque Release v1.3。在您下载Torque引擎演示demo的网址http://www.garagegames.com/makegames/上,您也能找到Torque Release v1.3的可执行文件和demo的代码。本书所有的章节练习都使用了TorqueScript脚本语言,但并没有讨论和涵盖任何关于Torque引擎的核心代码或者集成于该引擎中的C/C++代码模块。 0.2.3  本书附带的CD 本书所附带的CD中包含了大量的资源:Torque引擎及几种自定义构件(custom build)、基于TorqueScript脚本语言的游戏源代码和艺术作品资源、开发工具和使用Torque引擎开发的一些游戏的demo版本。 1. 源代码 本书附带的CD中包含了所有示例和答案的TorqueScript脚本代码。示例文件按每章的内容排列,完整demo的脚本文件都包含在它所在章节的对应文件夹里。 2. 游戏引擎 本书附带的CD中包含一个完整的Torque游戏引擎:可执行文件、动态链接库(DLL)、所有需要的GUI组件和相关支持文件。Torque 游戏引擎功能全面,具有高级网络通信处理能力,支持动画融合技术,具有内置于服务器端的防作弊能力,支持BSP技术,提供一个强大且完全面向对象的脚本语言(类似于C++),以及许多其他高级功能。 3. 工具 大多数标准工具集(正如在3DGPAI1中所建立的)在本书附带的CD中都提供了。尽管我们不可能面面俱到地介绍这些工具的使用细节,但是它们确实可以为您开发游戏带来方便。这些工具包括最新版本的MilkShape 3D、QuArK和UltraEdit-32。 4. 其它他内容 在本书附带的CD中,还有一个名为 EXTRAS的文件夹,它包含了使用Torque引擎制作的demos和游戏,它们面向Windows、Macintosh和Linux操作系统。此外, Macintosh 和Linux系统下的Torque 游戏引擎v1.3版本中demo的安装文件也包含在此。 0.3  现在就动手吧! 我一直这样告诉人们:如果您想成为一个不因人成事的成功者,则需要对自己正在做的事情投入极大的热情。如果您总是原地不动不停地做那些缺乏热情、斤斤计较、功利而盲目的商业决定的话,就不可能成为一个有所成就的独立开发者。随时随地都会出现一个满腔热情,目光敏锐的家伙准备超越您! 那么,现在您应该知道自己该做什么了吧! 首先,赶上那个家伙或者和他结成强有力的联盟,以本书所提供的知识作为强大武器,那么机会就是您的啦。 第Ⅰ部分  高级脚本编程 第1章  多目标环境 3 1.1  TorqueScript脚本语言 3 1.2  3D数学预览 4 1.3  可玩性 5 1.4  制作‘Bots 7 1.4.1  AI概念 7 1.4.2  继续上一个话题 8 1.4.3  群体动力学 9 1.5  艺术性 9 1.5.1  细节 10 1.5.2  入口 11 1.5.3  光照 12 1.5.4  外皮脱卸 12 1.6  本章小结 13 第2章  使用TorqueScript脚本 语言 15 2.1  Torque 项目的组织 15 2.2  安装Torque 16 2.3  TorqueScript概览 18 2.4  问题解决机制 18 2.4.1  日志 19 2.4.2  编译器错误检查 20 2.4.3  清除字节码模块 21 2.4.4  调试输出说明 21 2.4.5  使用trace函数 22 2.4.6  使用dump函数 23 2.4.7  使用游戏中的对象浏览器 26 2.4.8  TorqueScript源代码调试器 27 2.5  对象 36 2.5.1  创建对象 36 2.5.2  操作对象 37 2.6  数据块对象 39 2.6.1  创建数据块对象 42 2.6.2  数据块的声明 43 2.7  ScriptObject 43 2.7.1  创建一个ScriptObject 44 2.7.2  使用ScriptObject 44 2.8  文件处理 45 2.8.1  export语句 45 2.8.2  文件对象 46 2.9  使用字符串 47 2.9.1  标记字符串 47 2.9.2  转义序列 48 2.10  本章小结 49 第3章  向量和矩阵 51 3.1  向量 51 3.1.1  向量的定义 52 3.1.2  向量的用法 57 3.2  矩阵 64 3.2.1  使用矩阵的好处 66 3.2.2  矩阵的用法 66 3.3  TorqueScript的应用技巧 70 3.3.1  一个变换的小程序 71 3.3.2  旋转 74 3.4  本章小结 77 第4章  在3D下使用TorqueScript 79 4.1  门的旋转 79 4.1.1  门资源 80 4.1.2  门的旋转代码 81 4.1.3  门的旋转操作测试 92 4.2  门的滑动 94 4.2.1  门资源 94 4.2.2  门代码 94 4.2.3  滑动门的测试 102 4.3  warping 102 4.3.1  离开任务区 103 4.3.2  准备工作 103 4.3.3  脚本代码 105 4.3.4  warp测试 107 4.4  本章小结 107 第Ⅱ部分  人 工 智 能 第5章  轻松进入人工智能世界 111 5.1  对人工智能的错误理解 112 5.2  人工智能的应用领域 112 5.2.1  路径查找(searching) 和路径规划(routing) 113 5.2.2  规则和专家系统 113 5.2.3  逻辑和不确定性 114 5.2.4  自然语言处理 116 5.2.5  神经网络 116 5.3  群体思想 118 5.4  近期发展趋势展望 119 5.5  本章小结 120 第6章  游戏中的人工智能 121 6.1  行为 121 6.1.1  感知 121 6.1.2  行动 123 6.1.3  反应 123 6.1.4  学习 124 6.2  ‘Bot的定义 125 6.2.1  敌对者 127 6.2.2  同盟者 129 6.2.3  派别成员 131 6.2.4  群体行为 132 6.2.5  cheatbot 133 6.3  本章小结 134 第7章  虚拟敌人 135 7.1  具有静态行为的AI角色 135 7.1.1  准备工作 137 7.1.2  代码的修改 141 7.1.3  aiGuard模块 141 7.1.4  继续研究守卫 157 7.2  跟踪路径 158 7.2.1  制定一条路径 158 7.2.2  应用路径 160 7.3  追逐 162 7.4  本章小结 163 第8章  AI交互技术 165 8.1  步骤 165 8.2  代码 167 8.2.1  准备工作 167 8.2.2  AITServer模块 169 8.2.3  AITClient 模块 175 8.2.4  AITCommands模块 180 8.2.5  AITGui模块 183 8.2.6  AITScript文件 186 8.2.7  AIT资源 188 8.2.8  制作AIT脚本 188 8.3  AI角色对话系统的测试 189 8.4  本章小结 191 第9章  群体行为 193 9.1  完美的群体 194 9.1.1  准备工作 194 9.1.2  群体的模块 196 9.1.3  代码测试 202 9.2  一个追逐群体 203 9.3  本章小结 206 第Ⅲ部分  强化游戏编程 第10章  损害控制 209 10.1  生命值 210 10.1.1  player.cs脚本模块中的 关键特征 212 10.1.2  添加能量条 224 10.1.3  损害与能量的关联 226 10.2  打击位置 227 10.3  砰、砰、轰隆隆! 228 10.3.1  准备工作 229 10.3.2  代码 230 10.3.3  惊奇的桶爆炸测试 237 10.4  疯狂的巡逻车 237 10.4.1  巡逻车的损害处理代码 237 10.4.2  巡逻车的爆炸 240 10.5  在玻璃房子中生活 242 10.5.1  准备工作 242 10.5.2  代码 245 10.5.3  窗户的测试 252 10.6  本章小结 253 第11章  让一切变得更真实 255 11.1  现实世界的地形 256 11.1.1  DEM文件格式 256 11.1.2  将DEM转换为高度图 (Heightmap)格式 257 11.1.3  Torque的准备工作 259 11.1.4  游戏地形中的高度图 259 11.2  植被 264 11.2.1  森林 264 11.2.2  牧场 266 11.3  本章小结 269 第12章  效果优化 271 12.1  士兵身上的光芒 271 12.1.1  日升、日落 274 12.1.2  制作光晕效果 278 12.2  无处不在的水 281 12.2.1  水的表现形态 281 12.2.2  水的杀伤力 288 12.3  水中漫步 291 12.4  本章小结 291 第13章  PHP创建联机游戏服务 293 13.1  PHP和Apache 294 13.1.1  Apache的安装 294 13.1.2  设置 295 13.1.3  安装PHP 296 13.1.4  连接Apache和PHP 299 13.2  使用Web的游戏内部服务 300 13.3  游戏内部的信息抢夺者 300 13.4  身份验证 304 13.4.1  PHP身份验证代码 305 13.4.2  TorqueScript 代码 306 13.5  本章小结 313 第Ⅳ部分  强化游戏建模 第14章  结构建模 317 14.1  细节层次 318 14.1.1  示范 318 14.1.2  细节层次 322 14.1.3  实现 324 14.1.4  怪兽角色的操作细节 330 14.2  实体 332 14.2.1  入口 332 14.2.2  演示 333 14.2.3  创建与放置入口 334 14.3  光照 335 14.3.1  静态光照 336 14.3.2  动画光照 337 14.3.3  光照测试 338 14.4  本章小结 340 第15章  形体建模 341 15.1  细节层次化 342 15.1.1  创建板条箱 342 15.1.2  玩家化身 347 15.2  本章小结 352 第16章  可变外皮 355 16.1  板条箱 357 16.1.1  资源和准备工作 357 16.1.2  代码 358 16.1.3  使用可变外皮的板条箱 359 16.2  一切就绪,预备,出发! 362 16.2.1  就绪…… 362 16.2.2  预备…… 363 16.2.3  出发! 365 16.3  空闲状态时的外皮变换 366 16.3.1  设置 366 16.3.2  代码 366 16.3.3  Mr.Box演示 369 16.4  本章小结 370 16.5  实践! 370 附录A  Torque游戏引擎参考 371 A.1  TorqueScript函数参考 372 A.2  Torque参考表 425 附录B  附加资源 445 B.1  本书中附加的TGE Build 代码资源 445 B.2  Internet上的游戏开发 资源 445 B.2.1  与Torque相关的Web 站点 446 B.2.2  游戏开发Web站点 446 B.3  游戏开发工具参考 450 B.4  共享软件和免费软件 工具 451 B.4.1  建模 451 B.4.2  程序编辑 452 B.4.3  音频编辑 452 B.4.4  其他 452 B.5  零售工具 453 B.6  GNU一般公众许可证 454 第一章 多目标环境 在我的第一本书——《3D游戏开发大全》中,我们曾经对3D游戏开发完成了一次犹如探索原始丛林般的旅程:首先,我们对3D游戏产业进行了初步了解;接着,在编程和三维概念上小试牛刀;随后,我们开始在Torque这个广袤的大草原上阔步前进,使用Torque引擎开发了一些简单的单玩家游戏环境;顺道,我们还经过了用游戏艺术手法(模型和纹理)创作的翠绿森林。在整个神奇的探索之旅中,我们对游戏开发的理解逐渐明晰起来,对Torque如何帮助我们初步开发游戏也有了更好的认识。经过这一旅程,我们了解了3D游戏开发的各个方面,并仔细探究了在3D游戏开发道路上可能遇到的一些问题。 然而,到目前为止,我们只是对所遇到的很多特性和概念匆匆一瞥,未能深究。毕竟游戏开发之旅的沿途风景这么美丽多饶,每一处都让人应接不暇,面面俱到也就是面面不到。所以,在接下来的几章中,我们将故地重游某些地方并进行更深入的探索,以期学习更多的知识,从而形成全面的认知和理解。 1.1 TorqueScript脚本语言 当今流行的游戏引擎(包括Torque),其最主要的技术就是它们的脚本化能力。从某种意义上说,游戏引擎就是包括诸如渲染器、资源管理器以及物理规律模拟等可支持技术的一个集合。游戏脚本相当于粘合剂,把这些技术紧密结合在一起,创建出一个可以有效运行的游戏环境。本书第I部分将进一步介绍TorqueScript的更多相关内容,以及如何在游戏开发环境下应用TorqueScript。 在游戏开发中常常用到脚本,因为脚本允许即时创建代码,可以实现管理和控制游戏引擎或形式化游戏规则等功能,而无需程序员重新编译程序代码去测试它们。在Torque中,修改或者添加脚本是相当简单的操作,只要告诉Torque重新加载脚本,立即就可以看到相应的结果。当我们向Torque加载脚本时,如果不存在该脚本的编码版本或者脚本的源码版本新于当前的编码版本,Torque会自动将脚本重新编译成基于字节编码的p-code编码形式。下面就是一个TorqueScript源代码的简短示例: if (%obj.getState() $= "Dead") return; %obj.applyDamage(%damage); %location = "Body"; %client = %obj.client; %sourceClient = %sourceObject ? %sourceObject.client : 0; if (%obj.getState() $= "Dead") { %client.onDeath(%sourceObject, %sourceClient, %damageType, %location); return; } TorqueScript是一种相当灵活的语言。它在很大程度上提供了现代编程语言的几乎所有特性和功能。它将基于对象的范式及过程化方法与语法完美的地结合在一起,精通C/C++的人非常熟悉这种模式,很容易上手。 数据块及其工作方式是Torque引擎中最重要的一个概念。TorqueScript提供了对数据块的内部支持。 Torque 引擎通过TorqueScript展现了大量的内在功能。我们在本书中所编写的全部程序都是使用TorqueScript语言完成的。 1.2  3D数学预览 在3D游戏中,数学一个很重要的功能就是可以综合利用运动对象的当前位置、欲移动的距离、欲移动的速度以及将要移动的方向,来计算对象将到达的位置在3D空间中的坐标值。 在大多数情况下,向量是用于解决从出发地到目的地之间的移动问题的有效数学工具。图1-1以概念的形式展示了如何使用向量来导航路径穿越有障碍的地带。我们可以看到,帆船只要按照A→B,B→C,C→D这一向量顺序,它就可以顺利穿过障碍物。我们可以通过定位安全的转弯点来确定每一个新向量,然后计算出所需的向量。当我们告知帆船某个向量时,其实就是让帆船在某一确定的方向上航行一段时间。 在几何学中,向量只有位移和方向两个属性,它并没有被限定为空间中的某一个具体的位置。也就是说,我们可以使用同一个向量对某个对象的任一点或任一顶点施加相同的操作,从而获得不同的结果。在这里请大家注意,这些结果存在着一定的关联性。在数学上,它们是相关联的,因为它们都使用了同一个向量。应用向量前,它们在空间上是相关联的,因为在每种情况下所使用的向量完全相同。图1-2展示了对三角形的3个顶点都使用相同的向量进行操作的情形(带箭头的虚线)。请注意,灰线所示的三角形和原来的三角形具有相同的形状。它只是移动了一下位置而已。 图1-1 使用向量进行导航 图1-2 使用同一个向量3次 事实上,向量是一种特殊形式的矩阵——单列矩阵。在第3章对向量进行更深入探讨的时候,我们会更详细地介绍矩阵。 Torque提供了支持向量数学和解决您可能遇到的所有向量相关问题的内置函数。 1.3  可玩性 制作一款有趣好玩的游戏需要涉及很多方面的知识。每一款游戏所表现的可玩性对它的成功与否有着相当大的影响。很多时候,游戏的某一个好玩之处就是使它脱颖而出的关键所在。最初Delta Force 游戏中的“一弹毙命”特性就是这方面一个很好的示例。在此版本之前,第一人称射击者游戏更倾向于通过积累生命值(hit point),直到对一个游戏角色造成足够损害的时候才使其致死。而现在,玩家可以手握狙击步枪躲进山里,对出现的敌人予以致命一击。 杀伤力 正如您刚刚看到的,有些游戏可以评估出游戏角色的总损害值,但是也有很多游戏倾向于评估玩家角色某一具体部位的损害值,比如:胳膊的受伤次数、头被击中的次数等。我们可以使用Torque的内置功能来确定命中位置并以此提供更为精确的损害评估形式。图1-3展示了一个怪物模型,它位于以白色边框勾勒的碰撞盒中。 图1-3 玩家模型的碰撞盒 Torque可以帮助我们计算出模型上被击中部位的精确位置。这一概念还可以应用于其他对象上,试想一下树叶和树枝被击落时的情景吧。 我们还将展示如何在虚拟世界中做个快乐的纵火狂,爆炸、火烧汽车——只当是在晴朗夏日午后打发无聊的趣事罢了。当然,现实世界中的一切事物都并没有真的被破坏掉。我们可以设想,那些在游戏中作为您练习射击的对象模型将是多么的倒霉! 如果没有窗户粉碎的音效,游戏又怎能称得上完整呢?图1-4展现了一个粗暴的怪兽肆无忌惮地挥动它的巨弩发射爆破弹对大厅大肆破坏的场景。 图1-4 大厅里残破的窗户 1.4  制作‘Bots 人工智能(Artificial Intelligence,AI)是一个很大、很宽的主题。我们通常只关心由计算机控制的游戏角色及其行为,这也是本书第II部分的主题。AI技术在游戏开发的一些特定领域中已经取得了很好的理解和运用。并且,还有一些领域处在应用AI技术最前沿的位置上,至少是游戏背景方面的最前沿。 不同的游戏流派或社团在讨论AI时,对它的表述存在着一些细微的差别。通常,我们使用术语AI。然而,很多动作类游戏采用术语bots或者‘bots(在字母b前增加一个单引号),这是单词robots(机器人)的一种缩写形式。然而,在另外一些场合,尤其是角色扮演类游戏中,他们更倾向于使用术语NPC(Non-Player Character,非玩家控制角色)—— 在游戏情节中不受玩家控制的人物角色(见图1-5)。 图1-5 ‘Bots 它们下一步的移动 还有一个术语是怪物(monster)。其实,把一些由计算机控制、负责守卫秘密设备的士兵人物称为怪物是件非常奇怪的事情,但是有些人就是喜欢这样的称谓,我们也没有办法。这种叫法源于诸如Doom和Commander Keen这样的老牌游戏,在这些游戏中,他们使用了AI怪物这个词语。并且,他们称那个在游戏过关前必须要去击败的大怪物为Boss。虽然这些称谓看起来似乎已经过时,但是现在人们仍然在使用它们。 1.4.1  AI概念 计算机控制的AI模拟人物角色时,通常需要模拟3种不同的行为模式:感知(perception)、行动(action)和反应(reaction)。 有必要将游戏世界里AI角色周围环境的各种变化给AI角色。如果做到这些,就可以帮助AI角色感知其周围的环境以及正在发生的事件。在这里,您必须明白一点:您的AI角色只能感知您通过编程告诉它的情况。我们可以通过编程使AI角色能四处侦察是否有玩家出现。但是,除非您通过编程使其能够感知飞来的火箭即将落到它的身边需要躲避,否则,不管您如何向它射击,它都不会知道自己正身处险境。 在游戏中,当需要直接对AI角色进行控制的时候,尤其是指挥角色前往某一特定目的地时,我们可以使用路径跟踪技术。正如图1-6所示,Torque提供的可视化工具可以方便地设定我们的AI角色将要行走的路径。在图中,路径用a、b、c、d和e标出(a标签因为被另一个对象挡住而呈灰色)。图中的路径用一个由许多点组成的曲线环表示。 图1-6 World Editor中的一条AI路径 对于‘bot来说, 行动是指执行特定任务或任务序列的能力。一个简单的任务可以是从某个位置移动到另一个位置,也可以是向敌人开火。作为游戏程序员,我们的目标是教会或者说是通过编程让AI角色完成适量的简单任务。然后,将这些简单任务高效地组合成大型的复杂任务,再将这些稍微大型的复杂任务组合成规模更大的复杂任务,以此类推,直到获得我们希望它表现出的效果。 反应指的是AI角色根据对状态或事件的感知而做出适当行为的一个过程。参见我们上面所举的示例1,如果我们通过编程使AI角色能够感觉到或感知到自己正在被攻击,那么我们同样也可以通过编程让其表现出相应的反应,比如逃跑、还击或者发出野兽般的嚎叫。 1.4.1  AI概念 计算机控制的AI模拟人物角色时,通常需要模拟3种不同的行为模式:感知(perception)、行动(action)和反应(reaction)。 有必要将游戏世界里AI角色周围环境的各种变化通知给AI角色。如果做到这些,就可以帮助AI角色感知其周围的环境以及正在发生的事件。在这里,您必须明白一点:您的AI角色只能感知您通过编程告诉它的情况。我们可以通过编程使AI角色能四处侦察是否有玩家出现。但是,除非您通过编程使其能够感知飞来的火箭即将落到它的身边需要躲避,否则,不管您如何向它射击,它都不会知道自己正身处险境。 在游戏中,当需要直接对AI角色进行控制的时候,尤其是指挥角色前往某一特定目的地时,我们可以使用路径跟踪技术。正如图1-6所示,Torque提供的可视化工具可以方便地设定我们的AI角色将要行走的路径。在图中,路径用a、b、c、d和e标出(a标签因为被另一个对象挡住而呈灰色)。图中的路径用一个由许多点组成的曲线环表示。 图1-6 World Editor中的一条AI路径 对于‘bot来说, 行动是指执行特定任务或任务序列的能力。一个简单的任务可以是从某个位置移动到另一个位置,也可以是向敌人开火。作为游戏程序员,我们的目标是教会或者说是通过编程让AI角色完成适量的简单任务。然后,将这些简单任务高效地组合成大型的复杂任务,再将这些稍微大型的复杂任务组合成规模更大的复杂任务,以此类推,直到获得我们希望它表现出的效果。 反应指的是AI角色根据对状态或事件的感知而做出适当行为的一个过程。参见我们上面所举的示例1,如果我们通过编程使AI角色能够感觉到或感知到自己正在被攻击,那么我们同样也可以通过编程让其表现出相应的反应,比如逃跑、还击或者发出野兽般的嚎叫。 1.4.1  AI概念 计算机控制的AI模拟人物角色时,通常需要模拟3种不同的行为模式:感知(perception)、行动(action)和反应(reaction)。 有必要将游戏世界里AI角色周围环境的各种变化通知给AI角色。如果做到这些,就可以帮助AI角色感知其周围的环境以及正在发生的事件。在这里,您必须明白一点:您的AI角色只能感知您通过编程告诉它的情况。我们可以通过编程使AI角色能四处侦察是否有玩家出现。但是,除非您通过编程使其能够感知飞来的火箭即将落到它的身边需要躲避,否则,不管您如何向它射击,它都不会知道自己正身处险境。 在游戏中,当需要直接对AI角色进行控制的时候,尤其是指挥角色前往某一特定目的地时,我们可以使用路径跟踪技术。正如图1-6所示,Torque提供的可视化工具可以方便地设定我们的AI角色将要行走的路径。在图中,路径用a、b、c、d和e标出(a标签因为被另一个对象挡住而呈灰色)。图中的路径用一个由许多点组成的曲线环表示。 图1-6 World Editor中的一条AI路径 对于‘bot来说, 行动是指执行特定任务或任务序列的能力。一个简单的任务可以是从某个位置移动到另一个位置,也可以是向敌人开火。作为游戏程序员,我们的目标是教会或者说是通过编程让AI角色完成适量的简单任务。然后,将这些简单任务高效地组合成大型的复杂任务,再将这些稍微大型的复杂任务组合成规模更大的复杂任务,以此类推,直到获得我们希望它表现出的效果。 反应指的是AI角色根据对状态或事件的感知而做出适当行为的一个过程。参见我们上面所举的示例1,如果我们通过编程使AI角色能够感觉到或感知到自己正在被攻击,那么我们同样也可以通过编程让其表现出相应的反应,比如逃跑、还击或者发出野兽般的嚎叫。 1.4.2  继续上一个话题 在本书中,我们还将通过编写程序让AI角色具备更逼真的智能,让它们可以在游戏世界里自己寻路、感知游戏世界里的事件、时刻保持对玩家角色的警觉性、对威胁和事件作出恰当的反应。 我们可以依赖于Torque对AI的内置支持功能,但这还远远不够。所以需要自己编写符合要求的行为脚本。若把握好了这一点,就可以看到非常有趣的突发行为——‘bots会做出一些出乎意料的行为。图1-7展示了由非常简单的AI脚本控制的两个奇幻生物在互相攻击。 图1-7  ‘Bots间的自适应攻击 1.4.3  群体动力学 很多类型的游戏都会向玩家提供一群由计算机控制的AI角色,它们要么与玩家同一战线,要么是玩家的死对头,成为阻挡玩家前进的障碍。有时由计算机控制的AI角色只是用于营造游戏气氛。比如,让一群海鸥围绕海上航行的船只盘旋。 在游戏环境中,需要对各种群体类型进行建模,比如蜂群、羊群、牧群及兽群等。我们会在第II部分对有关概念进一步展开介绍,并编写几个脚本示例以说明它们的工作原理,如图1-8所示。 图1-8 群聚 1.5  艺术性 在游戏开发中,我们不能在游戏的艺术性方面敷衍了事。《3D游戏开发大全》一书虽然在关于艺术制作与建模的几章中介绍了几个关于游戏艺术性的主题,但那些介绍并不全面。本书的第III部分将对此进行一些调整和补充。请大家注意一下,本书并没有提供艺术制作工具的相关使用。但是,您可以在本书附带的CD上找到相关软件的共享版或者免费版。这样,您还是可以很方便地使用这些工具完成要做的工作。如果您不知道如何使用这些工具,则可以参阅《3D游戏开发大全》一书来配合本书的学习。 1.5.1  细节 在降低游戏客户端渲染器的载入时间上,有一种灵活有效的平滑机制可供游戏开发者使用,称为细节层次化技术(LOD)。 LOD和MIP贴图的概念很相似。MIP贴图是一种纹理贴图方法,它将原始的高分辨率纹理经过缩放和过滤,使其分辨率增加数倍,然后再贴图到模型面上。使用LOD时,可以为一个模型制作多个版本的模型文件,而各个层次的模型文件所使用的多边形随层次的降低依次减少。 LOD的基本思想:随着与模型的距离越来越远,将会出现两种情况:第一,我们离建筑物这类物体越远,可能出现在视野中的建筑物就可能越多,这就需要绘制更多的多边形,并且会加重渲染器和显卡的负担; 第二,向远处后退的建筑物的细节部分将会越来越模糊。图1-9显示了建筑物模型的完整细节层次的和两个稍微降低层次的LOD版本。注意,最低层次的LOD版本居然只是一个盒子! 图1-9 建筑物的各种细节层次化效果 通过LOD切换技术,我们可以利用第二种现象去最小化甚至完全消除第一种情况所带来的副作用。当我们远离建筑物时,游戏引擎将自动检测进入我们视野中的建筑物的大小。当建筑物的大小超过某一极限时,引擎就会停止渲染当前模型的完全细节层次化版本,并改为去渲染其稍低层次的细节层次化版本。它会监视模型外观大小的变化直到它达到下一个极限,如此进行下去。我们可以一直这样使用细节层次化技术,直到建筑模型的大小变为远方的一个像素点为止。 同样,我们可以将LOD技术应用于所有模型上——玩家角色、光源、车辆、树木以及其他物体。 1.5.2  入口 当给建筑物的内部结构建模的时候,可以使用入口(portal)(见图1-10)帮助引擎判断哪些地方需要绘制,而哪些地方可以忽略。 图1-10 一个城堡内部的入口 入口提供了加速渲染和提高游戏帧频率的另一种方法。它也提供了一种帮助控制内部场景光照的机制。图1-10显示了如何使用入口将一个内部场景划分为多个区域(又称单元格)。图中玩家从房间所看到的场景就是一个区域,其中靠右的楼梯间里也划分了两个区域,而整个大房间的窗外空间又是一个区域。 在图1-11中,入口用CSG画笔所绘出的粗黑线条表示。在CSG术语中,画笔是凸起的3D形状。 图1-11 一个建筑物内部模型中的入口 当模型源文件被编译为与Torque引擎兼容的格式时,编译器会计算出哪些区域将对其他区域可见,并将这些信息插入该模型的描述文件中。然后引擎根据这些信息来决定如何渲染模型的内部场景。1.5.3  光照 巧妙地运用光照效果,绝对会让您的游戏呈现出令人惊异的效果。Torque提供了以下几种光照机制:fxSunlight、环境场景光照、内部点光源和全方位光照。 还存在一些由Torque社区制作的资源,比如来自Synapse Gaming的Lighting Code Pack。您可以在GarageGames的Web站点(www.garagegames.com)上购买该资源。图1-12是一个使用该光照机制所渲染出的场景效果。这个场景中的所有对象都笼罩在忽明忽暗的火光之下 图1-12 夜间场景的动态照明效果 使用上述资源所提供的技术,可以把诸如阴影这样的光照信息在场景渲染中表现得淋漓尽致。即使在非常复杂的场景中,这种光照处理也几乎不会对渲染的性能有任何影响。它还可以为不断移动的物体提供动态光照效果,使其获得在游戏世界中所需要的真实感和动感。 我们会在第III部分中,使用Torque内置光照功能探索静态的和动态的照明效果。我们将实现多种光照效果,比如快门光照、跑道光照和彩色光照等。 1.5.4  外皮脱卸 制作大而多样化的模型集是一个使游戏丰富多彩的好办法。当然,做到这一点需要完成大量的工作。有一种更为快捷的办法可以做到这一点而不必制作太多的模型文件,那就是利用外皮更换技术。 对不同的模型赋以不同外皮的简便办法就是直接将这些模型简单地复制多次,然后逐个编辑它们,使之拥有不同的外皮。虽然这样做完全行得通,但是,在复制和编辑的过程中仍然有大量的额外工作需要去完成,并且当游戏运行和模型加载时,这些模型的每个副本(及其外皮)会占用很多的磁盘空间和内存。 那么,一次制作一个模型和一系列的外皮,会不会效果更好呢?非常正确!事实上,Torque提供有内置机制去完成这一切。利用这种机制,可以在游戏运行的任意时刻将任何一套外皮赋贴到模型上。这样,我们可以使玩家能根据自己的喜好去为游戏角色选择不同的外皮设计,同样也能使玩家人物的外皮随着人物状态的变化而变化——比如受伤、健康、换上新衣服等。 动态外皮更换技术可以很好地支持基于团队类型的游戏。我们只需要简单地制作出一个模型或模型集,就可以对相应团队的模型进行外皮更换。 1.6  本章小结 在本章中,我们快速通览了3D游戏开发方面的许多功能和概念,它们要比《3D游戏开发大全》一书中的内容更为高级、全面。 在第2章中,将深入介绍TorqueScript,并帮助您学会随心所欲地使用它。当然,我指的是正确地使用它。 第二章 使用TorqueScript脚本语言 在本章,我们将深入介绍TorqueScript脚本语言应用于编程时不常使用的那些功能。《3D游戏开发大全》一书的第4~7章已经讲解了TorqueScript脚本语言的大部分基本功能,所以,在本书中这些内容不再一一赘述。 不过,在本章以及本书稍后的第II部分和第III部分的动手实践中,我还会涉及TorqueScript的一些更为高级、更为复杂的功能。 下面借用Ben Garney在GarageGames 中的一段精辟言语: “就像JavaScript以及其他语言一样,TorqueScript 在过程化(procedural)和面向对象编程(OOP)开发之间取得了一种平衡状态。其尤为经典的就是‘在系统的灵魂内部工作’”。 他的话为我们有效掌握TorqueScript指明了方向。您可以通过面向对象的编程方式获得许多重要的便利,比如:封装、数据隐藏、多态性和继承。不过需要说明的是,您不要指望它达到像C++之类语言的性能表现。 2.1  Torque 项目的组织 使用Torque引擎的时候,必须时刻清楚编写的代码在整个Torque项目中的位置所在。图2-1展示了一个典型的Torque项目中脚本文件的文件夹布局情况。 在开发游戏时,通常需要花费大量的时间和控制代码基(control code base)打交道。控制代码基定义了我们所编写游戏的可执行代码、游戏艺术以及其他资源。在本书中, Torque文件夹内的\A3D文件夹中有3个控制文件夹:演示(demo)文件夹、显示(show)文件夹和资源(rw)文件夹。 图2-1 典型的TorqueSript项目组织结构 无论是需要完成跟踪、计算、记分还是制定重要的游戏规则这样的任务,都需要为服务器编写代码。因此,通常在我们的控制文件夹中,还有一个名为server的子文件夹,其中存放着所有服务器代码。 当我们想要定义游戏图形用户界面系统、显示游戏艺术、播放音频文件或者处理玩家的输入操作时,都需要为客户机编写代码。那么,简便的做法就是,建立一个名为client的子文件夹来存放所有客户机代码。 在名为common的文件夹内包含着大量的实用代码,它们被称之为公共代码基。这些代码中的大部分都是您每天都必须用到,而与特定游戏无关的代码,它们可以让您的程序完成许多工作:控制定义、服务器和客户机的管理以及代码同步、游戏内部编辑器、字体缓存以及其他琐碎事务。除非您想修改一些图片和纹理以协调游戏的整体外观效果,否则您大可不必关心这一部分代码。 2.2  安装Torque 随书附带的CD中包含学习各章所需的全部资料:Torque 可执行文件、Torque 游戏引擎的演示(“Torque演示”)、用到的所有游戏艺术和脚本资源以及一些有用的工具,它们都存放在\A3D文件夹内。 位于\A3D\TOOLS文件夹内的一些工具,需要安装后才可以使用。并不是CD中提供的所有工具全部都将在本书中使用。其中的有些工具只是为了让读者在找不到另一个合适工具的情形下,顺利完成某一特定任务而提供的。 如果书中在某些地方强调必须使用哪一特定工具来完成某一步骤时,它会告诉您在哪里可以找到该工具以及如何进行安装,或者如何进行使用。 为了配合本书的学习,请先安装Torque。将随书附带的CD插入到光驱,然后根据屏幕上的提示进行操作。当您完成硬盘上的路径设置后,它会自动找到其在CD上的位置,也就是说,如果您想看书中描述的\A3D或者它的任何子文件夹中的相关内容,都可以在您的硬盘或者随书附带的CD上面找到。对于Windows操作系统下的用户,学习本书,其实并不需要CD上的\EXTRAS文件夹下的内容。 致Macintosh和Linux用户: 随书附带CD的安装过程以及位于\A3D路径下的Torque演示的可执行文件并不适用于非Windows操作系统系列版本的用户。不过,本书示例中的脚本以及游戏艺术均可以在Macintosh和Linux操作系统下使用。并且,您可以从随书附带CD的\EXTRAS文件夹中找到适用于您所使用操作系统版本的Torque演示安装文件。 当使用下述安装文件进行安装时,请确保您安装的目录或者文件夹是\A3D,而不是所显示的默认安装路径。这样可以确保您的安装路径与书中所描述的路径相一致。 为此,您首先要在随书附带CD的/EXTRAS文件夹下找到适合您的操作系统的安装程序,然后进行安装: Macintosh用户 使用/EXTRAS /Macintosh /TorqueGameEngineDemo_1_3.dmg文件。 Linux用户 使用/EXTRAS /Linux /TorqueGameEngineDemo-1.3.bin文件。 安装适合您系统的Torque演示版本之后,必须将CD上/A3D文件夹中的所有内容复制到安装文件新创建的/A3D目录(您安装Torque演示所在的目录)下。 如果您喜欢,还可以在新的/A3D文件夹下,删除demo.exe、getdxver.exe、glu2d3d.dll、OpenAL32.dll以及opengl2d3d.dll文件—— 这些都是您永远都用不到的Windows文件。 还有一点请大家注意:在本书中,有时您会看到通过绝对路径来调用该文件夹中的相关内容,比如\A3D\demo\client\init.cs;有时,您也会看到通过相对路径来调用,比如RESOURCES\ch2,但是,这两种方式下都不会包含驱动器名称。也就是说,无论您将文件安装在哪个硬盘或者分区中,文件的路径名都是适用的。使用相对路径,可以很容易地看出文件所处的位置。就像TOOLS、demo、common、rw 、editor和 show文件夹一样,RESOURCES永远都是\A3D的一个子文件夹。 注意: 在本书中,您会看到很多和“fps demo”有关的说明以及示例。fps demo是Torque 游戏引擎演示程序,用来执行fps任务。您可以双击位于A3D文件夹中的demo.exe可执行文件运行fps演示程序。当弹出的屏幕迅速消失后,在主菜单中,单击屏幕中央位置的“Example : FPS Multiplayer”按钮。在接下来的屏幕上,选中Create Server复选框,然后单击位于屏幕左下方的右移按钮。 2.3  TorqueScript概览 如果您是一位使用Torque的新手,那么这里就是对TorqueScript的一个走马观花式的浏览,它可以帮助您快速入门。 很明显,在下列几个背后还有大量的细节需要我们花费许多时间去挖掘和说明。 无类型 Torque中的变量类型可以根据需要进行自动类型转换。变量在程序范围内既可以是全局变量也可以是局部变量。全局变量使用字符$作为前缀,局部变量使用字符%作为前缀。局部变量只能在函数或方法内部使用,而全局变量可以在程序的任何地方使用。 不区分大小写 当说明变量和函数名称的时候,TorqueScript会忽略其大小写,但TorqueScript中的关键字是区分大小写的。附录A中的表A-3列出了TorqueScript中的所有关键字,请注意它们全部都是小写字母。 语句结束 就如许多像C/C++、Java的现代编程语言一样,TorqueScript的程序语句也以分号(;)结束。如果您不在TorqueScript语句的结束位置添加分号,那么您很有可能在控制台中得到错误提示。 运算符 参见附录A中的表A-4,该表详尽列出了TorqueScript的所有运算符。它们中的大部分都是当前很多编程语言中所使用的基本或略微高级一些的运算符。运算符优先级在附录A的表A-5中列出。 控制结构 就像C/C++和Java一样,TorqueScript提供了标准的程序控制结构:if-then-else,for,while和switch。 函数 TorqueScript可以定义自己创建的函数是否需要返回函数值。参数可以通过值或引用进行传递。当您定义了一个函数的时候,语句必须以function关键字开头。 对象 Torque提供了广泛范围的对象分类以及对象类型,使对象可以灵活
/
本文档为【3D游戏开发大全高级篇】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索