999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Unity3D的2D塔防游戲設計與實現

2021-10-16 16:01:54張寶寶
現代信息科技 2021年7期
關鍵詞:游戲設計

摘?要:Unity3D是當前國內外廣泛使用的游戲開發軟件,其所開發出的塔防游戲自游戲發展以來就十分盛行。該項目基于Unity3D開發了一款塔防游戲。其主要功能包括防御塔放置、敵人孵化、關卡管理、音效控制、UI界面以及最后的積分管理。該項目摒棄了傳統關卡設計,通過關卡內的難度上升而達到提升游戲難度的目的。通過該項目,可以讓玩家體驗到難度層層遞增、挑戰性極強的塔防游戲。

關鍵詞:Unity3D;C#;塔防

中圖分類號:TP311? ? ? 文獻標識碼:A? ? 文章編號:2096-4706(2021)07-0071-04

Design and Implementation of 2D Tower Defense Game Based on Unity3D

ZHANG Baobao

(School of Computer and Software,Jincheng College of Sichuan University,Chengdu? 611731,China)

Abstract:Unity3D is game development software that is widely used at home and abroad at present. Tower defense games developed by it are extremely popular since the development of games. This project develops a tower defense game based on Unity3D. Its main functions include defense tower placement,enemy hatching,gate management,sound effect control,UI interface,and the final points management. Instead of traditional gate design,this project aims to increase the difficulty of the game by increasing the difficulty within the gate. Through this project,players can experience the tower defense game with increasing difficulty and strong challenge.

Keywords:Unity3D;C#;tower defense

收稿日期:2021-03-10

0? 引? 言

隨著電子產品的普及和發展,游戲技術也隨之得到了很大的提升。在游戲引擎和玩法方面,目前的游戲行業水平都達到了空前的高度。其中塔防類游戲得到了很多玩家的喜愛,不管是自身還是敵人都可以隨著關卡的進行得到能力的提升。

1? 開發工具及技術

Unity3D是由Unity公司設計的一款游戲引擎,在其中可以進行2D及3D游戲的設計與開發。該平臺同時支持主機、手機、PC等設備的游戲開發。目前國內外有相當多的游戲制作組使用Unity開發了很多優秀游戲。本項目游戲腳本開發采用C#語言,使用VS2019版本,設計了一款基于Unity3D的塔防游戲,實現了怪物AI、防御塔攻擊算法的設計以及眾多特效等。

2? 游戲策劃

本項目的塔防游戲擁有以下幾個規則:

(1)玩家可以使用金幣在建筑方塊上建造防御塔,但是每建造一次,金幣的消耗便會隨之增加。

(2)怪物會從不同的方向生成,并且會通過不同的路徑走向玩家的核心。怪物每生成一次,其攻擊力、防御力及每次的個數都會有所提升。

(3)玩家每擊殺一個怪物則會獲得金幣和血量的獎勵,但是此獎勵會逐漸減少。

(4)怪物一旦碰到核心便會對其造成傷害,核心血量達到0,游戲便結束。

游戲流程如圖1所示。

3? 游戲主要功能模塊詳細設計與實現

3.1? 場景搭建及功能設計

本項目使用Unity中的TileMap功能進行場景的繪制。此功能也是Unity為2D游戲提供的一個便于繪圖的功能。我們把將要使用的方塊素材放置到一個類似于“顏料板”的窗口后,便可以使用筆刷蘸取不同的方塊素材在畫布上進行繪制。這樣繪制出來的地圖會成為一個整體。主要分為整體系統的設計、防御塔的設計和怪物的設計三大類。游戲功能如圖2所示。

3.2? 炮塔的設計

3.2.1? 加農炮的設計

加農炮是游戲里常見的一種大炮類型,在項目里面的加農炮分為了上下兩個部分,一個底座一個炮管,之所以要這么設計,是為了在實現炮管旋轉時能夠更加真實。我們需要在炮管上設置一個圓圈形的觸發器,這代表著防御塔的攻擊范圍,在代碼里面要設置一個OnTriggerEnter2D的函數,用來捕捉到進入觸發器的對象,如果為敵人則將記錄敵人數量的參數加1。在2D游戲中,無法使用transform.lookat的方法,為了讓炮管能夠始終朝向敵人,則需要設置OnTriggerStay2D函數,在這個函數中獲取敵人和炮管的位置差值,利用差值算出炮管和敵人之間夾角的正切值,然后再利用這個正切值使炮管能夠旋轉。主要代碼為:

Vector2 direction=collision.transform.position-transform.position;

float angle=Mathf.Atan2(direction.y,direction.x)*Mathf.Rad2Deg;

transform.rotation=Quaternion.AngleAxis(angle,Vector3.forward);

當敵人離開觸發器范圍時,在OnTriggerExit函數中使記錄敵人數量的參數減1。同時為了讓炮管能夠發射子彈,則為發射子彈功能建立一個協程函數,便于控制射擊的調用和時間間隔。協程函數代碼為:

IEnumeratorfireCor()

{while (true)

{yieldreturnnewWaitForSeconds(0.5f);Instantiate(bullet, shotpoint.transform.position, gameObject.transform.rotation);}}

并且在Update中檢測敵人數量來開啟、關閉協程。子彈本身會朝著自身的X軸移動,一旦發射出來便會向著炮管瞄準的方向射擊。只要子彈碰撞到敵人,則會調用敵人身上的受傷函數。

3.2.2? 火塔的設計

火塔在游戲中是一個能夠造成持續傷害的防御塔。火塔相較于加農炮多了一個火焰特效的設計。將不同火焰燃燒的圖片建立為動畫的不同關鍵幀,在播放的時候就會形成火焰燃燒的效果。在火塔中也需要一個圓形觸發器,同樣也是作為火塔的攻擊范圍。在腳本中利用OnTirggerStay2D函數來進行敵人對象的捕捉和檢測。一旦檢測到敵人便會調用敵人身上的受傷函數。動畫制作如圖3所示。

3.3? 核心的設計

本游戲的核心設計為一顆心臟樣子,首先要為其添加動畫。在動畫中的不同關鍵幀上使心臟對象的大小有所調整,這樣就會形成一顆心臟跳動的效果。然后為其添加觸發器,使得心臟能夠和敵人發生碰撞。

3.4? 敵人控制

3.4.1? 敵人的設計

在敵人的身上也有類似于核心的動畫設計,使其運動時看起來更加逼真。在敵人的身上有一個受傷函數,函數的參數則為受到的傷害,敵人會根據防御值和傷害來計算出實際受到的傷害。敵人如圖4所示。

3.4.2? 敵人的孵化

在需要敵人孵化的點處放置空對象并且編輯腳本。在腳本中需要創建兩個計時器,第一個計時器用來計算一次內怪物的孵化間隔,如果到了孵化間隔,則生成怪物到指定的位置,將怪物生成計數加1,并且將計時器復原。第二個計時器則是用來計算每一次怪物生成的間隔,如果第二個計時器大于等于每次間隔,則使其復原,將每次敵人數量增加,并且利用全局變量改變敵人的防御值。主要代碼為:

time2+=Time.deltaTime;

