主題

【Unity x C# x Regex】自製tag語言對話工具 更新init語法,條件式選項、語法優化

賴普拿疼潘志遠趴趴鼠 | 2021-05-23 00:26:34 | 巴幣 1128 | 人氣 233

前言:
記得我最早做的對話系統tag語言工具嗎?   那時候剛學regex,所以最好能做到的就是tag以外都要在「<>」符號前加個「\」(跳脫符號),現在終於做出修改,讓if判斷等arg組可以不用加跳脫符號了!!


示範:

對話腳本:

可以去回顧一下最一開始的regex寫法篇。
差別可以去github比較。

最主要的差別是,最先切割tag的regex改成:
(?:
(?:
<(?<tag>/?\w*)(?<arg> \(? .* > .* \) |[^>]* )>
(?<text>[^<>]*)?
)|
(?<-tag> </ \k<tag>>)+
)

因為arg組「>」運算符號只有在括號內使用,(例) <if ( a>b) >  </if>,所以只要在有運算符號的情況下用別的regex抓就好,上述regex解釋起來是:
\(? .* > .* \)       「( 任何字 > 任何字 )」格式
|     
[^>]* )     任何非>的字

但若在內文text想要打TexTMeshPro的 tag的話,還是要加上跳脫符號,例如:
<l > \<color=red\> Red content text! \</color\> </l>


後記: 我想舊版打<if (a/>b) ></if> 也是可以用,因為/>在後續也會被替換成>




再更:
對應tag:

多了init ("變數"=值) 與 if可以在 opt裡面使用了
init用在初始化變數,跟set的差別只在它只會設第一次,例如這個對話要記錄玩家買了武器或子彈,避免重複購買。

創作回應

悠閒紅茶(冷卻中)
雖然看不懂,但是加油!
2021-05-23 00:45:13
賴普拿疼潘志遠趴趴鼠
謝謝,快樂打程式(´▽`ʃ♡ƪ)
2021-05-23 12:37:43
追蹤 創作集

作者相關創作

相關創作

更多創作