# Unity遊戲開發_2D俯視射擊遊戲 學習日誌  [toc] --- ### v0.0.2 - 模擬手電筒和光線系統 給想發射光線的物件加上 Light2D組件, 在組件內可以調整光線的強度、光線的角度、和顏色等等。 擋住光線的物件可以加上 Shadow Castor 2D組件,讓光線在打到物件時,不會穿透過去。 <iframe src="https://www.facebook.com/plugins/video.php?height=363&href=https%3A%2F%2Fwww.facebook.com%2F100080394639466%2Fvideos%2F778738137216713%2F&show_text=false&width=560&t=0" width="560" height="363" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowfullscreen="true" allow="autoplay; clipboard-write; encrypted-media; picture-in-picture; web-share" allowFullScreen="true"></iframe> ### v0.1 - 新增射擊功能、優化視覺效果 在這次項目,我要著重在遊戲的特效跟打擊感方面, 所以我學了滿多關於粒子系統的功能, 我用粒子系統製作出子彈發射和打到牆上的特效, 再用攝像機晃動增加打擊感, 最後加上槍聲音效。 <iframe src="https://www.facebook.com/plugins/video.php?height=363&href=https%3A%2F%2Fwww.facebook.com%2F100080394639466%2Fvideos%2F253949270477457%2F&show_text=false&width=560&t=0" width="560" height="363" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowfullscreen="true" allow="autoplay; clipboard-write; encrypted-media; picture-in-picture; web-share" allowFullScreen="true"></iframe> ### v0.2 - 移動影響射擊範圍 、 新增換彈功能 **音量注意** <iframe src="https://www.facebook.com/plugins/video.php?height=363&href=https%3A%2F%2Fwww.facebook.com%2F100080394639466%2Fvideos%2F253949270477457%2F&show_text=false&width=560&t=0" width="560" height="363" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowfullscreen="true" allow="autoplay; clipboard-write; encrypted-media; picture-in-picture; web-share" allowFullScreen="true"></iframe> ### v0.3 - 敵人AI模式(狀態機)、優化敵人顯示判定 關於敵人顯示,我是想像是在光線射到敵人時,敵人會顯示,反之則不。 但Unity並沒有提供這種程式,所以只能自己做。 這是我個想法,我使用Unity的一個概念--Ray(射線)。 當角色進人了敵人的警戒範圍時,敵人向角色方向發射Ray, Ray是會穿透其他物件的,但我們可以得到Ray打到了哪些物件, 且它們按照先後順序排列,我們查看Ray碰到的第一個物件, 如果是角色的話,代表兩人之間沒有任何阻擋,敵人可以顯示。 --- 這次是我第一次做敵人AI狀態機, 我把敵人設為四個狀態—停止、 追擊、 攻擊、 返回。 在每一個狀態間的切換和實際運用需要很強大的邏輯, 你必須要對你的項目有很大的了解, 至於敵人的追擊,只是簡單地跟隨角色玩家的位置移動, 如果中間有牆壁, 敵人就會撞牆卡在那邊, 開學後,我針對敵人的追擊做了一些調整。 在Unity3D中, 官方有針對敵人馴鹿做一個組件, 可以讓製作者很方便的調整敵人的AI尋路, 但是在Unity2D方面, 引擎沒有這個尋路組件, 所以我後來在github上找了一個叫 “NavMeshPlus-master” 開源模組。 讓製作者在2D也可以享受到3D的尋路組件, 讓敵人的AI強大了不少, 至少會自動避開障礙物了。 **音量注意** <iframe src="https://www.facebook.com/plugins/video.php?height=363&href=https%3A%2F%2Fwww.facebook.com%2F100080394639466%2Fvideos%2F265434302710578%2F&show_text=false&width=560&t=0" width="560" height="363" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowfullscreen="true" allow="autoplay; clipboard-write; encrypted-media; picture-in-picture; web-share" allowFullScreen="true"></iframe> ### v0.4 - 新增死亡系統、遊戲結束系統 在這次項目我打算想增加一點遊戲中的特效, 讓玩家更有沉浸感。所以我使用粒子效果器製作了流血特效, 它的原理其實就是幾個紅色的圓形往指定的方向飄,移動速度隨時間減少而已, 但畢竟是好久沒有碰荔枝效果製作器了, 要重回之前製作的效果還是需要一段時間習慣一下。 當玩家死亡時, 利用漸入漸出讓畫面漸漸變成白色的, 再慢慢變成黑色的, 更好帶入「遊戲結束」的感覺。 **音量注意** <iframe src="https://www.facebook.com/plugins/video.php?height=363&href=https%3A%2F%2Fwww.facebook.com%2F100080394639466%2Fvideos%2F117563788010189%2F&show_text=false&width=560&t=0" width="560" height="363" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowfullscreen="true" allow="autoplay; clipboard-write; encrypted-media; picture-in-picture; web-share" allowFullScreen="true"></iframe> ### v0.5 - 新增手榴彈、技能系統(未完成) 想做出手榴彈的效果很簡單, 但要增加手榴彈的打擊感和給人的效果才是需要設計過的, 我的想法是這樣: 手榴彈在發射出去時需要有個音效, 延遲爆炸後需要爆炸音效, 且需要使用粒子效果 編輯器製作爆炸特效(一個內煙霧跟一個外煙霧)。 之前製作血液時已經熟悉了粒子效果編輯器, 只需要把爆炸形狀改成圓形, 且調整散射速度和顏色, 內煙霧可以有橙色和灰色增加層次感。 此外, 手榴彈只是三個角色技能中的其中一個, 我後續計劃製作護盾跟偵查彈, 豐富遊戲。 **音量注意** <iframe src="https://www.facebook.com/plugins/video.php?height=363&href=https%3A%2F%2Fwww.facebook.com%2F100080394639466%2Fvideos%2F3094579220850384%2F&show_text=false&width=560&t=0" width="560" height="363" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowfullscreen="true" allow="autoplay; clipboard-write; encrypted-media; picture-in-picture; web-share" allowFullScreen="true"></iframe> ### v0.6 - 新增 武器背包系統、 偵查彈、 護盾 接下來是製作偵查彈跟護盾, 護盾在製作上我希望是玩家投出一枚彈, 在1秒後,他會變成護盾, 可以抵擋一切敵人的攻擊, 一樣要增加打擊感, 讓護盾被子彈擊中時會發射一個擊中特效和音效, 製作完後發現效果蠻不錯的。 偵查彈在投出後過1秒,後會開始偵查, 我製作一個小範圍帶很長的光線,讓他繞著圓周轉, 模擬出影片中偵查的樣子, 在範圍內的敵人生成一個虛擬黃色分身在他們當時的位置, 當然還要加上偵查音效增加臨場感。 **音量注意** <iframe src="https://www.facebook.com/plugins/video.php?height=363&href=https%3A%2F%2Fwww.facebook.com%2F100080394639466%2Fvideos%2F273096648532389%2F&show_text=false&width=560&t=0" width="560" height="363" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowfullscreen="true" allow="autoplay; clipboard-write; encrypted-media; picture-in-picture; web-share" allowFullScreen="true"></iframe> ### v0.6.A - 新增 狙擊槍、 目標追蹤 製作完步槍後,下一把武器我想做狙擊槍。 相比步槍,狙擊槍我給它設定的特色是視野遠、範圍大、傷害高。 在製作中,我突然想到我在遊戲中有設定玩家的可視範圍(手電筒), 但它是一個扇形,我想增加可視範圍的話又不能直接放大, 因為扇形大小是由三個點控制的,且方向不同, 後來我發現這三個點是線性的, 我解了二元一次方程式後得到了這三個點和視角大小的關係式, 再用程式去控制就好了。 **音量注意** <iframe src="https://www.facebook.com/plugins/video.php?height=363&href=https%3A%2F%2Fwww.facebook.com%2F100080394639466%2Fvideos%2F1306650720236239%2F&show_text=false&width=560&t=0" width="560" height="363" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowfullscreen="true" allow="autoplay; clipboard-write; encrypted-media; picture-in-picture; web-share" allowFullScreen="true"></iframe> ### v0.7 - 商店系統 、 遊戲主體架構完成 在遊戲發想初期, 我就打算讓遊戲有一個中途商店功能。 讓遊戲有沉浸感也是這次項目的課題, 所以我在想要怎麼設計商店。 最後我打算讓商店有閃屏操作台的感覺。 想讓操作台的背景可以無限向下動像是理髮廊的旋轉燈一樣, 需要使用組件 ”Raw Image” 再加上程式的編寫就可以實現了。 **音量注意** <iframe src="https://www.facebook.com/plugins/video.php?height=363&href=https%3A%2F%2Fwww.facebook.com%2F100080394639466%2Fvideos%2F280369171153054%2F&show_text=false&width=560&t=0" width="560" height="363" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowfullscreen="true" allow="autoplay; clipboard-write; encrypted-media; picture-in-picture; web-share" allowFullScreen="true"></iframe> ### v0.7.E - 手機也能玩 、新增 回血系統 、 互動物件 : 門 回血系統是遊戲中唯一的治療手段,也是唯一的道具。 這大概是製作中最簡單的系統了,程式部份只要讓生命值增加就好, 重點是回血的特效,這是我對回血特效的想像「綠色的、很多個加號一口氣往上飄」, 當然是很輕鬆就做出來了。 --- 門在遊戲中主要是隔絕敵人和玩家的視角, 讓兩方做準備,等開門時決勝負, 在上次製作商店系統時就有做互動系統, 玩家靠近時畫面上彈出按鈕,按下就可開門(門開的動畫也是用DoTween做的), 門可以被子彈摧毀。 --- 在前10個小時中, 我主要是預設使用電腦的操作方法製作, 像是用鍵盤移動角色、用滑鼠的滑動去讓槍口瞄準, 到手機上後就沒有這些器具了,移動和點擊方面可以製作虛擬搖桿, 但在這次的項目中還多了一項需求 ---- 槍口旋轉,槍口可以360度旋轉, 如果再次使用虛擬搖桿會讓玩家覺得靈敏度太大 很難操控, 所以我打算讓玩家滑動手機螢幕本身, 這是我第一次做這個功能,經過我思考後,我的思路是: 在手指按下時開始記錄,期間持續記錄每幀手指移動的距離, 時刻回傳給角色程式腳本讓它旋轉,直到手指離開,後來製作證明我的思路是可行的。 **音量注意** <iframe src="https://www.facebook.com/plugins/video.php?height=314&href=https%3A%2F%2Fwww.facebook.com%2F100080394639466%2Fvideos%2F2551259635023531%2F&show_text=false&width=560&t=0" width="560" height="314" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowfullscreen="true" allow="autoplay; clipboard-write; encrypted-media; picture-in-picture; web-share" allowFullScreen="true"></iframe> ### v0.8.A - 新增任務系統 任務系統主要分成三個部份 - 第一、Controller,主系統腳本掌控兩個部份: . 任務清單 ,記錄要處理的任務,由第二部份提供 . 任務生成,依照任務的類型(主 \ 副)生成UI物件,UI物件由第三部份控制 - 第二、Data,我為了這次項目製作了任務資料製作編輯器(圖一),可以讓我把每個任務資料用文字的方式方便編輯成一個一個的檔案,而不是用程式的方式編輯(圖二) - 第三、Model,UI物件上也有一套獨立的任務腳本, 如果說主系統是生成和派發任務,那任務腳本就是處理單獨自己任務的執行度。 在任務腳本中,它要先依照任務的類型生成畫面上的指示物, 讓玩家知道自己要如何完成任務。 在任務的完成判斷上,假如是「消滅XX個敵人」這種任務, 因為要計數,所以我在每個Tag是敵人的物件上放一個任務計數器腳本, 當敵人被玩家消滅時,腳本會馬上向任務腳本發送消息,讓它更新任務的狀態。 <iframe src="https://www.facebook.com/plugins/video.php?height=363&href=https%3A%2F%2Fwww.facebook.com%2F100080394639466%2Fvideos%2F229253536658834%2F&show_text=false&width=560&t=0" width="560" height="363" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowfullscreen="true" allow="autoplay; clipboard-write; encrypted-media; picture-in-picture; web-share" allowFullScreen="true"></iframe> ### v0.8.B - 新增 衝鋒槍 **音量注意** <iframe src="https://www.facebook.com/plugins/video.php?height=363&href=https%3A%2F%2Fwww.facebook.com%2F100080394639466%2Fvideos%2F260892020085319%2F&show_text=false&width=560&t=0" width="560" height="363" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowfullscreen="true" allow="autoplay; clipboard-write; encrypted-media; picture-in-picture; web-share" allowFullScreen="true"></iframe> ### v0.9 - 新增 初始場景(可選角色、 查看角色資料) **音量注意** <iframe src="https://www.facebook.com/plugins/video.php?height=363&href=https%3A%2F%2Fwww.facebook.com%2F100080394639466%2Fvideos%2F300584442486747%2F&show_text=false&width=560&t=0" width="560" height="363" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowfullscreen="true" allow="autoplay; clipboard-write; encrypted-media; picture-in-picture; web-share" allowFullScreen="true"></iframe> ### v1.0 - 地圖擴大、 隨機敵人 **音量注意** <iframe src="https://www.facebook.com/plugins/video.php?height=363&href=https%3A%2F%2Fwww.facebook.com%2F100080394639466%2Fvideos%2F2231234833932247%2F&show_text=false&width=560&t=0" width="560" height="363" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowfullscreen="true" allow="autoplay; clipboard-write; encrypted-media; picture-in-picture; web-share" allowFullScreen="true"></iframe> ### v1.1 - 結算動畫 **音量注意** <iframe src="https://www.facebook.com/plugins/video.php?height=363&href=https%3A%2F%2Fwww.facebook.com%2F100080394639466%2Fvideos%2F6933729336647775%2F&show_text=false&width=560&t=0" width="560" height="363" style="border:none;overflow:hidden" scrolling="no" frameborder="0" allowfullscreen="true" allow="autoplay; clipboard-write; encrypted-media; picture-in-picture; web-share" allowFullScreen="true"></iframe>
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up