【Turret vs Tank】敵人設計及配置

更新於 發佈於 閱讀時間約 11 分鐘

上一次我們已經完成了玩家端的部署,接下來就是要有敵人囉。和「Plant vs Zombies」相同,敵人也是分五道過來,不一定會先從哪一道過來,也不一定都會是哪一種敵人會過來。這次的主題就是設計一個簡單的敵人,並亂數的配置它們從不同的方向過來。

最簡單的敵人

這個遊戲叫「Turret vs Tank」,所以我們當然是搜尋看看有哪些「Tank」可以用囉。在「1-CREATE/OBJECTS FROM WEB/」搜尋「Tank」,正好看到一個不錯的最弱的車可以用:

「WartHog」是”疣豬”的意思

「WartHog」是”疣豬”的意思

看起來就是一台很弱的吉普車,好,就用這台吧。

這台疣豬式衝鋒車,我們沒打算讓它有什麼特殊能力,出來之後就是往前衝,想辦法撞毀玩家的單位(砲台或電腦),甚至是寶箱。簡述一下它需要的規格就像這樣:

  • 只有3點血(可因應平衡性調整)
  • 被玩家砲彈打到時會閃紅光,血量歸零時就自爆離場(不會造成損傷)。
  • 只會向前直行
  • 撞到玩家單位會造成1點損傷,然後自己自爆。

上述的規格中,「只會向前直行」應該沒什麼問題,就是來一張「MOVEMENT」面板就可以,而「被玩家砲彈打到會閃紅光…」這個規格,就是用「HEALTH」這個面板來解決:

raw-image

它死掉的時候,為了方便,我們就直接來個「Explode」卡吧,但要記得去把「Damage」設為0,不然就會連帶傷害到其他人:

raw-image

最後就是「撞到玩家單位會造成1點損傷,然後自己自爆」這個規格。很容易理解的是透過「IF-THEN」面板,搭配「Collision Event」來做:

raw-image

這裡需要注意的重點是”玩家單位”這件事。玩家在運行期可能會生成好幾個呼叫器(supplyer unit)或是迷你砲台(mini turret unit),我們又要怎麼指定它們是”玩家單位”呢?

在這裡我們就要使用「Tag」的屬性來做,打開「Collision Event」,我們點開「Collide with what」,就會看到這些選項:

raw-image

這幾個項目是這樣的:

  • Any actor:任何一個碰到的物件。
  • Player:帶有「Player」tag的物件。
  • Actors with tag...:帶有指定tag的物件。
  • Specific actor...:直接選擇指定的物件。
  • Nothing:沒碰到任何物件。

我們將會用到的是「Actors with tag...」,然後把tag設定成「Player」:

raw-image

若我們今天選擇的是「Player」這個tag,其實就跟「Collide with what」選項中的「Player」是同義的,算是一個小技巧。這邊選完了,接下來比較重要的,就是要把我們打算讓疣豬車破壞的單位,都要加上「Player」的tag,就像supplyer_unit:

raw-image

或是「mini_turret_unit」:

raw-image

我目前Workshop的版本是把supplyer_crate也加了「player」tag,這個就看大家需求囉。若設定一切順利,目前的進度看起來應該就像這樣:

在我Workshop的專案中,我還做了一個「Tank」敵人。在這個框架下設計流程和「WartHog」就差不多:怎麼移動,怎麼攻擊,怎麼挨打,怎麼死,最後把它OffStage去…差不多就這些事,這邊就不再特別說囉。

亂數決定出生點

GameBuilder一直有一點很奇怪的設計:沒有「亂數」這種卡片。雖在WorkShop有人做了「Random」這樣的卡片,但我忠於一個「不寫程式」的前提下,為大家介紹怎麼做出亂數的規格。

「不寫程式」這件事我似乎一直都沒特別強調。主要的想法是,若使用這樣的工具還要靠寫code來擴充功能,那我乾脆就直接用Unreal開發就好了,功能更強,還不一定真的需要寫到code。

好,那回題。究竟要怎麼”亂數決定出生點”,根本就沒有「亂數」呀?在目前為止的GameBuilder,我們唯一有的「亂數」,就是「隨意逛逛(Wander Around)」這張牌:

這已經是你目前找得到的「亂數」了

這已經是你目前找得到的「亂數」了

