国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Unity3D的塔防類游戲的設(shè)計與實現(xiàn)

2021-06-28 00:14張越陶俊徐迅
現(xiàn)代信息科技 2021年1期
關(guān)鍵詞:炮臺金幣向量

張越 陶俊 徐迅

摘? 要:文章基于Unity3D開發(fā)引擎,設(shè)計并制作了一個塔防類的3D游戲。主要分為兩個模塊,一是敵人功能的設(shè)計,包括敵人按照規(guī)定路線移動,敵人受到攻擊扣除血量等;二是防御塔的設(shè)計,包括對敵人進行攻擊,建造、升級、拆除防御塔等功能設(shè)計。使用了3ds Max軟件建造角色和場景的模型,最后在Unity3D中實現(xiàn)游戲的開發(fā),結(jié)果表明敵人和防御塔設(shè)計合理,游戲體驗良好。

關(guān)鍵詞:Unity3D;塔防類游戲;C#腳本;3ds Max

中圖分類號:TP317? ? ? 文獻標識碼:A 文章編號:2096-4706(2021)01-0084-04

Design and Implementation of Tower Defense Game Based on Unity3D

ZHANG Yue,TAO Jun,XU Xun

(School of Artificial Intelligence,Jianghan University,Wuhan? 430056,China)

Abstract:This paper designs and produces a tower defense 3D game based on Unity3D development engine. It is mainly divided into two modules,one is the design of the enemy function,including the enemy moving according to the prescribed route,the enemy being attacked deducting the amount of blood and so on;the second is the design of the defense tower,including the attack on the enemy,construction,upgrade,demolition of defense towers and other functional design. The 3ds Max software was used to build the models of the characters and scenes,and finally the game was developed in Unity3D. The results showed that the enemy and defense towers were designed reasonably and the game experience was good.

Keywords:Unity3D;tower defense game;C# script;3ds Max

0? 引? 言

國內(nèi)游戲產(chǎn)業(yè)突飛猛進的發(fā)展和手機的快速普及,根據(jù)市場調(diào)研公司Newzoo的數(shù)據(jù)報告2023年全球玩家將達30億。其中許多玩家進入游戲領(lǐng)域都是通過移動設(shè)備。而根據(jù)中國音數(shù)協(xié)游戲工委(GPC)與國際數(shù)據(jù)公司(IDC)共同發(fā)布的《2020第一季度中國游戲產(chǎn)業(yè)報告》,受新冠肺炎疫情影響,“宅經(jīng)濟”大熱,游戲業(yè)保持了非常高的增速,報告顯示2020年第一季度,中國游戲市場實際銷售為730.03億元,其中移動游戲市場占了75.64%的市場份額,實際銷售收入為553.70億元?;趫蟾姹砻?,中國游戲市場正處于飛速發(fā)展的階段。塔防游戲(Tower Defence Game,TDG)為一個經(jīng)典的休閑游戲類別,被許多玩家所喜愛,如手游市場上的《部落沖突》?;谝陨蠑?shù)據(jù),本人設(shè)計開發(fā)了一款移動端的塔防類游戲,游戲節(jié)奏較快,可以使得玩家利用碎片化時間進行體驗,使用Unity3D引擎開發(fā)的這款3D塔防游戲在保證可玩性和策略性的基礎(chǔ)上,增加了攝像機移動功能,優(yōu)化了游戲畫質(zhì)。

1? 游戲分析

此款塔防游戲的玩法規(guī)則是在地圖的一側(cè)出生點生成敵人,敵人按照規(guī)定的路線行進到地圖的另一側(cè),在敵人行動路線的兩側(cè)玩家可以根據(jù)自己的金錢多少,建造炮臺來攻擊敵人,使得敵人無法到達終點,如果炮臺放置的位置不對,或炮臺的威力不夠等,導(dǎo)致敵人到達了終點,敵人就攻入了玩家的大本營,玩家便輸了。玩家需要從地圖、炮臺、敵人、游戲金幣四方面制定防御策略。下面分別介紹:

