塔防,即炮塔防禦(Tower Defence),也統稱TD ,指一類透過在地圖上建造炮塔或類似建築物,以阻止遊戲中敵人進攻的策略型遊戲,要有陣圖。塔防受眾很廣,遊戲模式簡單而且可玩性極強,時至今日,塔防在遊戲應用中依然是最熱門的下載型別之一,比較經典的像《植物大戰殭屍》。
本設計使用當前流行的跨平臺遊戲引擎Unity3d,程式語言為C#。在遊戲中,玩家可以在任何空白的地塊上建造各種防禦塔用於攻擊不同型別的怪物,怪物會按照預定的路線前進,當進入目的地的怪物到達一定數量後遊戲會失敗;當進入目的地的怪物沒有到達指定數量且所有怪物都被擊殺後遊戲通關。使用Unity3d引擎來設計讓UI、遊戲地圖的佈置大幅簡化。並透過使用擴充性強的類,使得開發者能快速新增新的怪物、防禦塔等,提高開發效率的同時,還降低了遊戲的開發成本。
本文主要從選題背景與意義、可行性與需求分析、遊戲設計與功能實現、測試等四個方面,按照製作的流程對本次設計進行論述,對開發的思路、實現以及實現過程中的主要問題都予以描述記錄。
遊戲畫面
專案結構目錄
核心程式碼:
if ( Input.GetMouseButtonDown(0))
{
if (EventSystem.current.IsPointerOverGameObject()==false)
{
//開發炮臺的建造
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
bool isCollider = Physics.Raycast(ray,out hit, 1000, LayerMask.GetMask("MapCube"));
if (isCollider)
{
MapCube mapCube = hit.collider.GetComponent<MapCube>();
if (selectedTurretData != null && mapCube.turretGo == null)
{
//可以建立
if (money > selectedTurretData.cost)
{
ChangeMoney(-selectedTurretData.cost);
mapCube.BuildTurret(selectedTurretData);
}
else
{
//提示錢不夠
moneyAnimator.SetTrigger("Flicker");
}
}
else if (mapCube.turretGo != null)
{
// 升級處理
//if (mapCube.isUpgraded)
//{
// ShowUpgradeUI(mapCube.transform.position, true);
//}
//else
//{
// ShowUpgradeUI(mapCube.transform.position, false);
//}
if (mapCube == selectedMapCube && upgradeCanvas.activeInHierarchy)
{
StartCoroutine(HideUpgradeUI());
}
else
{
ShowUpgradeUI(mapCube.transform.position, mapCube.isUpgraded);
}
selectedMapCube = mapCube;
}
}
}
}
}
下載連結:TowerDefenseProject: 簡單塔防小遊戲