iT邦幫忙

2021 iThome 鐵人賽

DAY 7
0

利用Zenject進行架構端的調整是持續性的,有些功能也會因為之前是以Hard Code的方式完成而必需做些微的修正。在此同時,戰鬥系統的實際製作也即將要展開。

戰鬥UI Part02

承接Part01的後續發想,初版的戰鬥版面在設計上如下,玩家按下PA按鈕物理攻擊(Physical Attack)後

會出現瞄準攻擊介面

畫面上方的計時條累積到一定時間後,不論是否有選擇目標,都會進行攻擊。若是要取消攻擊,則需要在累積時間條沒有完成前逕自按下Cancel進行取消動作。也就是說在此的設計考量預設行為是一但按下了物理攻擊就會行動,若是誤觸或是有其它考量,則要自行取消。

為了不讓玩家每次攻擊都要等上一段累積時間(又或是倒數時間)才能攻擊,設計上採用的想法是一但玩家點到了畫面,則攻擊視為要被執行,也就是會直接展開。攻擊有可能是複數的,待玩家玩成所有的點壓動作,又或是時間累積結束,則會展開攻擊。

畫面左下方但在HP條上面的那個暫代為3的UI,則是氣力值,每次解決一隻敵人角色是都會取得一定量,累積一定量後會增加一段。目前UI上顯示是三段,而配合攻擊進行,則會有某些加乘的效果(待後續發想)。

除了物理攻擊外,當然也會有魔法攻擊。實際上玩家控制的角色是被設定成一個不太會用魔法的新手魔法師,魔法的使用勢必是不可或缺的。只是魔法的設計還處於發想階段,為了將複雜度降低到可以製作的階段,大概只會放入最基本的三類型魔法,火、冰和雷(有可能時間因素而改為後補的類型)。

戰鬥實際製作Part01

採用了FP視角,怪物也有前後不一樣的站位,最直覺的方式就是利用Raycast進行。讓站在前面的怪物會被先行受擊,而站在後面的怪物則會等到前面怪物被排除後,才能被攻擊到。實際上,一但利用了Raycast,加進貫穿這樣的攻擊,不論前後排都會受到攻擊也變得可行。

機制本身很單純,不過加上了玩法之後規則就變得有些複雜了。首先是能攻擊到的範圍要納入考量,比方說手中的武器只能攻擊一格,自然地是指前方一格,這時利用Raycast,會進行其距離限制。而Raycast會有碰到複數敵人,單一敵人和沒有任何敵人的可能性。

複數和單一敵人處理的方式,在沒有貫穿的考量下,直接拿取最接近Raycast的一個。而沒有任何敵人的情況下,必需表現出攻擊Miss的提示。

為了要能夠利用Raycast,要先進行不少前置作業,首先是要能夠利用Touch進行點選。找到了這篇文章討論了EnhancedTouch API,之前沒有試過,趁這時來了解怎麼使用。

如果利用Input System,設定Event System是很重要的一環

Finally, change Pointer Behavior to Single Unified Pointer.

雖然用了EnhancedTouch API拿取按下的點並送到VS端,但目前不明原因導致會有多個點資料在同一個Update送到VS端(可能有些設定沒有注意到)。

先暫時拿到這些點後利用ScreenToWorldPoint轉成World並產生暫代的方塊看其位置

在場景裡看到的方塊

有了這些方塊後才能正式的利用Raycast。也就是會利用Raycast穿過這些方塊所代表的中心點。

補充資料

如果不是用EnhancedTouch,可以用New Input System裡的Touch,又或是直接利用uGUI。事實上,EnhancedTouch有些使用上的不熟悉所造成的bug,若一直沒有找到問題,很有可能會調整成New Input System給的Touch。


上一篇
Dungeon Mizarka 006
下一篇
Dungeon Mizarka 008
系列文
FPS dungeon crawler game devlog30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言