版本記錄
版本號(hào) | 時(shí)間 |
---|---|
V1.0 | 2019.01.31 星期四 |
前言
Unity是由Unity Technologies開發(fā)的一個(gè)讓玩家輕松創(chuàng)建諸如三維視頻游戲荆几、建筑可視化枝恋、實(shí)時(shí)三維動(dòng)畫等類型互動(dòng)內(nèi)容的多平臺(tái)的綜合型游戲開發(fā)工具晨缴,是一個(gè)全面整合的專業(yè)游戲引擎。Unity類似于Director,Blender game engine, Virtools 或 Torque Game Builder等利用交互的圖型化開發(fā)環(huán)境為首要方式的軟件盈厘。其編輯器運(yùn)行在Windows 和Mac OS X下私植,可發(fā)布游戲至Windows挎塌、Mac徘六、Wii、iPhone榴都、WebGL(需要HTML5)待锈、Windows phone 8和Android平臺(tái)。也可以利用Unity web player插件發(fā)布網(wǎng)頁(yè)游戲嘴高,支持Mac和Windows的網(wǎng)頁(yè)瀏覽竿音。它的網(wǎng)頁(yè)播放器也被Mac 所支持。網(wǎng)頁(yè)游戲 坦克英雄和手機(jī)游戲王者榮耀都是基于它的開發(fā)拴驮。
下面我們就一起開啟Unity之旅春瞬。感興趣的看下面幾篇文章。
1. Unity開啟篇(一) —— Unity界面及創(chuàng)建第一個(gè)簡(jiǎn)單的游戲 (一)
2. Unity開啟篇(二) —— Unity界面及創(chuàng)建第一個(gè)簡(jiǎn)單的游戲 (二)
3. Unity開啟篇(三) —— 一款簡(jiǎn)單射擊游戲示例 (一)
4. Unity開啟篇(四) —— 一款簡(jiǎn)單射擊游戲示例 (二)
5. Unity開啟篇(五) —— 一款簡(jiǎn)單射擊游戲示例 (三)
6. Unity開啟篇(六) —— Unity動(dòng)畫簡(jiǎn)介 (一)
7. Unity開啟篇(七) —— Unity動(dòng)畫簡(jiǎn)介 (二)
8. Unity開啟篇(八) —— Unity聲音簡(jiǎn)介(一)
9. Unity開啟篇(九) —— Unity聲音簡(jiǎn)介(二)
10. Unity開啟篇(十) —— Unity粒子系統(tǒng)簡(jiǎn)介(一)
11. Unity開啟篇(十一) —— Unity粒子系統(tǒng)簡(jiǎn)介(二)
12. Unity開啟篇(十二) —— Unity腳本簡(jiǎn)介(一)
13. Unity開啟篇(十三) —— Unity腳本簡(jiǎn)介(二)
14. Unity開啟篇(十四) —— Unity UI簡(jiǎn)介(一)
15. Unity開啟篇(十五) —— Unity UI簡(jiǎn)介(二)
16. Unity開啟篇(十六) —— Unity UI簡(jiǎn)介(三)
17. Unity開啟篇(十七) —— Unity UI簡(jiǎn)介(四)
18. Unity開啟篇(十八) —— Unity UI簡(jiǎn)介(五)
19. Unity開啟篇(十九) —— Unity UI簡(jiǎn)介(六)
20. Unity開啟篇(二十) —— 如何使用Unity制作像Bomberman一樣的游戲(一)
Chain Reactions
當(dāng)一枚炸彈的爆炸觸及另一枚炸彈時(shí)套啤,下一枚炸彈應(yīng)該爆炸 - 這個(gè)特征會(huì)帶來(lái)更具戰(zhàn)略性宽气,刺激性和火力的游戲。
幸運(yùn)的是潜沦,這很容易實(shí)現(xiàn)抹竹。
在代碼編輯器中打開Bomb.cs
腳本。 在CreateExplosions()
下面添加一個(gè)名為OnTriggerEnter
的新方法:
public void OnTriggerEnter(Collider other)
{
}
OnTriggerEnter
是MonoBehaviour
中預(yù)定義的方法止潮,在觸發(fā)器碰撞器和剛體撞擊時(shí)調(diào)用。 名為other
的Collider
參數(shù)是進(jìn)入觸發(fā)器的GameObject
的對(duì)撞機(jī)钞楼。
在這種情況下喇闸,您需要檢查碰撞對(duì)象并在炸彈爆炸時(shí)使炸彈爆炸。
首先询件,你需要知道炸彈是否爆炸了燃乍。 爆炸變量需要先聲明,所以在levelMask
變量聲明下添加以下內(nèi)容:
private bool exploded = false;
在OnTriggerEnter()
內(nèi)宛琅,添加以下代碼段:
if (!exploded && other.CompareTag("Explosion"))
{ // 1 & 2
CancelInvoke("Explode"); // 2
Explode(); // 3
}
這個(gè)片段做了三件事:
- 1) 檢查炸彈沒(méi)有爆炸刻蟹。
- 2) 檢查觸發(fā)器對(duì)撞機(jī)是否已分配
Explosion
標(biāo)簽。 - 3) 通過(guò)丟棄炸彈取消已經(jīng)被稱為
Explode
的調(diào)用 - 如果你不這樣做嘿辟,炸彈可能爆炸兩次舆瘪。 - 4) 爆炸!
現(xiàn)在你有一個(gè)變量红伦,但它還沒(méi)有被改變英古。 在您禁用MeshRenderer
組件后,最合理的設(shè)置是在Explode()
內(nèi)部:
...
GetComponent<MeshRenderer>().enabled = false;
exploded = true;
...
現(xiàn)在一切都已設(shè)置好昙读,因此請(qǐng)保存文件并再次運(yùn)行場(chǎng)景召调。 將一些炸彈放在彼此附近并觀察會(huì)發(fā)生什么:
現(xiàn)在你有一些嚴(yán)重破壞性的火力正在進(jìn)行中。 一次小小的爆炸可以通過(guò)觸發(fā)其他炸彈讓你的小游戲世界著火,允許這些酷酷的連鎖反應(yīng)唠叛!
最后要做的是處理玩家對(duì)爆炸的反應(yīng)以及游戲如何將反應(yīng)轉(zhuǎn)化為勝利或平局狀態(tài)只嚣。
Player Death And How To Handle It
在代碼編輯器中打開Player.cs
腳本。
現(xiàn)在艺沼,沒(méi)有變量來(lái)指示玩家是死還是活册舞,所以在腳本的頂部添加一個(gè)布爾變量,就在canMove
變量的正下方:
public bool dead = false;
此變量用于跟蹤玩家是否因爆炸而死亡澳厢。
接下來(lái)环础,將其添加到所有其他變量聲明之上:
public GlobalStateManager globalManager;
這是對(duì)GlobalStateManager
的引用,該腳本通知所有玩家死亡并確定哪個(gè)玩家獲勝剩拢。
在OnTriggerEnter()
內(nèi)部线得,已經(jīng)檢查過(guò)玩家是否被爆炸擊中,但它現(xiàn)在所做的只是將其記錄在控制臺(tái)窗口中徐伐。
在Debug.Log
調(diào)用下添加此代碼段:
dead = true; // 1
globalManager.PlayerDied(playerNumber); // 2
Destroy(gameObject); // 3
這段代碼執(zhí)行以下操作:
- 1) 設(shè)置死變量贯钩,以便您可以跟蹤玩家的死亡。
- 2) 通知
global state manager
該玩家已經(jīng)死亡办素。 - 3) 銷毀
player GameObject
角雷。
保存此文件并返回Unity
編輯器。 您需要將GlobalStateManager
鏈接到兩個(gè)玩家:
- 在
hierarchy
結(jié)構(gòu)窗口中性穿,選擇兩個(gè)Player GameObjects
勺三。 - 將
Global State Manager GameObject
拖到其Global Manager
插槽中。
再次運(yùn)行場(chǎng)景并確保其中一個(gè)玩家被爆炸消滅需曾。
每一個(gè)阻礙爆炸的玩家都會(huì)立即死亡吗坚。
游戲不知道誰(shuí)贏了,因?yàn)?code>GlobalStateManager不使用它收到的信息呆万。 是時(shí)候改變了商源。
1. Declare the Winner
在代碼編輯器中打開GlobalStateManager.cs
。
要讓GlobalStateManager
跟蹤哪些玩家死亡谋减,您需要兩個(gè)變量牡彻。 在PlayerDied()
上方的腳本頂部添加以下內(nèi)容:
private int deadPlayers = 0;
private int deadPlayerNumber = -1;
首先,deadPlayers
將保留死亡的玩家數(shù)量出爹。deadPlayerNumber
在第一個(gè)玩家死亡時(shí)設(shè)置庄吼,并指示它是哪一個(gè)。
現(xiàn)在您已經(jīng)進(jìn)行了此設(shè)置严就,您可以添加實(shí)際邏輯霸褒。 在PlayerDied()
中,添加以下代碼:
deadPlayers++; // 1
if (deadPlayers == 1)
{ // 2
deadPlayerNumber = playerNumber; // 3
Invoke("CheckPlayersDeath", .3f); // 4
}
此代碼段執(zhí)行以下操作:
- 1) 添加一個(gè)死玩家盈蛮。
- 2) 如果這是第一個(gè)死亡的玩家......
- 3) 它將死玩家編號(hào)設(shè)置為首先死亡的玩家废菱。
- 4) 檢查其他玩家是否也死了技矮,或者0.3秒后是否只有一點(diǎn)灰塵。
最后一次延遲對(duì)于進(jìn)行平局檢查至關(guān)重要殊轴。 如果你立即檢查衰倦,你可能不會(huì)看到每個(gè)人都死了。 0.3秒就足以確定每個(gè)人是否都死了旁理。
2. Win, Lose or Draw
你已經(jīng)到了最后一節(jié)了樊零! 在這里你創(chuàng)造了在勝利或平局之間選擇的邏輯!
在GlobalStateManager
腳本中創(chuàng)建一個(gè)名為CheckPlayersDeath
的新方法:
void CheckPlayersDeath()
{
// 1
if (deadPlayers == 1)
{
// 2
if (deadPlayerNumber == 1)
{
Debug.Log("Player 2 is the winner!");
// 3
}
else
{
Debug.Log("Player 1 is the winner!");
}
// 4
}
else
{
Debug.Log("The game ended in a draw!");
}
}
這是此方法中不同if語(yǔ)句背后的邏輯:
- 1) 一名玩家死亡孽文,他是輸家驻襟。
- 2) 玩家1死亡,因此玩家2是贏家芋哭。
- 3) 玩家2死亡沉衣,所以玩家1是贏家。
- 4) 兩名玩家都死了减牺,所以這是平局豌习。
保存你的代碼,然后給游戲一個(gè)最后的運(yùn)行并測(cè)試控制臺(tái)窗口是否讀出了哪個(gè)玩家贏了或者它最終是否為平局:
強(qiáng)烈建議您繼續(xù)開發(fā)這款游戲 - 通過(guò)添加新功能使其成為您自己的游戲拔疚! 以下是一些建議:
- 使炸彈“可推動(dòng)”肥隆,這樣你就可以逃離你旁邊的炸彈并將它們推向你的對(duì)手
- 限制可以丟棄的炸彈數(shù)量
- 輕松快速重啟游戲
- 添加可被爆炸摧毀的易碎塊
- 創(chuàng)建有趣的
powerups
- 添加生命或獲得它們的方式
- 用于表明玩家獲勝的UI元素
- 找到一種方法,允許更多的玩家
后記
本篇主要講述了如何使用Unity制作像Bomberman一樣的游戲稚失,感興趣的給個(gè)贊或者關(guān)注~~~