章國雁
(安徽工商職業(yè)學院 信息工程學院,安徽 合肥 231131)
隨著網(wǎng)絡(luò)的發(fā)展、計算機硬件性能的提升以及智能化系統(tǒng)的不斷完善,游戲產(chǎn)業(yè)的發(fā)展也日臻成熟,目前無論是網(wǎng)游還是手游都處在了發(fā)展的黃金時期,而射擊類游戲在游戲市場有著濃墨重彩的一筆。射擊類游戲具有競技性強的特點,但也兼顧了公平性,以知名游戲《絕地求生》為例,所有玩家在一張地圖上競技,需要玩家自己收集槍械和補給品,玩家可以單人或者組隊進行戰(zhàn)斗,保持了公平性的同時也加強了游戲的趣味性。游戲行業(yè)的發(fā)展帶動了游戲開發(fā)技術(shù)的進步,為了提高開發(fā)效率,業(yè)內(nèi)普遍采用各類型游戲引擎進行開發(fā),其中主要以Unity3D引擎和Unreal虛幻引擎為主。Unity3D 引擎具有較好的跨平臺特性,開發(fā)完成后可以輕松部署到十幾種平臺上,對硬件性能要求低,因而在國內(nèi)擁有大量的開發(fā)者;Unreal虛幻引擎具有較好的畫面效果,但對硬件要求較高,普遍用于次世代游戲開發(fā),但隨著近些年硬件性能的提高,Unreal 引擎應(yīng)用越來越廣。
眾多學者對使用游戲引擎進行游戲開發(fā)進行了大量的研究,2018 年張策在文中講解了使用Unity3D 引擎開發(fā)的一款以戰(zhàn)車為主體的射擊類游戲開發(fā)研究與實現(xiàn);2019 年蔡國宇等人在文中講解基于Unity3D 引擎人工智能系統(tǒng)制作的一款第三人稱射擊類游戲;謝宏蘭在文中講解了使用Unity3D 引擎NetWork 組件開發(fā)的射擊類游戲,實現(xiàn)了局域網(wǎng)的多人對戰(zhàn)游戲,增強了游戲的視聽效果和樂趣性;2020 年黃岡對基于Unreal 虛幻引擎的FPS 第一人稱射擊游戲開發(fā)與設(shè)計進行了研究;陳麗梅等人在文中講解了基于Unreal 虛幻引擎結(jié)合KBE 服務(wù)端引擎,使用C++語言與藍圖腳本做客戶端開發(fā),實現(xiàn)具有聯(lián)網(wǎng)功能的第三人稱射擊動作類游戲。以上研究對于使用游戲引擎進行游戲開發(fā)提供了很好的幫助。
本文以Unity3D 引擎官方案例“惡魔射手”為參照講解其制作過程,案例資源使用Unity官方提供的免費資源,游戲人物主角和怪物模型為卡通風格,游戲場景設(shè)置在一間夢幻風格的場所中,擺設(shè)有一間屋子、放大的抽屜、椅子、鬧鐘、玩具汽車以及一些兒童玩具等物件,游戲主角為一個小男孩拿著一把槍,可以做出射擊、奔跑、受到傷害、死亡等動畫,游戲設(shè)置了3 個不同類型的怪物,每個怪物含有生命值、攻擊力等屬性,可以做出發(fā)動攻擊、受到傷害、死亡等動畫效果。
本案例采用Unity3D 游戲引擎和Visual Stu?dio 為開發(fā)平臺,使用C#為開發(fā)語言,游戲主要功能包含以下方面:游戲資源的導(dǎo)入和場景搭建、游戲主角的設(shè)置、主角移動功能、生命值、受到傷害及死亡功能、主角射擊功能、攝像機的跟隨、動畫狀態(tài)機設(shè)置和播放、游戲怪物的設(shè)置、怪物AI、怪物生命值、受到傷害及死亡功能、背景音樂和音效、游戲界面UI制作等功能。
導(dǎo)入下載的官方免費資源包SurvivalShooter,包含了游戲物體模型文件夾Models、音效文件夾Audio、圖片資源文件夾Textures、預(yù)制體文件夾Prefabs 等。在預(yù)制體文件夾Prefabs 中的拖動En?vironment 環(huán)境預(yù)制體到Scene 窗口中,進行游戲場景的搭建。
拖動Models 模型文件夾中的Player 模型到Hierarchy 窗口中,給模型添加Rigidbody 剛體組件和CapsuleCollider 膠囊體組件,剛體組件鎖定Freeze Position Y 軸和Freeze Rotation X、Z 軸值,防止主角在Y 軸上產(chǎn)生位移,X 軸和Z 軸產(chǎn)生旋轉(zhuǎn)。
在FixedUpdate()函數(shù)中,根據(jù)玩家在A、D 按鍵和W、S 按鍵的操作,通過輸入管理器Input.Ge?tAxisRaw()函數(shù)獲取水平軸Horizontal 和垂直軸Vertical 的值,調(diào)用游戲主角剛體組件的MovePo?sition()函數(shù)實現(xiàn)移動功能,其核心代碼如下所示:
當玩家按下鼠標左鍵時,游戲主角發(fā)動攻擊,實現(xiàn)思路為:在槍頭的位置向前發(fā)射一條射線,判斷射線與物體是否進行碰撞,如果碰撞的物體為怪物,則怪物受到攻擊,減少怪物的生命值,如果碰撞的是其他沒有生命值的物體,則不做處理,其核心代碼如下所示:
當游戲主角進行移動時,為了方便玩家進行游戲控制,攝像機需要保持跟隨狀態(tài)。攝像機實時跟隨主角移動,鏡頭畫面容易產(chǎn)生過度的晃動,造成玩家視覺上眩暈的問題,為了避免這一情況,我們通過使用插值函數(shù)來保障攝像機的平穩(wěn)位移,其核心代碼如下:
當游戲物體進行移動、攻擊、受到傷害、死亡等動作時,需要同時播放相應(yīng)的動畫效果,我們使用Unity3D引擎中的Mecanim 動畫系統(tǒng)進行制作,以游戲主角Player 為例,我們進行動畫狀態(tài)機的設(shè)置,其詳細步驟如下:(1)在Project 窗口中創(chuàng)建動畫狀態(tài)機控制器PlayerAnimatorController;(2)在Animator 窗口中,創(chuàng)建游戲主角Player 物體的空閑狀態(tài)機Idle、移動狀態(tài)機Move 和死亡狀態(tài)機Death;(3)創(chuàng)建狀態(tài)機的轉(zhuǎn)移條件參數(shù)Iswalking(是否移動)和Die(是否死亡),類型均為布爾值Bool;(4)連接狀態(tài)機之間的條件轉(zhuǎn)移,其轉(zhuǎn)移條件為:當Iswalking 為真True 時,Idle->Move 轉(zhuǎn)移;當Iswalking 為假False 時,Move->Idle 轉(zhuǎn)移;當Die為真時,Any State->Death 轉(zhuǎn)移。狀態(tài)機創(chuàng)建完成后,如圖1所示。
圖1 創(chuàng)建動畫狀態(tài)機
怪物物體需要添加剛體、膠囊體碰撞器、球形觸發(fā)器、NavMeshAgent 導(dǎo)航網(wǎng)格、聲音來源等組件,剛體組件用于實現(xiàn)怪物的移動功能,膠囊體碰撞器避免物體之間相互穿插,觸發(fā)器檢測玩家是否進入攻擊范圍,NavMeshAgent 導(dǎo)航網(wǎng)格用于怪物自動尋路,讓它具有一定的AI 功能,聲音來源組件用于播放怪物相關(guān)的音效。
游戲的功能開發(fā)完成后,還需要對游戲進行發(fā)布和測試,根據(jù)測試結(jié)果進行進一步的優(yōu)化。我們對所制作的游戲進行發(fā)布到PC平臺上,運行后游戲畫面效果如圖2所示。
圖2 游戲畫面
本案例講解了Unity 官方第三人稱射擊類案例的制作過程,包含了主角攻擊和怪物攻擊、怪物AI 等核心功能,但目前為單機版本,游戲的趣味性有限,后期可以此為基礎(chǔ)進一步擴展功能,添加游戲服務(wù)端,制作多人在線聯(lián)網(wǎng)版本。本文針對第三人稱射擊類案例的制作解析,對于游戲開發(fā)研究具有較好地實用性。