APP下载

基于Unity3D三维游戏场景与AI系统的设计与实现

2013-05-24卢金浩张帅伍传敏

三明学院学报 2013年6期
关键词:动画建模状态

卢金浩,张帅,伍传敏

(三明学院信息工程学院,福建三明,365004)

基于Unity3D三维游戏场景与AI系统的设计与实现

卢金浩,张帅,伍传敏

(三明学院信息工程学院,福建三明,365004)

以游戏场景设计与优化、AI(人工智能)系统为主要研究目标,阐述游戏场景搭建规范及优化技巧,分析AI设计过程中的主要思路和主要算法实现。通过高效的、复杂的AI系统,创造出游戏中更加真实的角色行为,提高玩家在游戏中与智能角色的互动体验。实践证明,该技术具有一定的实际应用价值。

Unity3D;场景设计;AI;寻路算法

近几年来,Android平台游戏、iPhone平台游戏以及Web的网页游戏迅猛发展,已然成为带动游戏发展的新生力量。遗憾的是目前除了少数的作品成功外,大部分的游戏都属宣传攻势往往大于其内容品质,加之玩家体验游戏时,对游戏的沉浸感和操控性的要求也逐渐提高。在这种局面下,3D游戏成为当前游戏的发展热点。而本文所采用的Unity3D游戏引擎提供了创造高质量的3D游戏和真实视觉效果的核心技术,为开发3D游戏提供了强大的驱动力。

本文基于Unity3D游戏引擎,研究三维游戏场景搭建规范及优化技巧以创建丰富的游戏画面且保证游戏运行的流畅度,分析游戏角色中AI设计过程的主要思路和主要算法实现,通过高效复杂的AI系统开发一款基于Unity3D的3D角色扮演类游戏,使之具备丰富的角色对抗和任务模式。实践证明,本文所讨论的关键技术可应用于场景漫游、游戏开发等多个领域,具有一定的实际应用价值。

1 游戏场景设计

在游戏开发过程中,模型与贴图的完美搭建可以给玩家带来绚丽的场景,提高游戏的意境,突出游戏主题。因此,如何快速完成模型与贴图的完美搭建,并保证游戏的流畅运行成为游戏设计需要解决的一个重要课题。

1.1 游戏场景搭建制作规范

游戏场景中如地形和简单的基本对象(如地形、树、草木等)可在Unity3D中直接创建,而其他如主要角色或特定的装饰性物品,则需要从其他的3D建模软件(如Maya,3DMax等)中导入。在搭建游戏场景时,应先创建游戏世界的环境,再放置角色及物品。默认情况下Unity3D的单位等于1 m,尤为值得注意的是修改任何外部应用程序来匹配这一比例,这样在放置所有的资源时会简单很多。本游戏采用Maya建模,其Maya转Unity3D的比例为0.01∶1。而且面片数控制在32500个Polygon面片,如果超过这个数量,则物体不会显示出来,则需要合理分布多边形和模型数量。

当一个三维模型制作完成时,其基本内容应包括场景尺寸、单位、模型归类、命名、节点编辑、纹理、坐标、纹理尺寸、纹理格式、材质球等必须符合制作规范。一个归类清晰、面数节省、制作规范的模型文件对于程序控制管理是十分必要的。一般场景模型制作流程基本包括素材采集>模型制作>贴图制作>场景归类、命名、展UV坐标>灯光渲染测试>场景烘焙>场景调整导出。在建模时需要注意以下几点:

(1)建模时应在模型分工之前,必须对模型定位标准。一般这个标准会是一个CAD底图,制作人员必须按照这个带有CAD底图的文件确定自己的分工区域的模型位置,并且不得做任何修改。导入到三维建模软件中的CAD底图最好在(0,0,0)位置,以便制作人员的初始模型在零点附近。

(2)建模完成后要及时删除场景中多余的面,在建立模型时,看不见的地方不用建模,对于看不见的面也可以删除,主要是为了提高贴图的利用率,降低整个场景的面数,以提高交互场景的运行速度。如Box底面、贴着墙壁物体的背面等。

