這幾天都在搞這玩意兒
上周又繼續推專案了,更新了新的裝備界面,另一邊有發文可以去看噢
【山鴉行動】- 27 年度總結,獨立遊戲開發Q & A總之大部分都只要換上資源就好,有動到程式的只有一點點,要把文字色加回 text 裡面。Unity 的 ui text 是可以使用 css 和 html 標籤的,雖然實際支援的標籤不多啦,但如果要上色、粗體或改大小什麼的都蠻方便的,叫做 rich text,可以給 text 的特定段落添加效果。
雖然說這樣相對好幾個 text component 去拼輕鬆,但實際在編輯文本的時候還是有點繁瑣,可能只是要改文本裡 highlight 的顏色什麼的,就要改動整個原始文本。
所以就想說能不能換種作法搞,弄一個中繼的系統可以把自訂標籤轉換為 rich text,就能省一些作業了。最後還是用令牌化的那套,有夠方便
建立標籤資料夾右鍵 > create > TagableTexts > PatternToken 就能建立出一個標籤定義令牌了。
標籤定義
設定這個標籤的關鍵字以及輸入模式。輸入模式指的是這個標籤的輸入是什麼 <keyword input/>,當然也可以不接受輸入,後面會說到。然後最後會打包成一個 Regular expression,方便後面的動作。
命名錯誤,應該叫 input rule 的
輸出設定
這裡就是設定檢測到標籤後要做的動作,基本上就是設定要把標籤的內容替換成什麼而已。我用 reorderablelist 方便編輯替換內容,然後也可以設置 Tag Input 去存取標籤的輸入。
輸出預覽
我也在 inspector 上加了簡單的效果預覽,可以看到標籤替換過後的輸出,以及 rich text 的效果長怎樣,這樣就不用在另外測試標籤有沒有效了。預覽有三種模式,自動、自訂和文本輸入,就是方便測試用而已。
調用方法對外的接口主要就是 ApplyToText(strig input) 和幾個多載而已,把要檢測的文本輸入進令牌就好。像這樣
至於多載的 Func<string, string, string> replaceHandler,可以覆寫替換規則,把要替換的算法傳進去就好。有有興趣就自己翻原始碼的 tagOutputDefine.DefaultReplaceHandler 研究ㄅ。
然後 Action<string> inputListener 是標籤監聽,在文本檢測的時候如果檢測到對應的標籤就會觸發,用來做一些進階動作。
可以像是這樣檢測到關鍵字時,出現補充文字。
又命名錯了,叫 onTagDetected 好像比較好 D:
打包就是把幾種不同的 tag token 打包起來,能在 apply 的時候一口氣作用,但相對就不能覆寫規則或是添加監聽了。
檔案上傳到 github,有興趣的可以用用看,用這個系統的話就能夠預先定義好簡化的標籤,要修改實際效果也只要動到 token 而已,能省去一些編輯文本時的繁瑣作業。但這只是一個中繼的系統而已,所以它沒辦法獨立運作,前後還要看你們怎麼搭配ㄌ。
想翻 editor code 研究的也可以,架構應該整理得蠻乾淨的了,但我沒有註解的習慣,所以請自己通靈吧 :P
總之,有什麼建議或 bug 都請說吧,有空就會更新這系統,待做清單還長長一條的。
就醬,又要新年ㄌ...