閒聊
最近因為拿到免費三個月XGP,趁這個機會玩以前想玩還沒買的遊戲。
目前挑戰《Tunic》中。畫面漂亮,戰鬥有點難度。探索的感覺做得不錯。
畫龍點睛的特色是他的說明書設定。
動物受傷的情況
專案目標是要做射擊遊戲,我開始思考如何在動作中加入受傷的情況。
單純播身體變顏色的受傷動畫很簡單。
只是我想加入受傷動作。例如遠離攻擊的人。
對我來說就變得有點複雜。
吃草或走路途中受到攻擊,切換到受傷的分支。
但我是用TimeLimiter去控制吃草或走路,所以會持續固定秒數,需要刻意中斷它。
目前我的解法是在血量變化時,中斷行為樹同時設定變數 hurt 為 True。
因為變數是True就會進入受傷的分支,開始走路。
可以看影片中的展示,我有射幾下動物。
動物一受到攻擊,馬上會開始走路。
這是我現在能想到的解法,如果有其他更好的寫法,歡迎在底下留言。
日夜變化
一樣又是這個影片可以看到現在遊戲有日夜變化。
雖然只是簡單的透過畫面改變顏色,但我覺得效果還不錯。
至於作法是參考以下這個影片。
簡單說就是用 CanvasModulate 改變畫面顏色。
搭配 Gradient 漸層的顏色,去呈現日夜變化。
作者有提供專案範例,不難只是要稍微想一下。
尋路回家
接著想要讓動物們晚上後回到飼育小屋。
利用剛剛建立好的日夜系統,判斷晚上的時段。
進入晚上後,動物們開始往小屋走。
到達定點後,GoHome會變成回傳FAILURE,開始SLEEP。
影片看起來像是動物進屋子,實際上我只是把它們的 visible 改成 false。
等到白天開始活動,再重新把 visible 改回 true。
因為場地裡有池塘這個障礙物,我嘗試另一項新東西。
利用 NavigationAgent2D 試著讓動物可以繞過障礙。
剛開始的障礙 get_next_path_position() 不清楚用法。
我不知道影片中為什麼還要用 to_local(),我跟著用卻有問題。
因此我用出那一千零一招 print(get_next_path_position()),看看它到底是什麼。
才知道它是直接回傳下一個移動地點 global_position。
to_local() 則是因為它的 script 掛在母節點腳色上面,
所以直接把移動地點轉為local_position就好。
而我是在底下的子節點,而且 Node 連 to_local() 這個 func 都沒有。
只要知道問題就有解法,用腳色位置減移動目標得到方向。
至少可以正常移動了。
但接著又遇到的問題是會被障礙物卡住。
我有先照著影片調成底下的設定。
改成 Floating 和 0 度。
但是它還是會卡到,這時我靈機一動。
把動物的碰撞改為橢圓形,一切都順了。
基本上就不會被卡住。
結尾
現階段在行為樹的測試和練習,我覺得算是告一個段落。
以練習為目的的專案,希望保持在小而美。
花太多時間做得很複雜,不劃算。
接著準備在現在的資源下,加入射擊要素了。
不行就改成牧場遊戲。