(3)默认情况下,Unity3D不支持双面材质,除非使用植物材质球Nature类型。因此保持模型面与面之间的距离推荐最小间距为当前场景最大尺度的二千分之一。例如:在制作室内场景时,物体的面与面之间距离不要小于2 mm;在制作场景长(或宽)为1 km的室外场景时,物体的面与面之间距离不要小于20 cm。如果物体的面与面之间贴得太近,会出现两个面交替出现的闪烁现象。但如果要制作如窗户、护栏等物体,如果想在两面都看到模型,则需要制作出一定厚度,或者复制两个面并将其中一个面翻转法线贴图即可。

1.2 游戏贴图的优化

在Unity3D作为游戏的开发平台,对模型的材质有一些特殊的要求,Unity3D并不支持所有Maya中的材质球,只有一些标准材质(如Blin,Lambet等材质)会被Unity3D所支持。并且贴图的尺寸必须是2的N次幂,且最大贴图尺寸不能超过1024*1024,在烘焙时将纹理贴图设置为TGA格式。

渲染优化时要选择使用遮挡剔除技术(Occlusion Culling):即当一个物体被其他物体遮挡而不在摄像机的可视范围内则不对其进行渲染。遮挡剔除的运行将通过在场景中使用一个虚拟的摄像机来创建一个物体潜在可视性状态(set)的层级。这些数据可以让每个运行时间内的摄像机来确定什么能看见什么看不见。通过这些数据,Unity将确定只把可以看见的物体送去渲染,这将降低描绘指令(draw calls)的数量并提供游戏的运行效率。如图1:左边的场景使用了遮挡剔除,右边的场景则使用了遮挡剔除。最终渲染结果是一样的,但使用了遮挡剔除后明显会提高游戏的运行质量。

2 AI系统的实现

2.1 游戏AI系统的框架构建

秀容月明比谁都清楚,北城外面,必然埋伏着胡人的两支精锐骑兵,只要城门开了,桂州城就破了。在长于野战的胡人铁骑夹击下,开门出战的宁军也好,意图逃跑的百姓也好,决无幸免之理。要是巢城没失守,便可牵制胡人,时机到了,还可出击,和桂州相呼应。如今说什么都没用了,张家猛已把巢城弄丢了。要是他手上有一万秀容兵,局面便大不相同,说不定还能大破胡人,可惜,他只有两千秀容兵,连着十五天鏖战,秀容兵只剩两三百人了。

2.1.1 非玩家角色动作控制

游戏中的非玩家角色行为主要是分为待机(idle)、巡逻(patrol)、攻击(attack)、逃跑(escape)等几个行为状态,各个不同行为下执行不同的动画表现,通过程序控制角色的动作。

图1 使用遮挡剔除技术前后场景对比图

根据游戏引擎的特性,角色的动作是绑定在角色模型上的,游戏角色上不同片段的动画剪辑存储着所有可使用于角色动画或简单动画的动画数据。在角色模型导出设置中设置动画选项后,再导入到Unity3D引擎中,通过程序控制在一定条件下播放动画剪辑来达到游戏角色的动作表现效果。

在Idle状态下,AI角色会循环播放待机动画,站在原地不动,重复性的做站立动作;在Patrol状态下,AI角色会根据一定的路径播放行走动画,同时通过程序控制角色的位移和旋转,这样就达到了巡逻的行为;在Attack状态下,AI角色会同时播放攻击动画,行走或者跑步动画,同时实现不同特效;在Escape状态下,AI角色会播放跑步动画,向背对玩家的方向快速移动。

2.1.2 状态机反应机制

首先分析游戏AI角色所要达到的“智能”:在一定范围内巡逻,扫视周围,观察是否有玩家入侵,在某些时候能够站在原地,没有外界条件触发时空闲待机,当玩家进入它们的可视区域后能够进行主动攻击,对玩家进行围攻,造成玩家伤害,当自身的生命低到一定程度后,就会主动逃跑,向玩家反方向逃离。通过AI角色的各种表现,就可以得到AI角色的几种状态和它们之间的转换(如图2):

