如何使用
先看下效果:
只需要定義單行數(shù)據(jù)結(jié)構(gòu)如下:
就能獲得如下的效果
達(dá)到的效果:
1. 單項(xiàng)配置可以收縮成一行,顯示id和注釋信息方便查找初烘,又能顯示盡量多的信息义桂。
2. 自定義顯示屬性名漱竖,還可以根據(jù)前面的值顯示不同的屬性名。
3. 支持下拉框和數(shù)值區(qū)域限定瑟曲。
4. 由attribute指定這些特性饮戳,不影響代碼邏輯與美觀。
5. 支持運(yùn)行時(shí)修改屬性(這是ScriptableObject自帶特性洞拨,油管上有個(gè)解釋ScriptableObject替代MonoBehaviour的很好的視頻)扯罐。
6. 自動(dòng)生成Editor代碼。
優(yōu)勢(shì)與劣勢(shì)
一般的游戲項(xiàng)目配置數(shù)據(jù)都是csv或xlsx烦衣。借助于Excel工具來(lái)配置歹河,優(yōu)勢(shì)是行列結(jié)構(gòu)明顯。劣勢(shì)是不方便驗(yàn)證數(shù)據(jù)類(lèi)型花吟,不方便添加內(nèi)部數(shù)組結(jié)構(gòu)秸歧,也不方便顯示數(shù)值范圍;而且要編寫(xiě)專(zhuān)門(mén)的代碼來(lái)讀取數(shù)據(jù)(即使能自動(dòng)生成也頗為麻煩)衅澈;依賴(lài)外部工具不方便而且不方便轉(zhuǎn)化為lua這樣的可更新資源键菱。
用ScriptableObject配置這些問(wèn)題都沒(méi)有〗癫迹可以使用C#的反射把任何數(shù)據(jù)類(lèi)型轉(zhuǎn)化為lua配置數(shù)據(jù)方便更新经备。
這個(gè)還是有劣勢(shì)的:如果已有數(shù)據(jù)配置項(xiàng),這時(shí)候又要修改數(shù)據(jù)結(jié)構(gòu)部默,就只能去修改asset文件侵蒙。
實(shí)現(xiàn)方式
這個(gè)借鑒了xlua中生成C#代碼的方式。編寫(xiě)一種tpl文件傅蹂。這種文件是由3中文件片段組成:
1. 普通的文本片段最終會(huì)直接變成C#代碼片段
2. <%=lua_val%>這是lua_val被包裹的賦值片段纷闺,lua_val在lua執(zhí)行時(shí)的值會(huì)直接復(fù)制到C#代碼片段中來(lái)。
3. <%lua_run_code%>(注意沒(méi)有'=')這是被包裹起來(lái)的lua執(zhí)行代碼份蝴。本身不會(huì)復(fù)制進(jìn)C#代碼片段犁功。
依照這種方式寫(xiě)的代碼生成模板,簡(jiǎn)單直觀和最終生成的代碼結(jié)構(gòu)一致婚夫,縮進(jìn)也一致波桩。非常巧妙。
然后通過(guò)反射獲取字段的attribute來(lái)生成Editor请敦。
已發(fā)布在github上镐躲。