編輯嚴選
【Turret vs Tank】場景配置到角色部署

2019/07/31閱讀時間約 11 分鐘
在這個遊戲的workshop中,看到一個【Aqua Defense】,訂閱下來小玩了一下。除了一直有奇怪的重複音效以外,大致上完成度算是夠高了。基本上這就是一個【Plants vs Zombies】規格的作品,不過它沒有向日葵這種單位可以生產錢幣,而是定時生產,剩下的就是其他單位不同而已。
如果沒玩過【Plants vs Zombies】的,可以看一下這段影片
既然是【Plants vs Zombies】,是我玩過很不錯的塔防遊戲,想說第一個挑戰遊戲就來做一個PvZ like的遊戲吧。GameBuilder裡很適合一些能”發射”東西的設計,不然就來個”砲台對坦克”吧。

場景配置

首先當然就是先透過「5-TERRAIN」等相關功能,把我們的場景先畫出來,擺上要保護的電腦主機,大致上像這樣:
簡單就好,和PvZ一樣就5條路囉!
雖然這個遊戲應有固定視角,不打算讓玩家可按「v」可以切換視角,甚至還可以跑來跑去,但我們可先不急著設定主角的攝影機及行動能力,這樣在佈置場景或觀察問題上會比較方便。不過主角身上確實有一些卡片或面板用不上可以拿掉,最後大概會用上的只剩這些:
主角可以跑來跑去,可以跳,不需要拿東西丟東西,本來死掉會從重生點復活,我們的規格基本上就是「遊戲結束」了,所以就把「HEALTH/At Death」區段的卡片換成了「Game over !」。

結束條件

(也許有的讀者會覺得很奇怪,不是應該由那5個主機全滅來結束遊戲嗎?關主角什麼事呢?因為反正主角橫豎都是要放在那裡,不然就把它的面板和卡片拿來用好了。)
那5台主機,請記得要用複製第一台的方式來貼上另外4台,這樣系統就會把那4台視為是第一台的同類物件,然後我們就可以只設定第一台的行為,套用到其他4台。
要確認其他的主機,都是「mainframe」的同類品(copy)哦!
接下來就是主機的行為,其實很單純,只要在被敵人攻擊時,自爆加扣血就行了:
碰撞卡片的設定,可透過「Actor with tag...」的設定,達到我們要的規格:
就是這個,屆時在做敵軍這一塊時,只要記得把所有的敵軍都加入「enemy」這個tag,就可以設定不管是哪種敵軍碰到主機都會條件成立。
「Cause Damage」卡片要做的設定,則是讓它去扣主角的血,這樣就可以利用主角來判斷是否要結束遊戲囉:
「Explode」這張卡片,只是因為它很方便符合我們需求而選用(有爆炸粒子及音效)。若你有其他的效果需求,當然也可以自己組。

定時補給

在PvZ中,即使沒有養向日葵,也會在一定時間後補一些太陽給玩家,讓玩家至少能買向日葵,才有後續的其他植物可用,在一個砲台及坦克為主題的遊戲中,「補給機」就很適合這樣的角色,所以我們就來加入這樣的角色吧。

補給機

