補間 到處都是補間
終於成功把舊版的 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 戰中, 感覺在畫面上就顯得有點多餘,新版就改成了能動態啟用/隱藏的樣式。 |
巴哈的表格還是用不太上手
下一個開發的項目會整合到原版的選單介面,細節就留到完成後再發上來吧。