游戏行业的发展趋势:跟随着游戏行业的飞速发展,游戏玩家对游戏品质的要求也越来越高,要想游戏在市场上有竞争力,就必须得提高游戏画面的精美程度!娱乐性和挑战性,还有提高游戏的速度[4]。玩家通过与 AI 的交互而从中获得游戏信息的反馈,玩家与 AI 构成一个游戏的群体[5],而对于FPS游戏来说游戏角色的寻路是AI的重要组成部分,即按照某种规则计算起始点至目的地的路径[6]。目前在路径优化领域,最流行的启发式搜索算法当属由Nilsson,and B。 Raphael等人首先提出的 A* 算法[7],对比其他的人工智能算法 [8,9]它有许多的优点,例如更短的时间,更高效率,可以更简单的实施[10]。因此, A* 算法已经被广泛用于多种不同的领域,并且据研究表明,A*算法的应用在3D游戏上比2D层面上更加出色和便捷[11]。虽然A*算法可以得到最短路径, 但是必须先获得地图的全部数据信息,空间消耗大, 且在最坏情况下, A*算法仍然会探索大量的节点空间[12]。论文网
1。2 Unity3D简介
Unity3D是由Unity Technologies开发的一个游戏引擎,操作界面如下图1。1所示。它集快速性交互性于一体,带有强大的渲染引擎的多平台的综合型游戏开发工具,是一个全面整合的专业的跨平台游戏引擎[13],它对Direct9、OpenGL拥有极度优化过的图形shader管道,能够允许开发者能够高效直观的开发出2D或者3D游戏,是一个全面整合的游戏引擎。另外,它支持所有主要的文件格式,并能和其他应用程序协同工作。它还用了PhysX的物理引擎,使得开发者能够轻松的实现各种物理效果。Unity游戏引擎提供了一个柔和的阴影和烘烤光影的高度渲染系统,它的着色器整合了易用性、灵活性和高性能的特点。
目前,Unity3D游戏引擎最新版本是Unity5。5,它能在打包后将你的游戏发布到苹果、Windows、Android,黑莓等十个以上现如今流行的平台。
1。3 脚本系统
Unity引擎为开发者提供了多语言的开发平台,这为跨平台开发奠定基础[14],是游戏引擎与游戏素材资源之间的纽带。现阶段Unity3d支持三种脚本语言Javascript ,C#, Boo ,该如何选择也是众说纷纭,但在大部分开发者中有超过70%的unity游戏是用c#开发的,而且c#比较js更加适合打架大型的项目,javascript只占五分之一,而其余的语言寥寥无几。
C#完整支持面向对象,而且语法与Java以及ActionScript 3很类似,C#语言是由C/C++演变而来的,是微软公司针对。NET平台推出的一门新语言[15],并广泛使用于。NET framework以及Silverlight开发中。不过我们首先需要明白的是,学习用于Unity3D的C#并不等同于学习。NET平台,事实上并不需要了解所有关于。NET的事情就可以使用C#为Unity3D编写脚本程序。所以我也使用C#来开发Unity3D脚本组件。
1。4 A*算法简介
在各种区分敌我双方的单机游戏中都面临着这样一个问题—怎样让敌人看起来更智能?在FPS游戏中,敌人能够自动找到玩家,并在一定范围内能够主动攻击,被击倒后能够在数秒内在生成点复活。这就需要用到A*算法。
A*算法中估价公式是:
f(n) = g(n) + h(n) (公式1。1)
公式1。1中f(n) 是从初始状态经由状态n到目标状态的代价估计,g(n)表示从初始结点到任意结点n的代价,h(n)表示从结点n到目标点的启发式评估代价,启发式函数h(n)告诉A*从任意结点n到目标结点的最小代价评估值。选择一个好的启发式函数是重要的。
A*算法的步骤其实很简单,它与Dijkstra算法(目前公认的求解最短路径的最经典算法)类似,A*算法也有两个表,一个CLOSE表,一个OPEN表,CLOSE表用于储存访问过的节点,而OPEN表用于存储未访问的节点,每个节点都有自己的G,H,F值,在每次遍历的过程中都会更新这些值,并将最短路径的点加入一个链表,也就是说当算法结束我们就能得到一个由起点指向终点的链表。