當然,內建的Model並沒有直升機這樣的東西可以馬上加入,我們可透過「1-CREATE/OBJECTS FROM WEB」下去搜尋。由於我用”transpoter”並沒有找到什麼東西,只好把範圍放大點,用”helicopter”關鍵字找到了一台看上去還順眼的直升機。
就決定是你了!
補給機的規格很簡單,我希望一定秒數後才能出來,然後固定投下幾個寶箱代表補給品,然後離場,大致上就像這樣:
因此,我們可以把補給機部署在場上,然後開始設定它的行為。這裡會用到的面板是「MOVEMENT」及「TIMER ACTION」:
「TIMER ACTION」是一個定時器的概念,時間到時執行你放進去的卡片,而「Repeat」屬性表示要不要重新計時(當然就會重新執行卡片),左上角那個「Spawn Actor」要創建出來的就是補給箱,每2秒放一個。而右下角那個當然就是設定補給機何時該退場。大致上跑出來的感覺像這樣:
補給機假想結果(實際上是做好的結果)
運輸機本身的行為驗證沒問題的話,我們就可以先讓它「OffStage」去了,因為它不是需要一開始就在場上的,而是需要一個創建點決定何時要把補給機創建出來。所以這裡我們就很簡單的,就隨便丟個方塊上去就行了(反正這不是要給玩家看的)。把方塊擺到你打算創建補給機出來的地點後,接下來就是設定它的行為:
Repeat 20秒,這就看遊戲規格了。而「SpawnActor」當然就是來創建我們的補給機了:
「supply_helicopter」就是我們剛剛設計好的補給機,記得去「OffStage」那區選。到此為止,若一切設定都正確,應該就可以看到剛剛的「補給機假想結果」的影片效果囉!

補給箱

反正主角已建好分數系統,我們就直接把分數當作錢來用吧。模型部分也不用費心了,就用內建的那個寶箱代替就行囉:
而它的行為也不複雜,就是點它會加分數,太久沒點要自我銷毀,就像這樣:
19秒會閃紅色警告,第20秒就會自我銷毀囉。比較需要注意的是那個「Score Point」的內容:
要記得「Override who scores」,要加的是主角(Player1)的分數。

角色平台

選取功能

如同PvZ一樣,我們準備加入2個角色,一個是生產補給箱的,一個是最基本的單發砲台。在「1-CREATE/Items/」有一個「Frisbee」長得還蠻像平台的,不然就選它吧。
然後我們再用對講機(walkie)和砲台(turret)去搜尋可用模型,找一些不錯的模型下來:
大致上擺一擺就像下圖:
圖中這兩個角色平台,左邊(物件名叫「unit_model_pad」)的是我們要設定行為的,右邊則是左邊的同類品(copy),也就是說,我們打算讓這些角色平台擁有一樣的行為,這樣在新增新角色(平台)時,才能保證它們的行為是一致的。
對於這個平台,我們要做到的規格是這樣的:
  1. 游標點它一下,會持續閃爍紅色(selected),表示若要部署單位到場上時,是部署什麼單立上去。若同時有其他的平台正在閃爍紅色時,就要取消其狀態,表示現在改選我剛剛點的那一個。
  2. 在閃爍紅色時點它一下,就不會再閃爍了,表示此時我點擊場上任何一個位置時,不會被當做是要部署單位上場。
  3. 有一個方法可供其他物件清除該平台「閃爍紅色」的狀態。例如當部署單位到場上完成時,就讓該平台回復原狀態。
以下是我們需要的卡片,這邊就比較偏程式的邏輯了:
  • 「A」面板中,我們這裡並不直接判斷「是否有點擊」這樣的條件,而是統一以一個變數(變數名為「selected」)來判斷現在是否需要紅色閃爍表示選取中。因為能夠決定這個狀態的來源會有兩個以上,甚至是來自於其他的物件
  • 「B」面板中,我們若聽到指定的訊息(clear_unit_pad_selection),就把「selected」設成0,這樣「A」面板就不會再執行「Flash Red」的卡片。
  • 「C」面板很簡單,就是初始化的動作,直接把「selected」設成0。
  • 「D」面板就是我們要的動作了:若玩家點了這個面板(ActorClicked),且不是在已選擇狀態(selected == 0),就把selected設為1,讓「A」面板去負責變色
  • 「E」是「D」的反向,若點了面板,但是在已選擇狀態,就把selected設為0,「A」面板就不會再執行「Flash Red」的卡片。

選取狀態管理