所以,我們的「亂數決定出生點」就是:擺一隻隨意逛逛的史萊姆,看到碰到哪一個物件,就決定等等下一個敵人要從哪一道出生。

概念成形之後,我就在最右邊佈置好一些「出生點」,用來讓敵軍出生,然後在場景中找一個地方,佈置好讓史萊姆隨意逛逛的空間,也佈置好5個不同的出生點:

蝸牛那區先不用理它,等會兒會說…

蝸牛那區先不用理它,等會兒會說…

大致上就是這樣,我在左下角畫了塊空間,擺了5個「Collectable Hologram」物件,這對應到右邊的5個敵人出生點。當中間的史萊姆隨意逛逛時,它有可能會碰觸到任何一個Hologram,就可以對應到不同的敵人出生點囉!敵人出生點物件我這邊就命名為「enemy_creator」系列(其他4個物件是複製品,就照GameBuilder自動配置的名字就行了),而史萊姆碰觸到的那5個Hologram就命名為「enemy_spawn_portal」,也是一樣有4個複製品,GameBuilder自動配名。

中間那隻史萊姆就是重點了,我們放進去後,大致上會需要這樣的卡片配置:

raw-image

這裡會需要5個不同的「IF-THEN」面板,每一個都是一個「Collision Event」配一個「Change Variable」。「Collision Event」的內容,就是不同的「enemy_spawn_portal」如何對應到不同的「enemy_creator」的關係,也就是這樣:

  • 第1個「IF-THEN」的「Collision Event」是判斷是否碰到「enemy_spawn_portal」。
  • 第2個「IF-THEN」的「Collision Event」是判斷是否碰到「enemy_spawn_portal-2」。
  • 第3個「IF-THEN」的「Collision Event」是判斷是否碰到「enemy_spawn_portal-3」。
  • …(依此類推)…

那下面的「ChangeVariable」呢?為何不是開始生成敵人呢?因為我們會有2種以上的敵人,又有5個不同的位置,那豈不是要有10種「IF-THEN」?這裡有一個遊戲開發上很常見也很重要的觀念:

要把規格「單元化」,用組合來完成規格,而不是一口氣包山包海的做完,以免失去修改的彈性及擴充性。

所以,我們的「ChangeVariable」就是只做這件事:

raw-image

也就是說,史萊姆的角色只決定下一個敵人要去哪個位置出生,其他什麼事都不用做。

預設的「Wander Around」可能會讓你覺得速度有點太慢,卡片裡有一些參數可以調整。如果你想要某個位置”比較”容易出生敵人,你也可以把特定的「enemy_spawn_portal」弄得大一點,等於它的機率就會大一點。大致上目前設定的結果,就會如下面影片展示的那樣(蝸牛那邊先不用理它,下一段會說):

亂數生成敵人

既然我們可以亂數找位置生成了,那要亂數生成不同的敵人當然就可以如法泡製。所以我們也一樣再找一塊地方,這次放一隻蝸牛,來決定要生成哪一種敵人吧。

raw-image

如上圖,目前我們有兩種敵人,所以就擺個大家機率差不多的位置就行了。 重點也是在蝸牛身上。

在講蝸牛之前,我們倒是應該先決定那5個「enemy_creator」要怎麼生敵人出來。這裡當然還是運用了之前tutorial就介紹過的技巧「ReceiveMessage」。也就是說若它聽到「warthog」就生疣豬車,若聽到「tank」就生坦克。和之前說的原則一樣,它們就別管「亂數」這件事了,「亂數」讓蝸牛來解決。

好,回到蝸牛。它要正式生成敵人,條件就都到齊了:

raw-image

這個「IF-THEN」面板是處理最終要在哪裡,生成哪一種敵人最終的組合處理,所以會有2種敵人 x 5個出生點 = 10個「IF-THEN」面板,

「Collision Event」很單純,就是疣豬車跟坦克兩種而已。而「Variable Is...」則是要判斷剛剛的史萊姆身上的「portal」變數,現在是1~5的哪一個值。最後的「Send Message」才能決定要給哪一個「enemy_creator」送message,寫成文字是這樣的:

  • 若碰到「warthog」,且史萊姆身上的「portal」是1的話,就給「enemy_creator」送”warthog”訊息。
  • 若碰到「warthog」,且史萊姆身上的「portal」是2的話,就給「enemy_creator-1」送”warthog”訊息。
  • 若碰到「warthog」,且史萊姆身上的「portal」是3的話,就給「enemy_creator-2」送”warthog”訊息。
  • 若碰到「tank」,且史萊姆身上的「portal」是1的話,就給「enemy_creator」送”tank”訊息。
  • 若碰到「tank」,且史萊姆身上的「portal」是2的話,就給「enemy_creator-1」送”tank”訊息。
  • 若碰到「tank」,且史萊姆身上的「portal」是3的話,就給「enemy_creator-2」送”tank”訊息。
  • ...(其他依此類推)...