Idle状态:默认的空闲状态,没有其它事件触发时的基本状态。当没有条件触发,经过一定时间后,AI角色就会从其它状态转换到Idle状态。

图2 各种状态转换

Attack状态:攻击状态,主要是对发现的玩家进行攻击,造成玩家伤害,可以从Patrol状态下转换(如图2)。当AI角色的生命低到一定值时,转换为Escape状态,当玩家不在可视范围内,转换为Patrol状态。Escape状态:逃跑状态,主要是生命过低时的自我保护,逃离玩家攻击,可以从Attack状态下转换。

2.1.3 AI系统的嵌套

游戏AI系统需要与其它模块的系统进行结合,通过模块之间的耦合,来实现各个模块之间的通信和消息的传递。游戏AI系统在整个游戏中是与很多模块相关的,比如GUI系统、音效系统、特效系统等,在将AI系统嵌套到游戏中,就要处理好各个系统中之间的关系(如图3)。

图3 AI系统的嵌套

2.2 基于Unity3D的游戏AI系统的寻路算法

游戏角色的寻路都是借助一种或多种特定的寻路算法,即按照某种规则计算起始点至目的地的路径。以本文介绍的游戏为例,游戏是基于Unity3D游戏引擎设计的,在Unity3D游戏常用的自动寻路技术中,WayPoint寻路是比较适用和普遍的寻路技术。在Unity3D游戏引擎中需要借助引擎中的组件进行构建,通过对WayPoint寻路算法进行相应的编码实现,针对游戏中AI系统所要实现的需求进行一定的改进。下面主要从WayPoint寻路的算法上进行一定的分析,并在游戏中做出具体的应用。

WayPoint寻路主要是以在游戏场景中标记若干个waypoint(路径点),通过用虚拟的矢量线将各个waypoint连接起来,在各个点之间建立起一种联系,使得游戏AI角色能够在一定规律下沿着这些路径线进行自动寻路(如图4)。这些waypoint可以通过手工设置,也可以通过程序自动生成。在WayPoint寻路中,每次需要得到场景中任意两点间的路径,从起始点和目标点各取一个临近可见的路径点,通过计算这两个点之间的最短路径,得出在起始点到目标点这段距离的最优路径,即为角色行走的路径。在到达最近目标点之后,需要遍历可以看到的路径上的下一个有效路径点,从可见的路径点中再进行计算最短路径,这样就可以沿着最优路径形成自然地运动轨迹,实现一定范围内的寻路。

图4 WayPoint寻路算法

3 游戏实现

3.1 代码优化

Unity3D游戏引擎能够快速开发,并具有高的扩展性,其脚本不仅支持JavaScript,还能够支持C#,还支持C编写的DLL插件,可以提高代码的重复使用率。本文采用C#语言开发游戏,由于U-nity3D的脚本默认继承自MonoBehavior,而MonoBehavior来源于Mono框架(属于.Net的跨平台框架)。Unity3D脚本从唤醒到销毁有着一套比较完善的生命周期,在该框架下应灵活应用以下几个重要的方法。

Invoke()方法用于调用方法的执行:Awake()方法用于脚本唤醒,该方法为系统执行的第一个方法,用于脚本的初始化操作,且在脚本的整个生命周期中只执行一次。Update()方法每帧都会由系统调用一次;LateUpdate()方法用于推迟更新,并在Update()方法之后调用,同样每帧调用一次;Start-Coroutine()方法用于启动新的协同程序(类似开启一个线程);在程序开发中,要合理安排这些方法正确的执行顺序,能够让游戏资源得到更加合理的应用。值得注意的是,由于Update()方法是按照不同的帧率执行,切不可把过多的逻辑放在Update()方法中,否则会消耗大量内存。可使用StartCoroutine ()方法在主程序运行的同时开启另一段逻辑来协同当前程序的执行,可以明显地改进游戏的运行效率。并使用yield()方法推迟协同程序的进行,能够让原本执行的程序停顿一段时间后继续向下执行,而不需要通过设置标志位来控制程序,增大了程序的灵活性。

3.2 游戏展示

