[遊戲製作進度] [大型專案:BK MOD] ~EP.04~ 各種細節微調與招式初步製作


上一篇:

[遊戲製作進度] [大型專案:BK MOD] ~EP.03~ 各種哩哩摳摳的功能陸續上菜嘍
https://hcyang1227.blogspot.com/2023/05/bk-mod-ep03.html


下一篇:

[遊戲製作進度] [大型專案:BK MOD] ~EP.05~ 好好地豐富遊戲基礎設定吧
https://hcyang1227.blogspot.com/2024/04/bk-mod-ep05.html

遊戲名稱:BK-MOD(V0.0.19)
遊戲類型:未知
發表日期:2023/06/03

遊戲雛型下載點:
https://drive.google.com/file/d/1-1cGHP3VKe5Z_gREePBU8KBCey3oxmg3



  為了畫面上好看以及兼具功能性,這次調了很多遊戲細節,以下會一一的作介紹(*´▽`*)

★HP條、KP條、PP條完成


  被攻擊會扣HP,奔跑或使用招式會扣KP,用招式也會扣招式點數PP,這是之前「拯救貪吃老人大作戰」就承襲下來的戰鬥系統,小弟希望可以繼續將這套系統延續到這次的作品。

  要顯示角色的HP、KP等狀態,就需要一個長條來顯示,不過當時「拯救貪吃老人大作戰」因為視窗比較小,能夠塞的空間有限,所以HP條很短,看起來角色很短命(誤。自從玩過魔物獵人,看到那條長長的HP血條(接近螢幕寬度),讓小弟覺得血條要長一點,看起來比較爽。因此這次的遊戲也將HP上限從原本的999提高到9999,血條長到可以撞破螢幕(到底。

  除了HP條、KP條改成細長狀的長條以外,PP條也是一個頭痛的地方。當時「拯救貪吃老人大作戰」也是用短短的條狀物件來顯示,但是畫面看起來頗擠,所以小弟當時還作了個伸縮平台,按一下按鍵拉出PP條,再按一下按鍵縮回PP條,很智障(。A。)。所以,這次用Unity裡面的功能,將招式改為順時鐘填充圖塊,這樣不但可以塞最多7個招式的PP值,還能清楚顯示目前PP值的數量跟比例,可說是一舉兩得。


★讀取進度條畫面完成


  因為專案越做越大,讀取場景(Scene)的時間也越來越長,讀取關卡的時間甚至會需要花費5~10秒鐘,這對遊戲體驗來說是個硬傷。因此,這需要一個讀取進度條的畫面幫忙,讓玩家覺得遊戲有在跑。所以小弟找了網路上的資源,發現這個功能也可以用StartCoroutine和IEnumerator來實現,很開心的就直接用了,然後就踩坑踩了一個晚上(メ ゚皿゚)メ

[1] 巴哈姆特 - 【Unity】Loading 畫面
https://home.gamer.com.tw/creationDetail.php?sn=3836196

  略過踩坑的過程,最後敲板定案的程式碼如下,供各位做參考。程式碼不像上述巴哈姆特的那篇文章將StartCoroutine放在Start()裡面,而是在讀取完"Loading Scene"後才在Scene的Update()的第0.5秒執行StartCoroutine,是因為小弟發現不用後者的方式做的話,在測試時根本看不到讀取進度條,畫面一樣卡死5~10秒鐘才變到目標場景,體驗極差。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
using System.Collections;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class Loading : MonoBehaviour
{
    public Image LoadingImg;
    private bool callOnce = false;
    private float beforeLoadTm = 0.5f;
    void Update()
    {
        if (beforeLoadTm > 0f)
            beforeLoadTm -= Time.deltaTime;

        if (!callOnce && beforeLoadTm <= 0f)
        {
            callOnce = true;
            StartCoroutine(DisplayLoading(GlobalVariable.LOAD_SCENE_NUMBER));
        }
    }

    private IEnumerator DisplayLoading(int screenNum)
    {
        float displayProgress = 0f;

        //Load BG
        AsyncOperation async = SceneManager.LoadSceneAsync(screenNum);
        async.allowSceneActivation = false;

        while (async.progress < 0.9f)
        {
            while (displayProgress < async.progress)
            {
                displayProgress += 0.01f;
                SetLoading(displayProgress);
                yield return new WaitForEndOfFrame();
            }
            yield return new WaitForEndOfFrame();
        }

        if (screenNum == 3)
            GlobalVariable.LOAD_SCENE_BGM_FADE = true;

        while (displayProgress < 1f)
        {
            displayProgress += 0.01f;
            SetLoading(displayProgress);
            yield return new WaitForEndOfFrame();
        }

        async.allowSceneActivation = true;
    }

    private void SetLoading(float percent)
    {
        LoadingImg.fillAmount = percent;
    }

  其他的細節,比如說async.allowSceneActivation,原本聽ChatGPT的建議,以為這個用法造成畫面卡死,後來繞了一大圈排除掉上述的問題,才發現是沒問題的。async.progress執行上也確實是正確的,不能盲信ChatGPT的建議,不然小弟現在連這篇文章都打不出來了。

  其他像是進度條Image的填充方式(由左至右),不會很難,就留給看官們自行測試嘍(ノ>ω<)ノ


★完成遊戲開頭設定畫面


  在這個遊戲中可以選擇三種語言,也有背景音樂(BGM)、音效(SFX)、語音(Voice)。把這些功能實作成畫面所示的按鈕跟slider(滑塊),也不會很難,都是用內建的UI物件與內建的顯示圖塊做的,不想花太多時間在美工上(,,・ω・,,)


★完成集氣的光影\粒子效果


  這次的作品中,除了以往作品有用過的光影效果以外,也用了粒子效果(初體驗),畫面中右下角的那個看起來在燃燒的火,就是用Unity的粒子系統做出來的,爽度滿點(。◕∀◕。)


  設定雖然很多,但是把關鍵的幾個設定弄好,其實就好了。小弟弄了幾個設定:Duration、Looping、Strat Lifetime、Start Speed、Start Size、Start Color、Play On Awake、[Emission]、[Shape]、[Color over Lifetime]、[Renderer]。火焰效果的核心在於[Shape]跟[Color over Lifetime]上,火會生成並慢慢往上飄的關鍵在[Shape],火從白色慢慢轉換成黃色、紅色、黑色的關鍵則在[Color over Lifetime],這兩個細節搞定,其他基本上微調到看起來舒服就OK了。如上所述,使用起來爽度滿點。


★完成一半的基礎招式


  沒有錯,才一半而已(=m=) 歸功於之前「拯救貪吃老人大作戰」做太多絕招了,現在要移植起來也是很痛苦...小弟打算先做個一半的基礎招式,然後做一部分的劇情跟關卡,讓遊戲內容比較充實之後,再繼續把剩下的基礎招式移植完。

  以前做得太勤奮了,「拯救貪吃老人大作戰」有基礎招式攻擊、武器攻擊、元素攻擊等等,還有召喚術等各種五花八門的攻擊方式。對現在想做多種遊戲型態的小弟來說,完完全全就是一個累贅啊啊啊(´・_・`)



★各種細節微調與招式初步製作(V0.0.19)

沒有留言:

張貼留言