周正 司占軍 秦雷



摘要:如今的國內游戲市場多以移動游戲為主,單機、主機游戲比重占比較少,在畫面表現和游戲創意玩法上與國外游戲存在較大差距,開放世界游戲是現在主流的游戲模式,這種模式可以給玩家帶來足夠的自由度,玩家的不同選擇會導致游戲任務結局的不同。該文基于Unity引擎設計并制作一個開放世界類型游戲,使用了Unity的HDRP管線,然后通過3dsMax、Blender來制作模型動畫,通過Unfold3D來對模型進行展UV操作,使用Photoshop來對游戲中的圖像元素進行制作。最后使用C#語言腳本實現游戲邏輯,最后在Unity引擎制作游戲并將其發布。
關鍵詞:開放世界類型游戲;HDRP;Unity3D
中圖分類號:TP37 文獻標識碼:A
開放科學(資源服務)標識碼(OSID):
文章編號:1009-3044( 2020122-0001-02
在開放世界型游戲中,玩家可以自由地在場景中進行漫游,可以有選擇性地完成任務,這種游戲也被稱為“漫游式”游戲。由于自由度高且可玩性較強,如今開放世界游戲設計模式已經廣泛被運用到各大廠商游戲作品中。然而國內游戲中使用開放世界游戲模式設計的游戲少之又少,刨除大部分移動手機游戲,剩余的RPG游戲中,游戲模式多以線性劇情為主,游戲可玩性較差。
本文采用Unity引擎進行制作,主要研究內容為在Unity如何開發開放世界類游戲和游戲優化上,包括計算機編程、鏡頭運用、動畫設計制作、平面設計以及游戲關卡等方面。另外,高清渲染管線(HDRP)的應用,相比于以往的默認管線,在圖像的繪制和表現上具有較大的提升。
1 開發環境及軟件
Unity開發環境為Windowsl0專業版,英特爾Core(TM)i7-6900k CPU3.20GHz,32G內存,64位操作系統。另外游戲制作還用到了Autodesk 3ds Max 2016,Adobe Photoshop CC 2018,Blender, Visual Studi0 2019 Community,Unfold3D等軟件。
2 游戲設計思路
本次開放世界類型游戲的整體思路由以下幾個部分組成,使用3ds Max以及Blender進行建模,使用Photoshop進行平面素材的設計與制作,使用Unity引擎中的UGUI工具完成交互部分,在Unity中完成游戲場景搭建,以及C#語言實現游戲邏輯功能。本次設計的整體思路流程圖如圖1所示。
3 開放世界類型游戲的設計與制作
3.1 模型制作和貼圖繪制
使用3ds Max制作的模型主要為人物模型,由于整體的畫風屬于Lowploy風格,所以在人物建模上可以有效地縮短制作時間,制作完成后將三維模型導出為.obj格式的文件并導人Unfold3d軟件進行UV展開。使用Blender2.8制作Lowploy風格的房屋樹木等場景,因為Blender在2.8版本的雕刻模式可以更快地實現Lowploy風格的制作。
接下來將展開UV的模型文件導入SubstancePainer中去,將貼圖的大小設置為2048*2048大小,創建成功后如圖2所示。SubstancePainter可以將不同的圖層疊加,生成最后的貼圖,各圖層之間可以添加蒙版,可以對相應區域進行遮罩處理。在SubstancePainter中可以使用智能材質,智能材質可以直接拖拽到模型上,添加到模型上時會自動展開成不同的層級。
3.2 游戲UI設計
本次制作的游戲整體風格為Lowploy風格,游戲名稱命名為《紙屆》,所以整體的風格設計偏紙上涂鴉。因此需要對大量的圖像進行手繪,從而使得整體效果與游戲風格相匹配。游戲中含有的UI系統包括主頁、設置界面、背包系統、角色面板等,制作過程在Photoshop中完成。
3.3 場景搭建
將模型導入Unity中后,需要創建材質球。在Assets中創建相應的文件結構,把模型資源放在Arties文件夾中,并在其中創建Models文件夾并創建Material,由于工程采用HDRP,所以材質使用名稱為“HDRP/Lit”的著色器。創建完對應材質球后,需要對其屬性進行修改。首先對SurfaceType進行設置,如果需要呈現透明效果的話,將該屬性設置為Transparent。在SurfaceInputs屬性分類中,Base Map屬性可以改變材質球的顏色,可以將材質球設置為純色,也可以將其設置為一張紋理貼圖,Metal-Iic和Smoothness屬性可以對材質球的金屬度和光滑度進行設置。制作完材質球后,把材質球賦予模型,將每個模型組建變為預制體,將預制體拖入場景,并擺放到合適的位置,制作完成后如圖4所示。
3.4 游戲邏輯腳本編寫
代碼首先要實現的功能是對游戲角色的控制,包括使用鍵盤完成行走、加速跑、跳躍功能,以及使用鼠標實現角色的旋轉等。以跳躍功能為例,需要檢測玩家是否位于地面,首先要以游戲角色下方為原點,向下發射一條有長度的射線,如果該射線檢測到碰撞物體為地面的話,證明角色現在位于空中,該代碼的實現方式如下:
RaycastHit hitlnfo;
#if UNITY_EDITOR
Debug. DrawLine(transf'orm. position+ (Vector3. up*O.lf),transform. position+(Vector3. up*0.1f)+(Vector3. down*In—GroundCheckDistance》;
#endif
if (Physics. Raycast(transform. position+(Vector3. up*O.lf), Vector3.down, out hitlnfo,m_GroundCheckDistance》
{
m_GroundNormal= hitlnfo.normal;
m_lsGrounded= true;
m_Animator.applyRootMotion= true:
)
elsef
m_IsGrounded= false:
m_GroundNormal= Vector3.up;
m_Animator.applyRootMotion= false;
)
游戲中NPC的行為通過BehaviorTree插件來實現。該插件主要功能為輔助創建電腦角色的行為樹,優點在于可以使游戲中NPC的行為可視化。首先打開Behavior Designer面板,選擇需要添加行為的電腦角色,點擊創建行為樹,首先創建一個Se-quence節點,該節點為順序節點,當其下的子節點執行返回為真時,該節點為真,結束行為樹,然而當節點為假時,繼續執行下一節點,所有節點均為假時,此節點的返回值為假。
之后再新建兩個Sequence節點,實現NPC在兩點之間的移動,分別在兩個節點之下再添加Seek節點和Wait節點,Seek節點將實現該NPC移向目標點的行為,而Wait節點則實現了NPC停留的功能,制作完畢的行為樹如圖5所示。然而此時進行播放,并不會達到預期效果,行為樹的Seek節點完成之后,并不會繼續執行下一個行為,而是直接返回,此時需要將Sequence節點的Abort Type設置為Self,此時當其中一個子節點完成后,將繼續按順序執行下個一子節點,而不會像之前一樣直接返回,此時已經完成了NPC的行為樹[1]。
3.5 測試與發布
在制作完畢之后,需要對游戲進行多次測試,包括場景地圖的搭建,UI貼圖,游戲角色控制的流暢度以及相關的代碼邏輯等,找到游戲中存在的Bug,然后對其進行修復,之后在Unity中將其發布到PC平臺,在File菜單欄下找到Buiding Setting,再設置相關參數之后點擊Build即可。
4 結束語
根據國外游戲設計發展趨勢,開放世界游戲將逐漸成為一種主流關卡設計模式,它可以減少過多的可視化場景加載,減弱地圖邊界的存在,提升了玩家玩游戲時的沉浸感。另外,游戲采用Unity最新的高清管線(HDRP)進行制作,在性能優化和畫面表現力上要整體好于默認管線,因此基于Unity技術開發開放世界類游戲非常具有前瞻性。
參考文獻:
[1]何賽,游戲人工智能關鍵技術研究與應用[D].北京:北京郵電大學,2015.
【通聯編輯:謝媛媛】
作者簡介:周正(1996-),男,山東棗莊人,碩士,研究方向為虛擬仿真技術;司占軍(1971-),男,河北人,教授,碩士,研究方向為數字媒體技術;秦雷(1997-),男,學士,研究方向為數字出版。