資源描述:
《Unity3D]Unity3D游戲開發(fā)之塔防游戲項目講解》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、Unity3D游戲開發(fā)之塔防游戲項目講解?通常意義上講,塔防游戲是指一類在地圖上建造炮臺或者類似建筑物來阻止敵人進攻的策略類游戲。從這個概念中,我們可以快速地抽離出來三個元素,即地圖(場景)、敵人、炮臺(防守單位)。當(dāng)我們抽離出來這樣三個元素后,現(xiàn)在塔防游戲就變成了這樣的一種描述,即敵人按照地圖中設(shè)計的路徑進攻,玩家利用防守單位進行防守的一類策略游戲。經(jīng)典的塔防游戲有哪些呢?比如我們最為熟悉的《植物大戰(zhàn)僵尸》、《保衛(wèi)蘿卜》都是塔防類游戲的經(jīng)典游戲。如果我們將塔防游戲中的防守單位的范圍擴大到玩家,那么像《英雄聯(lián)盟》這樣的游戲同樣是可以稱之為塔防游戲的,因為敵我陣營的最終目的都是要摧毀敵方的防御
2、塔,只是敵我雙方都從炮臺或者怪物變成了有血有肉的人物,加之角色扮演(RPG)和即時戰(zhàn)略(RTS)等元素的混合滲透,使得這樣的游戲從單純的塔防游戲變成了一款可玩度極高的游戲(天啊,我居然在夸這個游戲.....)。好了,那么我們就來嘗試著做出一個簡單的塔防游戲吧,注意是簡單的塔防游戲哦,既然塔防游戲的三個要素是地圖、敵人和防守單位,那么我們就從這三個方面來著手設(shè)計這個游戲吧!在本篇文章中,我們將用到下面的知識:·Unity2D中的Sprite動畫·Unity3D中的可視化輔助類Gizmos·塔防游戲中敵人按路徑尋路的實現(xiàn)·Unity3DuGUI的初步探索·簡單的AI算法一、地圖篇????地圖是一
3、個塔防游戲中玩家最為關(guān)注的地方,因為地圖和敵人將直接影響到玩家的策略。如圖是從《保衛(wèi)蘿卜》游戲中提取的一張游戲地圖。在這張地圖中我們可以清楚看到怪物進攻的路徑,怪物將沿著地圖中的路徑向我方防守單位發(fā)起攻擊。那么,在游戲中,我們該怎樣確定怪物的攻擊路徑呢?首先我們可以對地圖進行下分析,在地圖中基本上基本上只有兩種類型的區(qū)域,即可以放置防守單位的區(qū)域和不可放置防守單位的區(qū)域兩種。由此我們可以設(shè)計出下面的結(jié)構(gòu):[csharp]viewplaincopy1.usingUnityEngine;2.usingSystem.Collections;3.4.[SerializeField]5.publicc
4、lassGridNode:MonoBehaviour6.{7.publicenumNodeType8.{9.CanPlace,10.CantPlace11.}12.1.publicNodeTypeGridNodeType=NodeType.CanPlace;2.}???可以看出,我們在GridNode類中定義了一個稱為NodeType的枚舉類型,這個枚舉類型有兩個值,CanPlace表示可以放置防守單位,CantPlace表示不可以放置防守單位。在GridNode類中只有一個NodeType類型的成員變量GridNodeType,該成員變量的默認(rèn)值是CanPlace,即可以放置防守單位。那么
5、,現(xiàn)在問題來了,我們找到了一種可以用來描述地圖中不同區(qū)域的方法,可是這些區(qū)域在哪里呢?所以我們需要一種方法來生成這些區(qū)域。這里隆重向大家介紹Gizoms類,Gizmo是Unity中一個用于在場景視圖可視化調(diào)試或輔助設(shè)置的工具類。簡單的說,當(dāng)我們需要在編輯器環(huán)境中實現(xiàn)某種可視化調(diào)試的時候,我們就可以使用Gizmo類。所以的Gizmo繪制都需要在OnDrawGizmos或OnDrawGizmosSelected函數(shù)里完成。從這兩個函數(shù)的名稱我們就可以看出它們的區(qū)別,OnDrawGizmos在每一幀都調(diào)用,所有在Gizmos里渲染的Gizmo都將被渲染,而OnDrawGizmosSelected僅
6、在腳本附加的物體被選中時渲染。好了,在了解了Gizmos的基本概念和用法后,我們回到我們的游戲中。我們剛剛提到,我們需要一種方法來生成區(qū)域以便于我們可以使用GridNode類來描述每個區(qū)域的屬性,那么具體怎么做呢?其實思路就是在地圖上畫出網(wǎng)格,這樣網(wǎng)格便可以將整個地圖分割成不同的區(qū)域,然后我們就可以使用GridNode來描述每個區(qū)域的屬性啦。好了,下面我們來看具體的腳本:[csharp]viewplaincopy1.usingUnityEngine;2.usingSystem.Collections;3.4.publicclassGridMap:MonoBehaviour{5.6.publi
7、cstaticGridMapInstance=null;7.8.publicintMapSizeX;1.publicintMapSizeZ;2.3.[HideInInspector]4.publicGameObject[]mNodes;5.[HideInInspector]6.publicGameObject[]mPaths;7.8.voidAwake()9.{10.Instance=this;11.mNod