(1)地圖:敵人從出生點開始生成,按照規(guī)定路線朝著終點行進,中途會有轉(zhuǎn)角處,這就使得玩家在建造炮臺的地方有所選擇,游戲中敵人的行進路線設(shè)計了許多轉(zhuǎn)彎,從而延長了敵人到達終點的時間,使得玩家有足夠的時間考慮在哪里建造炮臺。

(2)炮臺:炮臺有3種種類,每種炮臺的建造成本,攻擊速度,威力各不相同。玩家需要根據(jù)當前情況對炮塔進行選擇,同時每種炮臺還能進行升級,使得玩家的選擇更加的多樣性。

(3)敵人:敵人有4種,并且每一波生成敵人的數(shù)目不同,同時不同敵人的血量、移動速度不同,擊殺后玩家獲得的金幣也不同。

(4)游戲金幣:游戲中的金幣,是支撐玩家繼續(xù)游戲的源泉,金幣越多,玩家所能建造的炮臺也就越多,游戲就越簡單;反之,游戲就越難。因此,合理的設(shè)置游戲中金幣的數(shù)量非常重要,初始金幣、擊殺敵人獲取的金幣、建造防御塔損失的金幣、升級防御塔損失的金幣和拆除防御塔獲得的金幣,這些金幣的數(shù)量都需要嚴謹?shù)目紤]。

2? 游戲設(shè)計

塔防游戲功能設(shè)計模塊如圖1所示。

本次設(shè)計主要體現(xiàn)在防御塔的功能、敵人的功能、以及各種UI界面的設(shè)計上。游戲開始時玩家需要先進行賬號的登錄,若沒有賬號則先進行注冊。登錄成功后,可以對游戲進行設(shè)置,如背景音樂音量的大小、游戲的難度等,也可直接進入游戲。進入游戲后,左上角為玩家金幣的數(shù)量,最右側(cè)為三種炮臺的UI,點擊相應(yīng)的按鈕則可以建造不同的炮臺。在3秒的等待后,第一關(guān)的第一波敵人生成,按照規(guī)定的路線向著終點移動。玩家則用初始的金幣建造炮臺,守住第一波的攻勢,得到的金幣進行下一波的炮臺建造。同時玩家可以點擊暫停按鈕彈出暫停界面,暫停界面中有繼續(xù)游戲、重新開始和退出游戲按鈕。所有敵人都死亡后,游戲勝利進入下一關(guān);如果有敵人進入了玩家大本營,并且玩家總血量降為0,游戲結(jié)束,彈出失敗界面。對于游戲的GameManager采用單例模式設(shè)計,方便對游戲的控制并且節(jié)約系統(tǒng)資源。對于炮臺和敵人則采用類似MVC的設(shè)計模式,使得炮臺和敵人的數(shù)據(jù)模塊和功能模塊分開,降低了程序的開發(fā)難度,提高了程序的可維護性。

游戲包含的類主要為GameManager.cs、Bullet.cs、Enemy.cs、Turret.cs等,如圖2所示。

GameManager類:實現(xiàn)游戲的總體控制,如UI控制、場景加載等功能。

Bullet類:實現(xiàn)子彈的追蹤、扣除敵人血量等功能。

Enemy類:實現(xiàn)敵人的移動、受到傷害死亡等功能。

Turret類:實現(xiàn)發(fā)射子彈等功能。

3? 游戲?qū)崿F(xiàn)

3.1? Unity3D游戲引擎關(guān)鍵技術(shù)

Unity3D引擎具有許多模塊,下文列舉一些本次開發(fā)中使用比較頻繁的功能模塊。

3.1.1? 預(yù)設(shè)體

預(yù)設(shè)體(Prefab)為Unity中的重要概念,Prefab中儲存著一個游戲?qū)ο?,包括游戲?qū)ο蟮乃薪M件以及其下所有子游戲?qū)ο?。在Hierarchy視圖中可以對Prefab進行復(fù)制粘貼。本次開發(fā)中所有的敵人和炮臺都采用了預(yù)設(shè)體的設(shè)計,大大減少了重復(fù)性工作,簡化了工作量。我們首先將炮臺的模型導(dǎo)入到Unity中,將炮臺所需的腳本Turret編寫好加載到目標上,測試其功能無誤后,將當前對象拖入Project視圖中,做為炮臺的預(yù)設(shè)體。