由於我們最終可是要把角色部署在場上的,而平台只負責顯示自身的選取狀態,只知道自己有沒有被選取。因此我們需要有另一個物件來判斷這些平台的選取狀態,並提供「最終玩家選取的是哪個角色?」這樣的資訊,才能正確的部署上玩家想要的角色。
因此,我們和補給機的作法很類似,我們丟了個方塊(unit_selection_manager)放在角色平台旁,給它如下任務:
  • 在左面板,我們要判斷第1個角色的平台是否有被選取,是的話我們把玩家最終要部署的角色種類(selected_unit)設定為1,而且要把第2個角色平台的selected設為0,這樣才能做到同時間只有一個平台是selected的。
  • 右面板和左面板類似,只是改判斷第2個角色平台,把第1個角色平台的selected設為0的差別。
剛剛提到「把第2個角色平台的selected設為0」這件事,一樣是「 Change Variable」做的,只是要選一下參數:
設定正確的話,我們應該可有這樣的效果:
影片中,同一個角色平台我點了2次,第2次就會取消其「selected」狀態。而當我點了另一個平台時,原平台的「selected」狀態也會被取消,換成新平台被「selected」了。

部署角色

在把角色平台也設定完之後,我們已經可以知道玩家想要部署哪個角色了,接下來就是真的部署到場景上囉。GameBuilder很奇怪的是並沒有提供「TerrainClicked」這樣的卡片(只有「ActorClicked」),所以我們要讓玩家可以把角色部署上場景,我們得在地板上放個Actor上去給玩家點。
因此我們就直接創建一個小板(透過1-CREATE/SHAPES/PrimitivePlane)放上去,並且將它的「Hide in play mode」勾選起來,就可以不在遊戲中看到它,但仍然可以透過它來處理部署的事情囉:
和之前的設計流程一樣,我們也是把這塊的行為都設定好,然後再複製貼到所有可部署的位置上就行囉。它的行為並沒太複雜:
先說上面那個「IF THEN」面板。在「If:」區有4個條件同時成立才會執行「Then do:」區的卡片。
其中有兩個「Variable Is...」卡片,左邊那張卡我們用來檢查這位置是否已部署過任何角色:
和之前的設計邏輯一樣,我們並沒有預先宣告過有這個「deployed_unit」變數存在,因此它一開始就是0。而右邊那張卡則是用來判斷現在要部署的單位是哪一個:
就像之前的設定一樣,我們是去問「unit_selection_manager」的「selected_unit」這個變數是否為1,是的話我們就知道要部署「supplyer_unit」物件上去。
在「Then do:」區中的「Score Point」是做什麼用的呢?當然是扣錢啦,買單位要付費的。本來「Score Point」是用來加分的,但其實它當然也可以用來扣分:
看「supplyer_unit」要多少錢,這邊輸入進去就是了,但是要記得扣「Player1」的分數就是了。
最後那個「Change Variable」,當然就是記得要把自己的「deployed_unit」設成非0的值,在這裡我們就直接照角色編號給個1就行囉。
搞懂上面那個「IF THEN」面板的話,下面那個就依樣畫葫蘆就行了,只是「deployed_unit」設定的值不一樣,「SpawnActor」出來的物件不同囉。
這個部署角色區測試行為差不多都正確時,就可以複製貼上到整個場景區囉:
複製的時候,可選1個貼1個,選2個貼2個,選4個貼4個依此類推,雖然看上去要貼的數量很多,但其實真的貼起來很快。
若一切順利,到目前為止的進度,大致上就是會看到這樣的效果囉:
為什麼會看到廣告
Google實驗室Area120釋出了一個「製作遊戲」的遊戲叫「Game Builder」。 主要的用戶是遊戲編導,方便他們以拖拉卡片的型式來驗證遊戲性好不好。 因此這個專題就是「Game Builder」的"真心話(好用難用都會說)"和"大冒險(真的來挑戰看看能做什麼遊戲)"囉!
留言0
查看全部
發表第一個留言支持創作者!
從 Google News 追蹤更多 vocus 的最新精選內容