摘? 要:本文使用Unity中的NetWork組件實現(xiàn)局域網(wǎng)的互聯(lián),搭建游戲場景,在場景中以第一人稱視角控制人物角色,進行游戲?qū)?zhàn)。在游戲設(shè)計過程中,添加了人物視野,使人物能夠自由切換視角。游戲中人物的每個動作有相應(yīng)的動畫,做下一個動作后,會取消之前的動畫,當給人物添加槍支后,能產(chǎn)生子彈、發(fā)射子彈,并設(shè)計了子彈的移動路線,當子彈射出時,有閃光動畫以及子彈射到物體上的彈痕效果,實現(xiàn)了人物的血量和子彈的傷害值計算,在游戲中找到敵人并將他射死,那么游戲就會結(jié)束。這款3D射擊游戲最終實現(xiàn)了局域網(wǎng)多人對戰(zhàn),相對于以往的射擊游戲有著更加良好的視聽效果以及豐富的游戲體驗。
關(guān)鍵詞:射擊游戲;角色控制;Unity3D;游戲設(shè)計
中圖分類號:TP317? ? ? 文獻標識碼:A 文章編號:2096-4706(2019)24-0089-04
Abstract:The paper uses the Unity of network components for LAN interconnection,build game scenes in the scene to control the characters in the first person perspective,the game play against. In the game design process,it adds character vision,so that people can be free to switch perspective. In the game,characters each action there is a corresponding animation,do the next action,cancels the previous animation;when people add to firearms,to produce bullets,firing bullets,bullet design movement routes;when a bullet was fired,there is a flash animation and effects bullet strikes on the object;people realized the damage value calculated blood and bullets;find the enemy in the game and he was shot,then the game will end. The 3D shooter ultimately LAN multiplayer,compared with the previous shooter has more good visual effects and a rich gaming experience.
Keywords:shooting game;character control;Unity3D;game design
0? 引? 言
目前,網(wǎng)絡(luò)以及人們生活品質(zhì)飛速發(fā)展、提升,越來越多的人開始嘗試用各種享受生活的方式,游戲就是其中一種。游戲平臺有家用主機、掌上主機、個人電腦等。現(xiàn)有的游戲固然讓人愛不釋手,但隨著科技的不斷發(fā)展、人們對游戲畫質(zhì)品質(zhì)要求的提高,以及對游戲體驗的高標準,促進了3D游戲時代的來臨。3D游戲采用了立體空間的概念,相對于2D游戲有著更好的游戲體驗。3D游戲更加真實,在操作上也更加人性化,有很強的隨意性,讓玩家盡情發(fā)揮自己的思維,暢游在游戲世界中,享受游戲。
1? 游戲概述
本文設(shè)計的基于Unity3D射擊游戲的具體要求為:
(1)登錄界面設(shè)有IP地址、客戶端以及服務(wù)器端。服務(wù)器端創(chuàng)建游戲,客戶端可以通過查詢IP地址來連接游戲。
(2)搭建游戲場景,添加游戲人物。
(3)完成人物的射擊動畫,碰撞檢測,添加彈痕以及射擊的閃光效果,完成人物視角的移動,以及人物在場景中的移動。
(4)實現(xiàn)局域網(wǎng)信息傳遞,添加人物血量,設(shè)計子彈傷害,完善游戲邏輯。
當服務(wù)器創(chuàng)建游戲后,玩家進入到游戲中,其他玩家在游戲登錄界面選擇連接服務(wù)器,這樣就可以進入到同一個房間中。進入游戲以后,會第一人稱視角來進行移動,能夠看到四周的物體,人物角色手中的槍可以用來射擊,當射擊時會看到子彈的閃光效果以及射擊到物體上的彈痕效果,彈痕效果會在一段時間后自動消失。玩家在游戲場景中控制角色移動,在場景中尋找敵人,當發(fā)現(xiàn)敵人時就可以開槍射擊,會設(shè)置游戲人物的血量以及子彈的傷害,這樣可以準確地判斷射擊到目標時所造成的傷害值,當射擊的傷害足以殺死對手時游戲結(jié)束,射死對手的人獲得勝利,被射死的人物游戲失敗。在游戲結(jié)束時,會出現(xiàn)兩個按鈕:重新開始按鈕和退出游戲按鈕。這種FPS游戲,每局的對戰(zhàn)時間都不會很長,在游戲勝利或者失敗后,點擊重新開始,就會有一局新的對戰(zhàn)等待著玩家。
在游戲界面設(shè)計過程中,用到了Unity3D中所自帶的NGUI組件,類似于C#中的控件功能,可以讓開發(fā)人員輕松地將控件拖到界面中,自由而簡便地設(shè)計界面,再通過函數(shù)調(diào)用,達到實現(xiàn)功能的目的。游戲登錄界面比較簡單,一個IP地址,用來創(chuàng)建服務(wù)器端的地址,下面兩個按鈕則是服務(wù)器端玩家和客戶端玩家的選擇按鈕,用來進入到一局相同的房間內(nèi)進行對戰(zhàn)。下面的圖則是在Unity中對人物模型進行調(diào)整,包括模型的材質(zhì)、碰撞域的大小以及人物以第一人稱視角觀察時的相機位置、相機角度的調(diào)整。在場景中以第一人稱視角觀察到了其他玩家也在場景中出現(xiàn),這時就可以開槍射擊敵人,玩家操控的人物可以在場景中自由移動,隨意切換視角,使玩家可以容易地上手這款游戲。一個游戲的界面設(shè)計,以及整個游戲的風格都會對玩家的游戲體驗有很大的影響,設(shè)計出一款人性化的游戲是每個游戲開發(fā)者的目標。
2? 游戲核心功能實現(xiàn)
游戲包含的類主要為:MyNetwork.cs、Bullet.cs、CS
Flash.cs、CSBulletHole.cs、CSBulletGenerator.cs、Game Controller.cs、MyCube.cs、Player.cs、PlayAnimation.cs,游戲核心類如圖1所示。
MyNetwork類:實現(xiàn)數(shù)據(jù)通信,進行狀態(tài)同步和PRC(遠程過程調(diào)用)。
Bullet類:實現(xiàn)子彈的創(chuàng)建,控制子彈速度以及傷害。
CSFlash類:子彈的閃光效果控制。
CSBulletHole類:子彈的彈痕效果以及彈痕消除的速度及時間。
CSBulletGenerator類:控制子彈的射擊方向,調(diào)用閃光函數(shù),判斷是否正在開火。
GameController類:實現(xiàn)界面設(shè)計布局,控制游戲音樂,游戲人物在場景中的位置。
MyCube類:創(chuàng)建的物體在場景中的速度控制。
Player類:實現(xiàn)人物視角的控制,人物移動,射擊控制,添加人物的血量。
PlayerAnimation類:控制玩家動畫,實現(xiàn)玩家的動態(tài)效果。
2.1? 控制人物動畫
人物在進行動畫時,身體的位置會不斷進行更改,而那些添加在人物關(guān)節(jié)上的物體也會跟著一起更改,這樣就有著比較真實的效果。隨后對人物添加了行走、跳躍、下落以及舉槍射擊的動畫,當人物進行其中一個動作時,就會停止其他動作的動畫,比如人物在行走過程中按到了跳躍功能,那么此時人物就會停止做行走的動畫,轉(zhuǎn)而去播放跳躍動畫,在人物下落時,設(shè)置了人物的靜止動畫,設(shè)置中人物會有0.2秒的緩沖時間,也就是說,當人物下落后,如果不再繼續(xù)對人物進行操作,那么人物會自動播放靜止動畫,原地待命。當在Unity中添加了soldier后,Unity會自動添加Animation組件,其功能就是來控制人物的動畫效果。在soldier文件下找到Animation,其中包含了人物所帶的所有動畫。人物的動畫控制的都是骨骼關(guān)節(jié),包括頭盔、衣服、眼鏡、槍支等都是在人物的骨骼關(guān)節(jié)上,跟隨人物移動。
2.2? 添加槍支
在soldier下找到槍支的模型,然后手動調(diào)節(jié)槍支的位置,讓槍處在正確的節(jié)點上。在調(diào)節(jié)槍支位置時,要同時觀測槍支在人物頭部相機的位置,當以第一人稱視角觀察時,要看到槍支與手臂的距離,以及槍支與頭部的位置效果,通過手動反復(fù)調(diào)節(jié),找到一個比較合理的位置進行坐標固定,這樣在游戲中就會顯得比較自然,舉槍射擊時會相對流暢。
2.3? 設(shè)計子彈
子彈的設(shè)計包括其飛行速度、傷害值、子彈射到物體上的彈痕效果以及開火時的閃光效果。彈痕效果設(shè)置其速度以及持續(xù)時間和消失時間。閃光效果同樣設(shè)置開槍時的閃光時間。設(shè)置子彈向前為默認方向,打開編輯腳本,添加一個變量public float speed來控制子彈的速度。子彈的碰撞檢測:由于子彈的運行速度特別快,所以在這里采用射線檢測的方法,每一幀都發(fā)射射線來檢測,射線的距離就是上一幀到下一幀的距離。由射線來檢測在子彈的飛行過程中是否碰撞到物體,若檢測到,則說明子彈打到了物體上。
2.4? 實現(xiàn)射擊
在gun下面創(chuàng)建一個bulletspwan,用來創(chuàng)建子彈。將這個物體放在槍口的位置,朝向與槍口朝向一致。用腳本語言來實現(xiàn)bulletspwan的控制,設(shè)置一個屬性用來標識一秒可以射擊多少發(fā)子彈。創(chuàng)建一個計時器來為子彈的發(fā)射計時:private float timer = 0;并且調(diào)用子彈的閃光效果:public CSFlash flash;定義一個變量用來表示什么時候開始發(fā)射子彈:private bool isFiring = false;當單擊鼠標左鍵時開始發(fā)射,不再點擊時發(fā)射停止。當人物正在射擊時,計時器開始工作??瓷鋼羰欠襁_到每秒射擊的時間,當達到一秒的射擊時間,計時器進行歸零。然后重新計時,這樣又開始進行射擊。射擊時調(diào)用flash,發(fā)射子彈之前生成一發(fā)子彈,編寫一個類設(shè)置子彈的預(yù)制。當子彈超出控制范圍或者碰撞到了物體后,進行子彈銷毀,但是子彈不是立即銷毀,而是設(shè)置為3秒之后銷毀。
2.5? 完成子彈的傷害計算
傷害計算是游戲的一個重要邏輯,每發(fā)子彈設(shè)置同樣的傷害數(shù)值,設(shè)置人物初始的固定血量。當玩家控制人物在游戲場景中尋找到對手時就可以開槍對敵人造成傷害,當傷害值足以擊殺敵人時,就可以完成對戰(zhàn)。在Scripts中的Bullets.cs類中,設(shè)置每發(fā)子彈的傷害值:public float damage = 10;當子彈打到敵人身上時開始計算傷害,并且當敵人血量低于0時,完成傷害計算。
2.6? 添加人物血量
游戲中設(shè)置了子彈的傷害,同時也要添加人物的血量,每一發(fā)射到人物身上的子彈都會相應(yīng)地減少人物的血量值。人物血量是游戲的重要部分,定義一個Player.cs類來控制人物血量的值,當人物被射擊時,調(diào)用TakeDamage函數(shù),用來計算人物當前血量。
3? 結(jié)? 論
本文應(yīng)用Unity3D游戲引擎開發(fā)可以跨平臺的即時戰(zhàn)略射擊游戲,實現(xiàn)了控制人物動畫、添加槍支、完成子彈的傷害計算、添加人物血量以及實現(xiàn)射擊等功能,這款3D射擊游戲突破傳統(tǒng)游戲的障礙,帶來了一種新的游戲體驗,具有強烈的視覺效果。
參考文獻:
[1] 孫嘉謙.Unity 3D詳解與全案解析:基于多平臺次世代手游《黑暗秩序》 [M].北京:清華大學出版社,2015.
[2] DEAN J.Unity Character Animation With Mecanim [M].Birmingham:Packt Publishing,2015.
[3] 劉俊生,陳煜.3ds Max游戲場景制作 [M].湖北:華中科技大學出版社,2015.
[4] 黃遠,許廣彤.游戲動畫設(shè)計與制作 [M].北京:人民郵電出版社,2009.
[5] KENNY L.Unity著色器和屏幕特效開發(fā)秘笈 [M].晏偉,譯.北京:機械工業(yè)出版社,2014.
作者簡介:謝宏蘭(1974.10-),女,漢族,江西寧都人,講師,本科,主要研究方向:計算機圖形圖像、高職教育。