[Unity Script Templates ] 自訂腳本樣板的Keyword
在先前的文章[UNITY SCRIPT TEMPLATES ] 打造專屬的UNITY腳本樣板之中,
有提到如何去自訂 Unity Script Template。
雖然在自動化的流程中已經可以處理掉很多人工coding的作業了,
但還是有稍嫌不足的地方。
本文將會介紹如何讓腳本生成的自動化流程更加完整。
狀況
在撰寫Custom Editor時,都會需要參考到Target Class,
以下方的Template為例,每次建立一個新的Custom Editor都需要去修改圖例中反白的部分。
雖然要更動的部分不多,但是每次都要去修改這種小地方還是覺得麻煩。
( 總之就是還不夠懶 )
像我個人習慣將Custom Editor命名為 Target Class + "Editor",
(ex: MyClass.cs / MyClassEditor.cs)
所以如果有辦法定義一個關鍵字,並且在腳本生成的時候
將對應的 Editor ClassName 置換掉 "Editor" 這個字串就可以了。
最後找到了 OnWillCreateAsset 去完成這個自動化的流程。
原理
首先我們可以參考一下Unity Script Reference
對於 OnWillCreateAsset 的說明。
當非使用者操作而生成資源時,OnWillCreateAsset 就會被呼叫。
所代入的值就是該檔案的路徑。
有了路徑之後就可以讀取對應的腳本檔案,
並且將設定好的關鍵字置換成我們想要的字串。
接著說明實作的部分,沒時間了快上Code!
順便示範一下成果,下圖是一個自行定義的Script Template,
在這個樣板中使用了 "#TargetScriptName#" Keyword。
從影片可以看到 #TargetScriptName# 在腳本的生成中
自動轉換成對應的Class Name了。
筆記
因為 Unity 的 Script Template 沒辦法參考到其他對象,
因此可以透過自行定義 Keyword,去執行額外的處理。
除了 OnWillCreateAsset ,也可以參考一下 AssetModificationProcessor 所包含的 API。
Unity Script Reference - AssetModificationProcessor
透過這些API來監控資源的狀態變化,並且不侷限在程式腳本上面的話,
一定還有更多可以使用的地方。
參考來源:
Unity Script Template - Keyword Replacer
有提到如何去自訂 Unity Script Template。
雖然在自動化的流程中已經可以處理掉很多人工coding的作業了,
但還是有稍嫌不足的地方。
本文將會介紹如何讓腳本生成的自動化流程更加完整。
狀況
在撰寫Custom Editor時,都會需要參考到Target Class,
以下方的Template為例,每次建立一個新的Custom Editor都需要去修改圖例中反白的部分。
雖然要更動的部分不多,但是每次都要去修改這種小地方還是覺得麻煩。
像我個人習慣將Custom Editor命名為 Target Class + "Editor",
(ex: MyClass.cs / MyClassEditor.cs)
所以如果有辦法定義一個關鍵字,並且在腳本生成的時候
將對應的 Editor ClassName 置換掉 "Editor" 這個字串就可以了。
最後找到了 OnWillCreateAsset 去完成這個自動化的流程。
原理
首先我們可以參考一下Unity Script Reference
對於 OnWillCreateAsset 的說明。
當非使用者操作而生成資源時,OnWillCreateAsset 就會被呼叫。
所代入的值就是該檔案的路徑。
有了路徑之後就可以讀取對應的腳本檔案,
並且將設定好的關鍵字置換成我們想要的字串。
接著說明實作的部分,沒時間了快上Code!
/************************************************** * Description * 將 Template Keyword 轉換成自定義的字串 * * Usage * 將此腳本放置到任意一個 Editor 資料夾底下 * * Keyword * #TargetScriptName# **************************************************/ using System.IO; using UnityEditor; using UnityEngine; public class CSharpTemplateDetector: UnityEditor.AssetModificationProcessor { // 非使用者操作而產生資源時將會呼叫此函式,eg. ".meta" 檔案 // 需使用 static 修飾詞 static void OnWillCreateAsset(string path) { // 移除.meta extention字串 path = path.Replace(".meta", ""); // 檢測路徑的副檔名 if(Path.GetExtension(path) != ".cs") { return; } // 取得腳本路徑 var index = Application.dataPath.LastIndexOf("Assets"); path = Application.dataPath.Substring(0, index) + path; // 取得腳本名稱 var fileName = Path.GetFileNameWithoutExtension(path); // 轉換關鍵字 var file = File.ReadAllText(path); ReplaceKeyword(fileName, ref file); // 覆寫檔案並重新整理資源 File.WriteAllText(path, file); AssetDatabase.Refresh(); } // 轉換關鍵字 static void ReplaceKeyword(string fileName, ref string script) { // 將原檔名的 "Editor" 置換為 "" ,再將此字串取代 "#TargetScriptName#" script = script.Replace("#TargetScriptName#", fileName.Replace("Editor", "")); } }
順便示範一下成果,下圖是一個自行定義的Script Template,
在這個樣板中使用了 "#TargetScriptName#" Keyword。
從影片可以看到 #TargetScriptName# 在腳本的生成中
自動轉換成對應的Class Name了。
筆記
因為 Unity 的 Script Template 沒辦法參考到其他對象,
因此可以透過自行定義 Keyword,去執行額外的處理。
除了 OnWillCreateAsset ,也可以參考一下 AssetModificationProcessor 所包含的 API。
Unity Script Reference - AssetModificationProcessor
透過這些API來監控資源的狀態變化,並且不侷限在程式腳本上面的話,
一定還有更多可以使用的地方。
參考來源:
Unity Script Template - Keyword Replacer
留言
張貼留言