3.1.2? UGUI核心控件

UGUI Panel可將該面板控件看作一個容器,我們將其他的UI控件放置在上面進行編輯。利用Text文本組件顯示建造炮臺所消耗的金幣和消滅敵人所獲得的金幣。我們利用Button和Image組件實現(xiàn)建造炮臺的按鈕,將圖片轉(zhuǎn)為精靈格式,使用填充的呈現(xiàn)方式,使得界面更加友好。而不同炮臺的建造,我們將三個炮臺建造按鈕放入同一個Toggle中,這樣保證UI傳入的數(shù)據(jù)正確,每次玩家都只會建造一種炮臺,避免了不必要的錯誤。

3.2? 游戲的AI設(shè)計

3.2.1? 敵人

我們?yōu)閿橙司帉懥藘蓚€類,分別為Enemy類和CreateEnemy類。CreateEnemy類:實現(xiàn)在出生點對敵人的創(chuàng)建。為了實現(xiàn)敵人按照路點進行前進從而形成特定的路線時,我們在地圖中設(shè)定了路點,使敵人獲取路點這個數(shù)組,由下一個路點的位置減去當前路點的位置,則得到一條由當前位置指向下一個路點的向量,將其單位化,利用transform中的方法,使敵人按照這個向量移動即可。當移動到一個路點后,number++則進行計算下一個路點。主要代碼為:

if (index > positions.Length - 1) {return; }

transform.Translate((positions[index].position - transform.position).normalized * Time.deltaTime * speed);

if (Vector3.Distance(positions[index].position , transform.position) < 0.2f) {index++;}

if (index > positions.Length - 1){ReachEnd();}

3.2.2? 炮臺

建造炮臺功能的實現(xiàn),我們需要確定鼠標點擊在可以建造炮臺的地方,鼠標是與MapCube地圖塊層級進行碰撞,而不是UI層。所以在Unity中我們需要對Physics進行設(shè)置,在代碼中,我們需要進行判斷,這樣就可以判斷鼠標和相應(yīng)的層級進行了碰撞。

炮臺自動攻擊范圍內(nèi)的第一個敵人,我們需要設(shè)置一個觸發(fā)器(trigger),也就是防御塔的攻擊范圍,在代碼中需要設(shè)置一個OnTriggerEneter的方法,當敵人進入炮臺的攻擊范圍時,獲得敵人這個對象,然后由向量的方法,用敵人的位置,即position,減去炮塔的position就會得到由炮臺指向敵人的向量,將其單位化,然后利用transform的方法就可以實現(xiàn)炮臺攻擊敵人了,并且我們利用transform.lookat的方法,可以保持炮臺一直指向敵人。主要代碼為:

private void OnTriggerEnter(Collider other)

{if (other.tag == "Enemy"){enemys.Add(other.gameObject); } }

private void OnTriggerExit(Collider other)

{if (other.tag == "Enemy"){enemys.Remove(other.gameObject);}}

void Attack()

{if (enemys[0] == null){EnemyUpdate();}

if (enemys.Count > 0){GameObject bullet = GameObject.Instantiate(bulletPrefab, firePosition.position, firePosition.rotation);

bullet.GetComponent().SetTarget(enemys[0].transform);}

else{timer = attackRateTime;}}

3.2.3? UI界面的設(shè)計與制作

游戲的UI界面使用Unity3D中自帶的UGUI工具來進行創(chuàng)建,如“開始游戲”按鈕、“重新開始”按鈕和“建立炮臺”按鈕、“炮臺升級”以及“炮臺拆解”按鈕等。制作完成的界面如圖3和圖4所示。

3.2.4? 炮彈追蹤算法