本文实现了一个角色扮演类游戏,玩家可以通过键盘鼠标控制角色在场景中进行自由游戏。游戏的玩法设计简单明了,下面是具体的玩法介绍:

(1)玩家点击菜单进入游戏。在游戏菜单部分,游戏玩家可以进行角色状态的选择控制,游戏的参数设置、选择退出游戏,玩家点击开始按钮开始游戏。

(2)玩家进入游戏后,会自动切换到游戏角色的开始画面。玩家从一个小岛开始游戏。

(3)玩家通过键盘鼠标控制角色在小岛中的冒险,冒险的过程包括吃东西增加生命值,消灭入侵的敌人等。

(4)在玩家到达指定的关卡后,游戏结束。游戏实现的一些效果截图如图5~6。

图5 游戏开始菜单

图6 游戏运行过程

4 结束语

本文主要是对基于Unity3D游戏引擎开发的原创3D角色扮演类游戏中场景、AI系统的设计及优化。通过三维建模软件Maya建模并在Unity3D中做场景优化,并对AI系统的制作过程、关键技术与游戏融合,使游戏中体现出高效的智能角色与游戏玩家的对抗效果,整个游戏是以任务关卡形式为主线的,所以要对游戏中的非玩家角色进行合理的设计,需要通过程序设计个性化的敌人,使游戏能够具有挑战性、真实性和可玩性,对基于Unity3D游戏设计与AI实现具有一定的参考价值。

[1]AI game programming wisdom.[M].Cengage Learning,2002.

[2]BUCKLAND M.Programming game AI by example[M].Jones&Bartlett Learning,2005.

[3]SCHWAB B.AI game engine programming[M].Hingham:Charles River Media,2004.

[4]JACOBS,S.Game programming gems7[M].北京:人民邮电出版社,2010:191-151.

[5]MARK DELOURA.Game programming gems1[M].北京:人民邮电出版社,2010:208-219.

[6]DAVID M.Bourg,Glenn seemann.AI for game developers.[M].O’Reilly Media,2004.

[7]FUNGE J D.Game programming gems1[M].北京:人民邮电出版社,2004:15-18,31.

[8]倪乐波,戚鹏,遇丽娜,等.Unity3d产品虚拟展示技术的研究与应用[J].数字技术与应用,2010(9):54-55.

[9]梁毅,周刚.基于定位点和路径复用的大型多人在线游戏寻路算法[D].成都:四川大学,2010.

[10]杨科选.人工智能寻路算法及其在游戏中的应用研究[D].长沙:中南大学,2009.

[11]ARMAND PRIEDITIS,MUKESH DALAL.Applying model-based decision-making methods to games[M].Game programming gems 6,2007.

[12]FUNGE J D.Artificial intelligence for computer games[M].北京:北京邮电大学出版社,2007.

The Design and Implementation of the 3D Game Scenes and AI Systems Based on Unity3D

LU Jin-hao,ZHANG Shuai,WU Chuan-min
(Insititute of Information Engineering,Sanming University,Sanming,China,365004)

In this paper,the main research goals are the game scene design and optimization and AI system,elaborating the specification of the game scene building and optimization techniques,anglicizing the main idea and algorithms of the design.Created more realistic role behavior in the game through the efficient and sophisticated AI system in order to improve the interactive experience between game player and game roles.It has improved that the technology has a certain practical value.

Unity3D;game design;AI;path-finding algorithm

TP311.52

A

1673-4343(2013)06-0031-05

2013-01-20

福建省大学生创新创业训练计划项目(201311311044,201311311050);国家级大学生创新创业训练计划项目(201211311006,201211311019);福建省教育厅科技项目(JA13295)

卢金浩,男,浙江海宁人,大学生。通讯作者:张帅,女,山西交城人,讲师。研究方向:虚拟现实与游戏开发。

猜你喜欢

动画建模状态
做个动画给你看
联想等效,拓展建模——以“带电小球在等效场中做圆周运动”为例
动画发展史
我的动画梦
状态联想
基于PSS/E的风电场建模与动态分析
不对称半桥变换器的建模与仿真
生命的另一种状态
我是动画迷
坚持是成功前的状态