戰略分析室 - 遊戲開發探究

小功能實作(2) – 發射子彈&蓄力攻擊

「發射子彈」是許多人想到「遊戲」時腦海會浮現的畫面(還是說只有我QQ)

今天就要來討論:想要用Unity實作這項功能,要分成哪些步驟。


本日目標:以「洛克人」為例,實作「發射小子彈」和「蓄力發射大砲」的功能。

廢話不多說,先看示意影片!

p.s 發射的姿勢轉換不是本集的重點,有緣再聊 (我是使用Animator狀態機)

p.s 由於製作成本上的考量(?),我沒有集氣時該有的特效表現,所以看起來會像是在發呆XD


首先,我們可以把發射子彈的動作解析為:

1.按特定按鍵(在本篇中是空白鍵),會在指定的位置(角色的前面)生成子彈物件

2.子彈物件要自動往前方飛行

3.(Optional)若是按著空白鍵超過1秒鐘,子彈會強化為大砲


(1)

在MonoBehavior(Unity的核心class)裡有個語法叫做Instantiate,可以在場上生成物件,

其中一個用法為Instantiate(GameObject, Position, Rotation)

(更詳細的介紹可以參考我這篇文章 https://goo.gl/HhdLLR )

初步的程式碼如下圖:

螢幕快照 2017-08-27 上午2.13.45.png

第18行的Shoot_Pos是為了不要讓子彈從角色身上長出來,而是他前面的位置。

重點提醒:這個Script是掛在角色身上,如此一來第18行的position資訊才不會抓錯。


(2)

第一步驟如果有成功,就會在人物的Inspector裡看到這樣的情景:

螢幕快照 2017-08-27 上午2.16.36.png

其中Bullet、Cannon是要拉子彈的物件進去,這就是我們的下一步。

螢幕快照 2017-08-27 上午2.19.26.png

如圖,如果我們很順利的找到了子彈的圖片,然後把它指定成Script底下的GameObject ….

它就只會是卡在半空中的不明物體而已。

所以!我們要在子彈底下加程式碼。

螢幕快照 2017-08-27 上午2.21.11

這裡就非常容易理解了,子彈誕生的宿命就是要為了往前飛XD,飛行速度可以自己調整。


(3)

前面兩步就已經達到基本要求了,那如果想要更酷炫一點,長壓Space再放開可以射大砲呢?

先來看一下改造過後的程式碼:

螢幕快照 2017-08-27 上午2.52.48.png

創造新的變數來監控「玩家按住空白鍵的時間有多長」

然後判斷該發射小子彈還是大砲。

特別需要注意的是Input.GetKey和 Input.GetKeyUp的運用:

Input.GetKey指的是「從按下按鍵一直到放開的期間」,可以統計蓄力的時間總長

Input.GetKeyUp則是「放開按鍵」的那一刻,判斷蓄力長短要寫在這裡,並且在放開後要把Timer初始化,避免下一次發射子彈會出狀況。

至於大砲(GameObject Cannon)的步驟和小子彈一樣:

創造物件 -> 在物件底下掛子彈飛行的程式 -> 拉進角色的Script底下(Cannon欄位)


截至這裡,基本的程式邏輯都已經完成了,留幾個問題給大家思考:

1.如果想讓射子彈有冷卻時間,要把程式碼加在哪裡?

2.如果「角色可以自由轉向左邊或右邊」,要做什麼修改讓發射子彈不會有BUG?

歡迎大家來留言交流想法或發文,我們下回見啦~~

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s