由於面板和所需卡片都是一樣的,只是屬性值不同,所以在編輯上有一個小技巧一定要知道:按著Alt鍵點擊面板時,可複製面板出來哦!這樣就會比較方便了:

raw-image

大致上亂數生成敵人的說明就到此為止了。為了增加一些難度的設定(不要一開始就random到坦克…玩家一定守不住),我又加了一些敵方單位的”價格”設定。蝸牛會一直存錢,但有可能會馬上花掉買疣豬車,也有可能會存夠錢買到坦克。這些都是變數的操作可以完成的事情,這邊我也就不特別說明了。

以下的影片是我目前在WorkShop的成果。當然,這確實會需要經過不少數值調整,才不會難度偏高或偏低,不過這和GameBuilder的使用教學沒直接關係,所以就跳過了:

結論

經過這個遊戲的實作,我必須很遺憾地說,這個工具還有很多可以改善空間,即使是拿來當作prototype的製作工具。

主要的問題當然是在功能上的不足(例如沒有「亂數」,這種事情真的很難理解…),操作順暢度只能算是及格。官方把不少心力投注在API的功能擴充上,我個人認為是方向完全錯誤的。如同我之前提到的,我若真的要寫code的話,再怎麼選也是學Unity,也絕對輪不到GameBuilder。

這個專題目前就到此為止了,沒有意外的話我應該是不會再寫了,除非下次大改版,改到我覺得值得再回頭來玩玩,屆時才會再回來寫囉。