if (time2

{time+=Time.deltaTime;

if(time>rate)

{Instantiate(Enemy,gameObject.transform.position-new Vector3(-8.80f,2.34f),Quaternion.identity);count++;time-=rate;}}

if(time2>=timeofEachWave)

{time2=0;maxene+=2;count=0;GlobalValue.instance.enemydefence+=0.1f;AudioManager.instance.PlaySound(next); }

3.4.3? 敵人的自動尋路

為了使敵人能夠按照一定的路徑走向核心,在游戲中采用了路徑點的辦法,先用一個Transform類型的數組來存放路徑點組,在腳本中創建一個MoveToThePoints()函數來實現怪物的移動,代碼為:

Vector2 temp=Vector2.MoveTowards(transform.position, theWayPoints[index].position,speed* Time.deltaTime);

GetComponent().MovePosition(temp);

在Update函數中判斷是否達到了目標路徑點的位置如果沒有則調用MoveToThePoints函數,如果到了則將目標路徑點設置為下一個。

在游戲中存在一種迅捷怪物,這種怪物采用了另外一種尋路方式,它是利用A*PathFind插件來實現的。首先要在移動路徑兩旁放置對象,然后在A*PathFind插件中來檢測可以行動的范圍,在迅捷怪物上添加插件中的移動腳本,并且將目標設置為核心,這樣怪物就會通過最近的路徑移動到核心,從而加大游戲的難度。

3.4.4? 敵人的血量及死亡

不管是火塔攻擊還是子彈的碰撞都會調用敵人腳本中的受傷函數,敵人在受到傷害時會進行一定的防御計算,如:health -= (dam / GlobalValue.instance.enemydefence);。如果敵人的生命值小于等于0,則會觸發音效、摧毀敵人并提供獎勵。在OnTriggerEnter2D中如果碰撞到了核心則會使玩家受傷,并且會讓加農炮的敵人記錄數減少。代碼為:

if (collision.gameObject.transform.CompareTag("Player"))

{GlobalValue.instance.hurt(damage);

Cannon.instance.enenumcost();

Destroy(gameObject);}

3.5? 游戲UI、音效及管理

3.5.1? 游戲場景切換

當打開游戲時并不會直接開始游戲,首先會有一個開始的場景,有游戲的名稱,并且有開始按鈕、幫助按鈕等。玩家可以點擊不同的按鈕切換到不同的場景。當按下幫助按鈕后,會切換到游戲規則講解場景,也可以點擊返回按鈕返回。當點擊開始后,會進入到關卡選擇場景。游戲的場景采用的是不斷解鎖的方式,當玩家一個關卡玩到一定的分數后,會解鎖下一個關卡。當玩家點擊關卡按鈕后則會進入關卡開始游戲。

3.5.2? 游戲UI

在游戲進行的時候,游戲會顯示當前的金幣數量和建造不同防御塔所需的花費。同時玩家的生命值會以進度條的方式顯示在頂部。在右上角還有一個暫停按鈕,但是由于游戲機制的設定,玩家需要花費500金幣來暫停游戲。游戲UI如圖5所示。

3.5.3? 游戲數據管理

在整個項目中,使用了一個GlobalValue腳本來管理不同的數據,包括建造塔的花費函數等。將所有的數據存放于一個腳本中,便不會出現不同對象使用腳本時,因為數據更改而出現的錯誤,同時也更加方便管理。

3.5.4? 游戲音效

在游戲中,建造防御塔,擊殺怪物,每一波怪物生成都有不同的音效。首先要在項目中添加一個AudioManager腳本用以管理整體的音效播放。在其中建立音效播放函數(其參數為需要播放的聲音),然后在需要音效的地方調用此函數。并且在攝像機上添加一個AudioSource組件用來播放游戲的BGM。

3.6? 游戲腳本

在本項目中,主要使用了游戲管理腳本,全局值腳本,防御塔建造腳本,敵人控制腳本,敵人孵化腳本,敵人尋路腳本,炮塔控制腳本,火塔控制腳本,音效控制腳本,關卡切換腳本等。其中較為重要的是防御塔建造腳本,主要是利用射線檢測來判斷鼠標點擊的方塊是否可建造。再根據判斷點擊左右鍵來建造不同的防御塔。

4? 測試

4.1? 測試環境

本游戲制作使用的Unity3D為2018.3.9f1版本,C#腳本由VisualStudio2019進行編寫。游戲在顯卡GTX970、CPU為i5,內存8 GB的環境下進行測試。

4.2? 測試內容

游戲測試內容主要為,讓不同玩家通過不同配置的電腦及不同分辨率來進行游戲,查看游戲的UI是否錯位,其次通過玩家的反饋來進行游戲難度的調整,讓玩家能夠體驗到游戲難度的坡度上升,并且可以在其中找到樂趣。最后在對比不同玩家得到的分數,來完善最終分數的計算方式。游戲功能如圖6所示。

5? 結? 論

本項目是基于Unity3D開發的一款塔防游戲。主要功能包括防御塔的放置、敵人的孵化和尋路、關卡設計與管理、音效控制、UI界面及最后的積分系統。通過本項目,可以讓玩家體驗到難度遞增的塔防游戲,并且可以通過此游戲得到一個良好的體驗。

游戲已經達到了可以暢玩的基本要求,但是仍然還有很多需要改進的地方。在未來還需要優化游戲的代碼,使其能夠在大量怪物和防御塔存在時,能夠使運行更加流暢。其次是增加怪物和防御塔的種類,創作更多新的關卡地圖。

參考文獻:

[1] 胡靜,胡欣宇.基于Unity3D引擎的游戲設計與開發 [J].電子元器件與信息技術,2021,5(2):138-140+154.

[2] 王艷,華唯辰.基于Unity3D的ARPG游戲設計與實現 [J].電腦知識與技術,2020,16(29):199-201.

[3] 周正,司占軍,秦雷.開放世界類型游戲的設計與制作 [J].電腦知識與技術,2020,16(22):1-2+7.

[4] 周正,司占軍.基于Unity3D的冒險闖關類游戲的設計與實現 [J].電腦知識與技術,2020,16(21):90-91.

[5] 岳書丹,陳雪榮.基于Unity3D塔防游戲的設計與實現 [J].電子測試,2020(13):124-126.

作者簡介:張寶寶(2000—)男,漢族,四川宜賓人,本科在讀,研究方向:VR與游戲開發。

猜你喜歡
游戲設計
何為設計的守護之道?
現代裝飾(2020年7期)2020-07-27 01:27:42
《豐收的喜悅展示設計》
流行色(2020年1期)2020-04-28 11:16:38
瞞天過海——仿生設計萌到家
藝術啟蒙(2018年7期)2018-08-23 09:14:18
設計秀
海峽姐妹(2017年7期)2017-07-31 19:08:17
有種設計叫而專
Coco薇(2017年5期)2017-06-05 08:53:16
游戲
數獨游戲
瘋狂的游戲
飛碟探索(2016年11期)2016-11-14 19:34:47
爆笑游戲
第八章直接逃出游戲
小學科學(2015年7期)2015-07-29 22:29:00
主站蜘蛛池模板: 成人国产精品视频频| 91小视频在线| 欧美v在线| 亚洲综合天堂网| 国产一区二区人大臿蕉香蕉| 久草视频一区| 久久无码免费束人妻| 一级毛片在线免费视频| 一级全免费视频播放| 亚洲中文字幕国产av| 中文字幕精品一区二区三区视频| 国产尤物在线播放| 中文字幕伦视频| 久久香蕉国产线看观看精品蕉| 视频一本大道香蕉久在线播放 | 精品撒尿视频一区二区三区| 91无码国产视频| 26uuu国产精品视频| 又黄又湿又爽的视频| 真人高潮娇喘嗯啊在线观看| 亚洲最大综合网| 亚洲色图狠狠干| av一区二区三区高清久久| 欧美国产视频| 亚洲香蕉在线| 二级毛片免费观看全程| 在线看片中文字幕| 免费啪啪网址| 久久99蜜桃精品久久久久小说| 91蜜芽尤物福利在线观看| 国产精品2| 精品国产福利在线| 亚洲最大福利网站| 福利视频一区| 4虎影视国产在线观看精品| 激情综合图区| 亚洲无码日韩一区| 波多野衣结在线精品二区| 亚洲三级a| 国产欧美一区二区三区视频在线观看| 国产粉嫩粉嫩的18在线播放91| 亚洲欧美另类视频| 欧美日韩精品综合在线一区| 亚洲国产欧美国产综合久久| 国产制服丝袜91在线| 青青青国产精品国产精品美女| 亚洲欧洲日产国产无码AV| 992tv国产人成在线观看| 又黄又爽视频好爽视频| 亚洲一级毛片免费观看| 国产性生大片免费观看性欧美| 无码高潮喷水专区久久| 天堂亚洲网| 99久久无色码中文字幕| 亚洲无线一二三四区男男| 97se亚洲综合在线天天| 欧美自拍另类欧美综合图区| 免费一级α片在线观看| 永久免费AⅤ无码网站在线观看| 午夜无码一区二区三区| 欧美日韩精品在线播放| 国产精品极品美女自在线网站| 99精品视频播放| 日本免费高清一区| 宅男噜噜噜66国产在线观看| 在线观看精品国产入口| 白浆视频在线观看| 精品久久高清| 91在线精品麻豆欧美在线| 国产女人爽到高潮的免费视频| 色综合天天综合| 亚洲欧美在线综合一区二区三区| 久久久国产精品免费视频| 99久久精品免费视频| 亚洲精品午夜天堂网页| 亚洲第一成年免费网站| 久久久久九九精品影院| 一级毛片免费不卡在线| 欧美全免费aaaaaa特黄在线| 国产一级二级三级毛片| 国产午夜福利片在线观看| 好吊色妇女免费视频免费|