在上一篇中,通過第八個示例的第三個 MenuItem 方法,我們更新了約定和規則。
我們接着往下整理。
第八個示例的第四個 MenuItem 方法
[MenuItem("QFramework/8.總結之前的方法/4.導出 UnityPackage")]
private static void MenuClicked4()
{
EditorUtil.ExportPackage("Assets/QFramework",Exporter.GenerateUnityPackageName() + ".unitypackage");
}
這個 MenuItem 可以删除了,因為功能已經在第一個示例實作過了。
第八個示例的第五個 MenuItem 方法
[MenuItem("QFramework/8.總結之前的方法/5.打開所在檔案夾")]
private static void MenuClicked5()
{
EditorUtil.OpenInFolder(Application.dataPath);
}
同樣也删除了。
第八個示例的第六個 MenuItem 方法
[MenuItem("QFramework/8.總結之前的方法/6.MenuItem 複用")]
private static void MenuClicked6()
{
EditorUtil.CallMenuItem("QFramework/8.總結之前的方法/4.導出 UnityPackage");
EditorUtil.OpenInFolder(Path.Combine(Application.dataPath, "../"));
}
這個不能馬上删除,因為這是 EditorUtil.CallMenuItem 僅有的一個調用的地方。
是以要留着,但是這個功能其實已經失效了,因為 “QFramework/8.總結之前的方法/4.導出 UnityPackage” 這個 MenuItem 被我們剛才删掉了。好吧,這種危險的操作又做了一次。
不過沒關系,因為不是很重要的功能,還好損失不大。那麼這個 MenuItem 方法呢,要改成如下:
public class PreviousFunctions : MonoBehaviour
{
#if UNITY_EDITOR
[MenuItem("QFramework/3.MenuItem 複用",false,3)]
private static void MenuClicked()
{
EditorUtil.CallMenuItem("QFramework/2.複制文本到剪切闆");
}
#endif
}
代碼很容易了解。菜單名字改變了,是以我們的檔案夾和類名都要改變。
更改後的目錄如下:
代碼如下:
#if UNITY_EDITOR
using UnityEditor;
#endif
using UnityEngine;
using System;
using System.IO;
namespace QFramework
{
public class EditorUtil
{
#if UNITY_EDITOR
public static void CallMenuItem(string menuPath)
{
EditorApplication.ExecuteMenuItem(menuPath);
}
public static void OpenInFolder(string folderPath)
{
Application.OpenURL("file:///" + folderPath);
}
public static void ExportPackage(string assetPathName,string fileName)
{
AssetDatabase.ExportPackage(assetPathName, fileName, ExportPackageOptions.Recurse);
}
#endif
}
public class ReuseMenuItem : MonoBehaviour
{
#if UNITY_EDITOR
[MenuItem("QFramework/3.MenuItem 複用",false, 3)]
private static void MenuClicked()
{
EditorUtil.CallMenuItem("QFramework/2.複制文本到剪切闆");
}
#endif
}
}
我們發現其實還有一個類 EditorUtil,剛好 ReuseMenuItem 是 EditorUtil 中 CallMenuItem 的使用代碼。
是以可以進行合并,合并之後代碼如下:
#if UNITY_EDITOR
using UnityEditor;
#endif
using UnityEngine;
namespace QFramework
{
public class EditorUtil
{
#if UNITY_EDITOR
[MenuItem("QFramework/3.MenuItem 複用",false,3)]
private static void MenuClicked()
{
CallMenuItem("QFramework/2.複制文本到剪切闆");
}
public static void CallMenuItem(string menuPath)
{
EditorApplication.ExecuteMenuItem(menuPath);
}
public static void OpenInFolder(string folderPath)
{
Application.OpenURL("file:///" + folderPath);
}
public static void ExportPackage(string assetPathName, string fileName)
{
AssetDatabase.ExportPackage(assetPathName, fileName, ExportPackageOptions.Recurse);
}
#endif
}
}
但是類的名字,改變了,而類所在的檔案名還是 ReuseMenuItem,這應該怎麼辦?
這是一個規則之間的互相制衡導緻的沖突。
筆者的解決辦法就是,把代碼名字改成 EditorUtil,最起碼類名和檔案名一緻了。功能名和菜單名也一緻了。而 EditorUtil 總好過一個 CustomShortCut 或者 PreviousFunctions 這樣的命名。而為什麼 EditorUtil 更好,那麼這個以後會專門講,現在呢,我們就先這樣做就好了。
檔案名改完之後,目錄結構如下圖所示.
這樣完整的第八個示例,就全部整理完了,通過第八個示例整理出來了第三個示例。删除了很多備援代碼,很有成就感。
今天的内容就這些。拜拜~
轉載請注明位址:涼鞋的筆記:liangxiegame.com
更多内容
- QFramework 位址:https://github.com/liangxiegame/QFramework
- QQ 交流群:623597263
- Unity 進階小班:
- 主要訓練内容:
- 架構搭建訓練(第一年)
- 跟着案例學 Shader(第一年)
- 副業的孵化(第二年、第三年)
- 權益、授課形式等具體詳情請檢視《小班産品手冊》:https://liangxiegame.com/master/intro
- 主要訓練内容:
- 關注公衆号:liangxiegame 擷取第一時間更新通知及更多的免費内容。