主題

【遊戲開發日誌 #15】HUD重製、巢狀不透明度、文字亂碼效果

サンエックス | 2022-06-18 19:19:01 | 巴幣 5328 | 人氣 161

補間 到處都是補間

終於成功把舊版的 HUD 砍掉重練,銜接上新系統了。
總之,先來個新舊版本之間的對比:

舊版﹞
新版

除了最明顯的配色調整外,主要就是把缺少的功能給補足,以及加上一堆動態補間效果,整個人都變成 DOTween 的形狀了。


◆【巢狀不透明度】
意即會繼承親級物件透明度的功能。

Unity 在預設中,物件的 Transform 結果會受親級物件影響,調整親物件的 scale,子物件在視覺上的 scale 也會跟著變化。
但 Renderer 本身的顏色是沒有從屬關係的,無論是 SpriteRenderer 的 color 或是透過 shader 來呈現皆是。

來假設一個案例,比方說:
一個角色拿著一組劍,兩者各為不同物件,也各有其自身的 SpriteRenderer。

再假設,角色於無敵狀態下會處於近乎透明的狀態,理所當然地,同時劍也應該會變成透明的。
Δ 角色物件 Opacity 25%

隨後,當我們要賦予這組劍一個淡出效果,其不透明度也將從 100% -> 0% 進行過渡。
Δ 只過渡劍本身不透明度的場合

很明顯,只是單純調整其不透明度是不夠的,需要再乘算上其親級物件,也就是角色本身的 25% 不透明度才行。

原理上並不難以理解,不過,上述的例子還是較簡單的場合。
∎ 複數物件
∎ 更複雜親子層級關係
∎ 層級關係發生臨時變動
∎ 層級間存在非巢狀不透明度的項目
∎ 兩組以上的巢狀不透明度共存於同個物件
∎ 不透明度其應用目標的取得
∎ 應用目標的類型不同:SpriteRenderer、Textmesh Pro、ParticleSystem…
∎ 效能優化,較為靜態的物件們不需要額外的層級關係檢查

要思考的面向也是不少,老樣子,怎麼實現才是問題。
這次的 HUD 就有應用上該功能,還是直接丟成果比較快:

基本上所有圖像、文字和粒子物件都附上巢狀不透明度元件了,如此一來在調整任何物件的透明程度時,都會透過物件的層級關係來計算正確的結果。


◆【文字亂碼效果
在呈現完整文字前,除了字元逐一顯示外,亦先產生亂碼再變化為正確字元的效果。
為了讓視覺效果更良好,每個字元只會亂碼成與其同 Unicode 範圍的字元,像是拉丁字母/中文漢字/日文假名等,各自不會亂碼成另一種語言的字元,否則會產生像是文字整體寬度忽長忽短的負面效果。

不過,為了避免真的使用隨機 Unicode 轉換成對應字元,而導致出現連 FontAsset 的 fallback 都不包含的項目,還是乾脆自己準備當初生成 FontAsset 的字元表來當作亂碼使用來得好,畢竟亂碼效果中,如果因為這樣而產生了豆腐反而會顯得更加突兀。
Δ 自訂 Unicode 範圍與其對應亂碼表

※ 延伸參考

◆【HUD重製
大致上拆解幾個群組來演示:
※ 註:建議於闇黑模式下瀏覽

[玩家]
計量條 長寬微調,第三條的長度則會隨遊戲進度變更。
剪影 上了光影,雙主角的切換指標,並另加了一組中立版本。
物品欄 原版照搬,加了顯示物品名稱的功能,可在設定中調整顯示時機。
貨幣欄 當金錢發生變動時的提示欄位,同樣可在設定中調整顯示時機。
稜鏡? 預計新增的遊戲核心系統之一,先做保留。
[環境]
場景名稱 如題
士氣值 框架和數字的大小比例調整
計時器 視場合會用上的功能,正/倒數、暫停和歸零皆有顏色閃爍上的動態差異。
[Boss]
計量條 舊版的 Boss 是常駐顯示的,無論玩家是否處於 Boss 戰中,
感覺在畫面上就顯得有點多餘,新版就改成了能動態啟用/隱藏的樣式。


巴哈的表格還是用不太上手
下一個開發的項目會整合到原版的選單介面,細節就留到完成後再發上來吧。

創作回應

蝦米蟲
2022-06-18 21:39:42
サンエックス
https://i.imgur.com/viqCBu1.jpg
2022-06-19 00:40:32

更多創作