分享一個自制 Excel 轉 Unity ScriptableObject 工具

mayoyi發表於2024-06-03

影片演示連結: https://www.bilibili.com/video/BV1Nw4m1q7qt/
資原始檔: https://github.com/asyaB404/ExcelToScriptableObject

上網找了半天都找不到滿意的,所以就自己寫了一個
本人菜鳥一枚,第一次分享自己的成果,有什麼問題或者改進的方式請立即聯絡我

工具包含一個名為ExcelableScriptableObject.cs的抽象類和ExcelToolsGUI.cs一個工具類
使用前先確保抽象類在專案內,工具類和ExcellDll資料夾在專案中的Editor資料夾內
然後在編輯器視窗就能開啟工具了

配置格式為 第一行為欄位名 第二行為型別(支援int float bool string 列舉型別) 第三行為註釋(隨便寫
列舉型別在Excel表的格式為 “Enum.列舉名稱”
列舉型別需要自己提前建立
支援多個Excel檔案,Excel表同時操作

按鈕建立SOBJ的原理是先利用IO流直接寫一個自定義SOBJ類檔案,並繼承ExcelableScriptableObject.cs
自定義SOBJ類的類名取決於Excel表的表名
ExcelableScriptableObject.cs為抽象類,只有一個名為Init(DataRow row)的抽象方法
Init方法作用為根據傳入的excel的資料行來進行sobj資原始檔的資料初始化
然後根據excel表的第一行和第二行作為自定義SOBJ類的欄位和型別同時實現上述的Init方法
Excel表示例圖:

自定義類示例圖:

等待剛剛建立的SOBJ自定義類編譯完成後就能建立SOBJ資原始檔了
而按鈕建立SOBJ對應的資原始檔的原理為,從第四行開始讀取Excel表
然後建立資原始檔的將Excel表資訊行作為引數傳入Init方法,完成sobj資原始檔的初始化賦值並建立

所以你想自己擴充支援其他資料型別(比如sprite)的話可以自己重寫工具生成的SOBJ自定義類中的Init方法
Init(DataRow row)中的row為excel表的資料行,是一個可迭代容器,可以利用row[n].ToString()來得到excel表中資料行的第n+1列的字串
重寫完之後不要再點按鈕建立SOBJ,否則會被覆蓋到之前的Init方法
然後再在工具那裡點選按鈕建立SOBJ對應的資原始檔就會呼叫你重寫之後的Init方法來建立資原始檔

相關文章