留言
avatar-img
留言分享你的想法!
avatar-img
SharpWriter(周乃宏)的沙龍
34會員
69內容數
Google實驗室Area120釋出了一個「製作遊戲」的遊戲叫「Game Builder」。 主要的用戶是遊戲編導,方便他們以拖拉卡片的型式來驗證遊戲性好不好。 因此這個專題就是「Game Builder」的"真心話(好用難用都會說)"和"大冒險(真的來挑戰看看能做什麼遊戲)"囉!
你可能也想看
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
介殼蟲大軍最近攻破我的城門,大舉入侵我的雞蛋花了,我也不得不添購軍火彈藥,希望能將他們一舉消滅在灘頭上。
Thumbnail
介殼蟲大軍最近攻破我的城門,大舉入侵我的雞蛋花了,我也不得不添購軍火彈藥,希望能將他們一舉消滅在灘頭上。
Thumbnail
《寄生獸:灰色部隊》故事敘述了原本統治地球的人類出現天敵,擁有超高智商和變化自如的偽裝能力的寄生生物的故事。為了對抗寄生生物,特殊應對單位「灰色部隊」以組織和科技的力量,肅清這些「寄生獸」。這場「寄生獸」與「宿主」之間的戰爭,充滿著哲學思考的衝突與殺戮。
Thumbnail
《寄生獸:灰色部隊》故事敘述了原本統治地球的人類出現天敵,擁有超高智商和變化自如的偽裝能力的寄生生物的故事。為了對抗寄生生物,特殊應對單位「灰色部隊」以組織和科技的力量,肅清這些「寄生獸」。這場「寄生獸」與「宿主」之間的戰爭,充滿著哲學思考的衝突與殺戮。
Thumbnail
《貓追耗子,笨豬追貓》Delta,Alpha,Omicron,B.1.617.2(印度變種病毒株),B.1.1.7(英國變種病毒株),B.1.1.529,BA.2.75,BQ.1,BA5,X.BB,…..病毒在前面不斷變種,藥廠在後面追,研製新疫苗,(約需半年)。病人又在後面,接受新疫苗施打(需3個
Thumbnail
《貓追耗子,笨豬追貓》Delta,Alpha,Omicron,B.1.617.2(印度變種病毒株),B.1.1.7(英國變種病毒株),B.1.1.529,BA.2.75,BQ.1,BA5,X.BB,…..病毒在前面不斷變種,藥廠在後面追,研製新疫苗,(約需半年)。病人又在後面,接受新疫苗施打(需3個
Thumbnail
[打怪] 來吧! 來一個打一個 來多少個 打多少個 #人生也像打怪
Thumbnail
[打怪] 來吧! 來一個打一個 來多少個 打多少個 #人生也像打怪
Thumbnail
看來損失HP相對會獲得一些遊戲資訊,再2層就能到出口了!但這層樓的地板...嗯...是全黑的呢!等於是說只要一放技能,地板就會依序往下掉光了!幸好所有蛆蟲已經因為剛剛的圓柱炸藥整個死光。現在只要思考如何在全部會掉落的地板上,跳到往下的樓梯。
Thumbnail
看來損失HP相對會獲得一些遊戲資訊,再2層就能到出口了!但這層樓的地板...嗯...是全黑的呢!等於是說只要一放技能,地板就會依序往下掉光了!幸好所有蛆蟲已經因為剛剛的圓柱炸藥整個死光。現在只要思考如何在全部會掉落的地板上,跳到往下的樓梯。
Thumbnail
陽台綠地裡蝸牛軍團和毛毛蟲的沒有血淚的筆記。
Thumbnail
陽台綠地裡蝸牛軍團和毛毛蟲的沒有血淚的筆記。
Thumbnail
即使是單細胞生物,也有複雜多變的攝食模式。
Thumbnail
即使是單細胞生物,也有複雜多變的攝食模式。
Thumbnail
其實我並不是這麼討厭老鼠,但是為爭地盤,我是冷血的!! 再次回海口宿舍,發現同事們都把房間門檻用磚塊加高, 且滿屋子的尿騷味,晚上睡覺還有啃東西的聲音.... 仔細查看只要是紙箱紙袋塑膠盤塑膠袋沒一個完整的 是的!!!屋子裡有老鼠! 同事們也太慈悲了,竟然與鼠共存,讓其囂張,夜晚客廳廚房都是其遊戲場
Thumbnail
其實我並不是這麼討厭老鼠,但是為爭地盤,我是冷血的!! 再次回海口宿舍,發現同事們都把房間門檻用磚塊加高, 且滿屋子的尿騷味,晚上睡覺還有啃東西的聲音.... 仔細查看只要是紙箱紙袋塑膠盤塑膠袋沒一個完整的 是的!!!屋子裡有老鼠! 同事們也太慈悲了,竟然與鼠共存,讓其囂張,夜晚客廳廚房都是其遊戲場
Thumbnail
蛆蟲不斷叫囂,說蟑螂破壞城市衛生,要盡快屠殺所有蟑螂,還城市一個乾淨的面貌。我身為一個記者,當然不會因為蛆蟲的咆哮聲和臭氣沖天的味道而退縮,而且在我們的鏡頭下,蛆蟲的真面目才能無所遁形,而牠們口中的蟑螂,正是投訴鼠患嚴重,希望政府正視和改善問題的市民。政府無視他們的要求,而且任由鼠輩橫行,現在更用上
Thumbnail
蛆蟲不斷叫囂,說蟑螂破壞城市衛生,要盡快屠殺所有蟑螂,還城市一個乾淨的面貌。我身為一個記者,當然不會因為蛆蟲的咆哮聲和臭氣沖天的味道而退縮,而且在我們的鏡頭下,蛆蟲的真面目才能無所遁形,而牠們口中的蟑螂,正是投訴鼠患嚴重,希望政府正視和改善問題的市民。政府無視他們的要求,而且任由鼠輩橫行,現在更用上
Thumbnail
上一次我們已經完成了玩家端的部署,接下來就是要有敵人囉。和「Plant vs Zombies」相同,敵人也是分五道過來,不一定會先從哪一道過來,也不一定都會是哪一種敵人會過來。這次的主題就是設計一個簡單的敵人,並亂數的配置它們從不同的方向過來。
Thumbnail
上一次我們已經完成了玩家端的部署,接下來就是要有敵人囉。和「Plant vs Zombies」相同,敵人也是分五道過來,不一定會先從哪一道過來,也不一定都會是哪一種敵人會過來。這次的主題就是設計一個簡單的敵人,並亂數的配置它們從不同的方向過來。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News