盧金浩,張帥,伍傳敏
(三明學(xué)院信息工程學(xué)院,福建三明,365004)
基于Unity3D三維游戲場景與AI系統(tǒng)的設(shè)計與實現(xiàn)
盧金浩,張帥,伍傳敏
(三明學(xué)院信息工程學(xué)院,福建三明,365004)
以游戲場景設(shè)計與優(yōu)化、AI(人工智能)系統(tǒng)為主要研究目標(biāo),闡述游戲場景搭建規(guī)范及優(yōu)化技巧,分析AI設(shè)計過程中的主要思路和主要算法實現(xiàn)。通過高效的、復(fù)雜的AI系統(tǒng),創(chuàng)造出游戲中更加真實的角色行為,提高玩家在游戲中與智能角色的互動體驗。實踐證明,該技術(shù)具有一定的實際應(yīng)用價值。
Unity3D;場景設(shè)計;AI;尋路算法
近幾年來,Android平臺游戲、iPhone平臺游戲以及Web的網(wǎng)頁游戲迅猛發(fā)展,已然成為帶動游戲發(fā)展的新生力量。遺憾的是目前除了少數(shù)的作品成功外,大部分的游戲都屬宣傳攻勢往往大于其內(nèi)容品質(zhì),加之玩家體驗游戲時,對游戲的沉浸感和操控性的要求也逐漸提高。在這種局面下,3D游戲成為當(dāng)前游戲的發(fā)展熱點。而本文所采用的Unity3D游戲引擎提供了創(chuàng)造高質(zhì)量的3D游戲和真實視覺效果的核心技術(shù),為開發(fā)3D游戲提供了強(qiáng)大的驅(qū)動力。
本文基于Unity3D游戲引擎,研究三維游戲場景搭建規(guī)范及優(yōu)化技巧以創(chuàng)建豐富的游戲畫面且保證游戲運(yùn)行的流暢度,分析游戲角色中AI設(shè)計過程的主要思路和主要算法實現(xiàn),通過高效復(fù)雜的AI系統(tǒng)開發(fā)一款基于Unity3D的3D角色扮演類游戲,使之具備豐富的角色對抗和任務(wù)模式。實踐證明,本文所討論的關(guān)鍵技術(shù)可應(yīng)用于場景漫游、游戲開發(fā)等多個領(lǐng)域,具有一定的實際應(yīng)用價值。
在游戲開發(fā)過程中,模型與貼圖的完美搭建可以給玩家?guī)斫k麗的場景,提高游戲的意境,突出游戲主題。因此,如何快速完成模型與貼圖的完美搭建,并保證游戲的流暢運(yùn)行成為游戲設(shè)計需要解決的一個重要課題。
1.1 游戲場景搭建制作規(guī)范
游戲場景中如地形和簡單的基本對象(如地形、樹、草木等)可在Unity3D中直接創(chuàng)建,而其他如主要角色或特定的裝飾性物品,則需要從其他的3D建模軟件(如Maya,3DMax等)中導(dǎo)入。在搭建游戲場景時,應(yīng)先創(chuàng)建游戲世界的環(huán)境,再放置角色及物品。默認(rèn)情況下Unity3D的單位等于1 m,尤為值得注意的是修改任何外部應(yīng)用程序來匹配這一比例,這樣在放置所有的資源時會簡單很多。本游戲采用Maya建模,其Maya轉(zhuǎn)Unity3D的比例為0.01∶1。而且面片數(shù)控制在32500個Polygon面片,如果超過這個數(shù)量,則物體不會顯示出來,則需要合理分布多邊形和模型數(shù)量。
當(dāng)一個三維模型制作完成時,其基本內(nèi)容應(yīng)包括場景尺寸、單位、模型歸類、命名、節(jié)點編輯、紋理、坐標(biāo)、紋理尺寸、紋理格式、材質(zhì)球等必須符合制作規(guī)范。一個歸類清晰、面數(shù)節(jié)省、制作規(guī)范的模型文件對于程序控制管理是十分必要的。一般場景模型制作流程基本包括素材采集>模型制作>貼圖制作>場景歸類、命名、展UV坐標(biāo)>燈光渲染測試>場景烘焙>場景調(diào)整導(dǎo)出。在建模時需要注意以下幾點:
(1)建模時應(yīng)在模型分工之前,必須對模型定位標(biāo)準(zhǔn)。一般這個標(biāo)準(zhǔn)會是一個CAD底圖,制作人員必須按照這個帶有CAD底圖的文件確定自己的分工區(qū)域的模型位置,并且不得做任何修改。導(dǎo)入到三維建模軟件中的CAD底圖最好在(0,0,0)位置,以便制作人員的初始模型在零點附近。
(2)建模完成后要及時刪除場景中多余的面,在建立模型時,看不見的地方不用建模,對于看不見的面也可以刪除,主要是為了提高貼圖的利用率,降低整個場景的面數(shù),以提高交互場景的運(yùn)行速度。如Box底面、貼著墻壁物體的背面等。
(3)默認(rèn)情況下,Unity3D不支持雙面材質(zhì),除非使用植物材質(zhì)球Nature類型。因此保持模型面與面之間的距離推薦最小間距為當(dāng)前場景最大尺度的二千分之一。例如:在制作室內(nèi)場景時,物體的面與面之間距離不要小于2 mm;在制作場景長(或?qū)挘? km的室外場景時,物體的面與面之間距離不要小于20 cm。如果物體的面與面之間貼得太近,會出現(xiàn)兩個面交替出現(xiàn)的閃爍現(xiàn)象。但如果要制作如窗戶、護(hù)欄等物體,如果想在兩面都看到模型,則需要制作出一定厚度,或者復(fù)制兩個面并將其中一個面翻轉(zhuǎn)法線貼圖即可。
1.2 游戲貼圖的優(yōu)化
在Unity3D作為游戲的開發(fā)平臺,對模型的材質(zhì)有一些特殊的要求,Unity3D并不支持所有Maya中的材質(zhì)球,只有一些標(biāo)準(zhǔn)材質(zhì)(如Blin,Lambet等材質(zhì))會被Unity3D所支持。并且貼圖的尺寸必須是2的N次冪,且最大貼圖尺寸不能超過1024*1024,在烘焙時將紋理貼圖設(shè)置為TGA格式。
渲染優(yōu)化時要選擇使用遮擋剔除技術(shù)(Occlusion Culling):即當(dāng)一個物體被其他物體遮擋而不在攝像機(jī)的可視范圍內(nèi)則不對其進(jìn)行渲染。遮擋剔除的運(yùn)行將通過在場景中使用一個虛擬的攝像機(jī)來創(chuàng)建一個物體潛在可視性狀態(tài)(set)的層級。這些數(shù)據(jù)可以讓每個運(yùn)行時間內(nèi)的攝像機(jī)來確定什么能看見什么看不見。通過這些數(shù)據(jù),Unity將確定只把可以看見的物體送去渲染,這將降低描繪指令(draw calls)的數(shù)量并提供游戲的運(yùn)行效率。如圖1:左邊的場景使用了遮擋剔除,右邊的場景則使用了遮擋剔除。最終渲染結(jié)果是一樣的,但使用了遮擋剔除后明顯會提高游戲的運(yùn)行質(zhì)量。
2.1 游戲AI系統(tǒng)的框架構(gòu)建
秀容月明比誰都清楚,北城外面,必然埋伏著胡人的兩支精銳騎兵,只要城門開了,桂州城就破了。在長于野戰(zhàn)的胡人鐵騎夾擊下,開門出戰(zhàn)的寧軍也好,意圖逃跑的百姓也好,決無幸免之理。要是巢城沒失守,便可牽制胡人,時機(jī)到了,還可出擊,和桂州相呼應(yīng)。如今說什么都沒用了,張家猛已把巢城弄丟了。要是他手上有一萬秀容兵,局面便大不相同,說不定還能大破胡人,可惜,他只有兩千秀容兵,連著十五天鏖戰(zhàn),秀容兵只剩兩三百人了。
2.1.1 非玩家角色動作控制
游戲中的非玩家角色行為主要是分為待機(jī)(idle)、巡邏(patrol)、攻擊(attack)、逃跑(escape)等幾個行為狀態(tài),各個不同行為下執(zhí)行不同的動畫表現(xiàn),通過程序控制角色的動作。
圖1 使用遮擋剔除技術(shù)前后場景對比圖
根據(jù)游戲引擎的特性,角色的動作是綁定在角色模型上的,游戲角色上不同片段的動畫剪輯存儲著所有可使用于角色動畫或簡單動畫的動畫數(shù)據(jù)。在角色模型導(dǎo)出設(shè)置中設(shè)置動畫選項后,再導(dǎo)入到Unity3D引擎中,通過程序控制在一定條件下播放動畫剪輯來達(dá)到游戲角色的動作表現(xiàn)效果。
在Idle狀態(tài)下,AI角色會循環(huán)播放待機(jī)動畫,站在原地不動,重復(fù)性的做站立動作;在Patrol狀態(tài)下,AI角色會根據(jù)一定的路徑播放行走動畫,同時通過程序控制角色的位移和旋轉(zhuǎn),這樣就達(dá)到了巡邏的行為;在Attack狀態(tài)下,AI角色會同時播放攻擊動畫,行走或者跑步動畫,同時實現(xiàn)不同特效;在Escape狀態(tài)下,AI角色會播放跑步動畫,向背對玩家的方向快速移動。
2.1.2 狀態(tài)機(jī)反應(yīng)機(jī)制
首先分析游戲AI角色所要達(dá)到的“智能”:在一定范圍內(nèi)巡邏,掃視周圍,觀察是否有玩家入侵,在某些時候能夠站在原地,沒有外界條件觸發(fā)時空閑待機(jī),當(dāng)玩家進(jìn)入它們的可視區(qū)域后能夠進(jìn)行主動攻擊,對玩家進(jìn)行圍攻,造成玩家傷害,當(dāng)自身的生命低到一定程度后,就會主動逃跑,向玩家反方向逃離。通過AI角色的各種表現(xiàn),就可以得到AI角色的幾種狀態(tài)和它們之間的轉(zhuǎn)換(如圖2):
Idle狀態(tài):默認(rèn)的空閑狀態(tài),沒有其它事件觸發(fā)時的基本狀態(tài)。當(dāng)沒有條件觸發(fā),經(jīng)過一定時間后,AI角色就會從其它狀態(tài)轉(zhuǎn)換到Idle狀態(tài)。
圖2 各種狀態(tài)轉(zhuǎn)換
Attack狀態(tài):攻擊狀態(tài),主要是對發(fā)現(xiàn)的玩家進(jìn)行攻擊,造成玩家傷害,可以從Patrol狀態(tài)下轉(zhuǎn)換(如圖2)。當(dāng)AI角色的生命低到一定值時,轉(zhuǎn)換為Escape狀態(tài),當(dāng)玩家不在可視范圍內(nèi),轉(zhuǎn)換為Patrol狀態(tài)。Escape狀態(tài):逃跑狀態(tài),主要是生命過低時的自我保護(hù),逃離玩家攻擊,可以從Attack狀態(tài)下轉(zhuǎn)換。
2.1.3 AI系統(tǒng)的嵌套
游戲AI系統(tǒng)需要與其它模塊的系統(tǒng)進(jìn)行結(jié)合,通過模塊之間的耦合,來實現(xiàn)各個模塊之間的通信和消息的傳遞。游戲AI系統(tǒng)在整個游戲中是與很多模塊相關(guān)的,比如GUI系統(tǒng)、音效系統(tǒng)、特效系統(tǒng)等,在將AI系統(tǒng)嵌套到游戲中,就要處理好各個系統(tǒng)中之間的關(guān)系(如圖3)。
圖3 AI系統(tǒng)的嵌套
2.2 基于Unity3D的游戲AI系統(tǒng)的尋路算法
游戲角色的尋路都是借助一種或多種特定的尋路算法,即按照某種規(guī)則計算起始點至目的地的路徑。以本文介紹的游戲為例,游戲是基于Unity3D游戲引擎設(shè)計的,在Unity3D游戲常用的自動尋路技術(shù)中,WayPoint尋路是比較適用和普遍的尋路技術(shù)。在Unity3D游戲引擎中需要借助引擎中的組件進(jìn)行構(gòu)建,通過對WayPoint尋路算法進(jìn)行相應(yīng)的編碼實現(xiàn),針對游戲中AI系統(tǒng)所要實現(xiàn)的需求進(jìn)行一定的改進(jìn)。下面主要從WayPoint尋路的算法上進(jìn)行一定的分析,并在游戲中做出具體的應(yīng)用。
WayPoint尋路主要是以在游戲場景中標(biāo)記若干個waypoint(路徑點),通過用虛擬的矢量線將各個waypoint連接起來,在各個點之間建立起一種聯(lián)系,使得游戲AI角色能夠在一定規(guī)律下沿著這些路徑線進(jìn)行自動尋路(如圖4)。這些waypoint可以通過手工設(shè)置,也可以通過程序自動生成。在WayPoint尋路中,每次需要得到場景中任意兩點間的路徑,從起始點和目標(biāo)點各取一個臨近可見的路徑點,通過計算這兩個點之間的最短路徑,得出在起始點到目標(biāo)點這段距離的最優(yōu)路徑,即為角色行走的路徑。在到達(dá)最近目標(biāo)點之后,需要遍歷可以看到的路徑上的下一個有效路徑點,從可見的路徑點中再進(jìn)行計算最短路徑,這樣就可以沿著最優(yōu)路徑形成自然地運(yùn)動軌跡,實現(xiàn)一定范圍內(nèi)的尋路。
圖4 WayPoint尋路算法
3.1 代碼優(yōu)化
Unity3D游戲引擎能夠快速開發(fā),并具有高的擴(kuò)展性,其腳本不僅支持JavaScript,還能夠支持C#,還支持C編寫的DLL插件,可以提高代碼的重復(fù)使用率。本文采用C#語言開發(fā)游戲,由于U-nity3D的腳本默認(rèn)繼承自MonoBehavior,而MonoBehavior來源于Mono框架(屬于.Net的跨平臺框架)。Unity3D腳本從喚醒到銷毀有著一套比較完善的生命周期,在該框架下應(yīng)靈活應(yīng)用以下幾個重要的方法。
Invoke()方法用于調(diào)用方法的執(zhí)行:Awake()方法用于腳本喚醒,該方法為系統(tǒng)執(zhí)行的第一個方法,用于腳本的初始化操作,且在腳本的整個生命周期中只執(zhí)行一次。Update()方法每幀都會由系統(tǒng)調(diào)用一次;LateUpdate()方法用于推遲更新,并在Update()方法之后調(diào)用,同樣每幀調(diào)用一次;Start-Coroutine()方法用于啟動新的協(xié)同程序(類似開啟一個線程);在程序開發(fā)中,要合理安排這些方法正確的執(zhí)行順序,能夠讓游戲資源得到更加合理的應(yīng)用。值得注意的是,由于Update()方法是按照不同的幀率執(zhí)行,切不可把過多的邏輯放在Update()方法中,否則會消耗大量內(nèi)存。可使用StartCoroutine ()方法在主程序運(yùn)行的同時開啟另一段邏輯來協(xié)同當(dāng)前程序的執(zhí)行,可以明顯地改進(jìn)游戲的運(yùn)行效率。并使用yield()方法推遲協(xié)同程序的進(jìn)行,能夠讓原本執(zhí)行的程序停頓一段時間后繼續(xù)向下執(zhí)行,而不需要通過設(shè)置標(biāo)志位來控制程序,增大了程序的靈活性。
3.2 游戲展示
本文實現(xiàn)了一個角色扮演類游戲,玩家可以通過鍵盤鼠標(biāo)控制角色在場景中進(jìn)行自由游戲。游戲的玩法設(shè)計簡單明了,下面是具體的玩法介紹:
(1)玩家點擊菜單進(jìn)入游戲。在游戲菜單部分,游戲玩家可以進(jìn)行角色狀態(tài)的選擇控制,游戲的參數(shù)設(shè)置、選擇退出游戲,玩家點擊開始按鈕開始游戲。
(2)玩家進(jìn)入游戲后,會自動切換到游戲角色的開始畫面。玩家從一個小島開始游戲。
(3)玩家通過鍵盤鼠標(biāo)控制角色在小島中的冒險,冒險的過程包括吃東西增加生命值,消滅入侵的敵人等。
(4)在玩家到達(dá)指定的關(guān)卡后,游戲結(jié)束。游戲?qū)崿F(xiàn)的一些效果截圖如圖5~6。
圖5 游戲開始菜單
圖6 游戲運(yùn)行過程
本文主要是對基于Unity3D游戲引擎開發(fā)的原創(chuàng)3D角色扮演類游戲中場景、AI系統(tǒng)的設(shè)計及優(yōu)化。通過三維建模軟件Maya建模并在Unity3D中做場景優(yōu)化,并對AI系統(tǒng)的制作過程、關(guān)鍵技術(shù)與游戲融合,使游戲中體現(xiàn)出高效的智能角色與游戲玩家的對抗效果,整個游戲是以任務(wù)關(guān)卡形式為主線的,所以要對游戲中的非玩家角色進(jìn)行合理的設(shè)計,需要通過程序設(shè)計個性化的敵人,使游戲能夠具有挑戰(zhàn)性、真實性和可玩性,對基于Unity3D游戲設(shè)計與AI實現(xiàn)具有一定的參考價值。
[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產(chǎn)品虛擬展示技術(shù)的研究與應(yīng)用[J].數(shù)字技術(shù)與應(yīng)用,2010(9):54-55.
[9]梁毅,周剛.基于定位點和路徑復(fù)用的大型多人在線游戲?qū)ぢ匪惴╗D].成都:四川大學(xué),2010.
[10]楊科選.人工智能尋路算法及其在游戲中的應(yīng)用研究[D].長沙:中南大學(xué),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].北京:北京郵電大學(xué)出版社,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
福建省大學(xué)生創(chuàng)新創(chuàng)業(yè)訓(xùn)練計劃項目(201311311044,201311311050);國家級大學(xué)生創(chuàng)新創(chuàng)業(yè)訓(xùn)練計劃項目(201211311006,201211311019);福建省教育廳科技項目(JA13295)
盧金浩,男,浙江海寧人,大學(xué)生。通訊作者:張帥,女,山西交城人,講師。研究方向:虛擬現(xiàn)實與游戲開發(fā)。