利用PrefabUtility API規範Prefab製作

在Unity開發過程中,會有很多需要大家自覺遵守的「製作規則」。

這裡以UI的Prefab為例,分享一個規範Prefab製作的方法。

在UI的Prefab製作中,我們會有一些類似這樣的規範要求:

  • 粒子特效必須動態載入,不能直接掛在Prefab里;
  • 動態載入的大圖不能直接掛在Prefab上;
  • 文本字型大小符合規範;
  • ...

這些規則並不難理解,也不難執行,但本身規則比較細節,容易遺漏。且隨著團隊人員流動,這些規則很難被100%地完美執行。

如果用人為檢查的方式去規範,又耗費人力。因此,就想到希望有工具能自動檢查Prefab的製作是否符合規範,自動修改並給出報錯提示。

PrefabUtility是一個靜態類,主要用於進行Prefab的相關處理。

這裡利用PrefabUtility.prefabInstanceUpdated可以監聽Prefab Apply操作,就可以在Prefab Apply的時候進行規範檢查和修改了。

[InitializeOnLoadMethod]static void StartInitializeOnLoadMethod(){ PrefabUtility.prefabInstanceUpdated = delegate(GameObject instance){ if(instance){ ProcessUIPrefab(instance); } };} /// <summary>/// 檢查如果是UI的prefab進行一些處理/// </summary>static void ProcessUIPrefab(GameObject instance){ Object parentPrefab = PrefabUtility.GetPrefabParent(instance); string prefabPath = AssetDatabase.GetAssetPath(PrefabUtility.GetPrefabParent(instance)); bool needCheck = false; foreach(string path in UIPrefabPath) { if(prefabPath.Contains(path)) { needCheck = true; } } if(!needCheck) { return; } bool isChange = ProcessUIPrefab(instance); //具體對Prefab進行操作的方法 if(isChange) { PrefabUtility.ReplacePrefab(instance, parentPrefab, ReplacePrefabOptions.ConnectToPrefab); }}

推薦閱讀:

手游開發如何選擇後端服務
4.加法遊戲——用代碼寫手機親子小遊戲

TAG:Unity遊戲引擎 | 手機遊戲開發 |