假設(shè)炮彈的位置為(x1,y1,z1),敵人的位置為(x2,y2,z2),則得到兩條向量,則由線性代數(shù)中向量減法的知識,則? 為世界坐標系中原點指向敵人的向量, 為世界坐標系中遠點指向炮彈的向量,則? 減去? ,由向量減法的幾何意義可知? 為炮彈指向敵人位置向量:

得到后我們將此向量進行單位化,就可以得到一條單位向量,在游戲里運行的每一幀我們都進行計算,更新此向量,使炮彈按照此方向移動。

4? 結(jié)? 論

本文使用Unity3D引擎開發(fā)了一款塔防游戲,實現(xiàn)的主要功能有敵人的生成、敵人的移動、建造防御塔、防御塔攻擊、炮彈的追蹤等功能。結(jié)果表明游戲設(shè)計合理,敵人和防御塔的交互性較好,玩家游戲體驗良好,可玩性較高。

參考文獻:

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

[2] 蔣明.基于Unity3D的區(qū)域景觀生態(tài)敏感性評價系統(tǒng)設(shè)計 [J]. 現(xiàn)代電子技術(shù),2020,43(20):171-174.

[3] 楊劍,白忠建,丁曉峰.數(shù)據(jù)結(jié)構(gòu) [M].北京:人民郵電出版社,2013.

[4] 劉俊,郭祖江.基于Unity3D的塔防游戲設(shè)計與實現(xiàn) [J].科技傳播,2015,7(5):152-154.

[5] 胡杭.基于Unity3D的移動塔防游戲設(shè)計與實現(xiàn) [J].現(xiàn)代計算機(專業(yè)版),2019(4):60-63.

[6] 李遇涵.基于Unity3D的虛擬校園漫游系統(tǒng)的研究 [D].武漢:華中科技大學(xué),2019.

[7] 馬力.基于Unity3D旅行故事游戲軟件設(shè)計與實現(xiàn) [D].武漢:華中科技大學(xué),2019.

[8] 尹曉卿.基于Unity3D的MMO移動游戲關(guān)鍵技術(shù)設(shè)計與實現(xiàn) [D].成都:電子科技大學(xué),2019.

[9] 吳亞峰,索依娜,于復(fù)興.Unity案例開發(fā)大全:第2版 [M].北京:人民郵電出版社,2018.

[10] 陳嘉棟.Unity 3D腳本編程——使用C#語言開發(fā)跨平臺游戲 [M].北京:電子工業(yè)出版社,2016.

[11] 徐文芳.基于Unity3D的教育游戲的設(shè)計與開發(fā) [D].南昌:江西科技師范大學(xué),2019.

[12] 程宇.Unity3D教育游戲在初中生物教學(xué)中的應(yīng)用研究 [D].廣州:廣東技術(shù)師范大學(xué),2019.

[13] 沈志超.基于Cocos2d-x的RPG手機游戲開發(fā) [D].南京:東南大學(xué),2015.

[14] Unity公司.Unity 5.X/2017 標準教程 [M].北京:人民郵電出版社,2018:99-101.

[15] 姜雪偉.Unity 3D實戰(zhàn)核心技術(shù)詳解 [M].北京:電子工業(yè)出版社,2017:193-198.

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

[17] 仲曉慶,蔡朝暉.基于unity3D的塔防游戲開發(fā) [J].科技創(chuàng)新與應(yīng)用,2018(29):14-15+18.

作者簡介:張越(1998—),男,漢族,湖北襄陽人,碩士,研究方向:機器學(xué)習(xí);通訊作者:陶俊(1976—),男,漢族,湖北武漢人,教授,碩士研究生導(dǎo)師,博士,主要研究方向:機器學(xué)習(xí);徐迅(1991—),男,漢族,北京人,碩士,研究方向:計算機視覺。

猜你喜歡
炮臺金幣向量
向量的分解
一塊金幣
找金幣
小野人
找金幣
淺說晚清廣州江防重鎮(zhèn)沙路炮臺
膠東半島炮臺的開發(fā)利用
炮臺,戰(zhàn)爭與和平
向量垂直在解析幾何中的應(yīng)用
向量五種“變身” 玩轉(zhuǎn)圓錐曲線