Unity 游戲框架搭建 2019 (三十二、三十三) 類的命名 & 代碼文件命名


昨天我們完成了第八個示例的第二個 MenuItem 菜單順序的調整。

我們今天再往下接着調整。

我們來看下接下來的 MenuItem

代碼如下:

		[MenuItem("QFramework/8.總結之前的方法/3.生成文件名到剪切板")]
		private static void MenuClicked3()
		{
			CommonUtil.CopyText(Exporter.GenerateUnityPackageName());		
		}

CommonUtil 已經提取成第二個示例了。
Exporter.GenerateUnityPackageName() 這個方法的定義在第八個示例 PreviousFunctions 類的上方。它屬於專門為導出功能定制的代碼,也就是在其他情況下不適用的。

而這個 MenuItem 本身呢,現在沒有太大的用處。有用的部分是 Exporter.GenerateUnityPackageName 的方法定義和所在的類。

所以這個 MenuItem 就直接刪除了。

刪除之后,我們把 Exporter 這個類移動到第一個示例里,因為第一個示例是導出功能所在的地方,Exporter 類呢本身就是一個導出功能的一部分。

第一個示例原來的代碼如下:

using System.IO;

#if UNITY_EDITOR
using UnityEditor;
#endif

using UnityEngine;

namespace QFramework
{
	public class CustomShortCut : MonoBehaviour
	{
#if UNITY_EDITOR
		[MenuItem("QFramework/1.導出 UnityPackage %e",false,1)]
		private static void MenuClicked()
		{
			var generatePackageName = Exporter.GenerateUnityPackageName();
			
			EditorUtil.ExportPackage("Assets/QFramework",generatePackageName + ".unitypackage");
			
			EditorUtil.OpenInFolder(Path.Combine(Application.dataPath, "../"));
		}
#endif
	}
}

移動 Exporter 類之后變成如下:

using System;
using System.IO;

#if UNITY_EDITOR
using UnityEditor;
#endif

using UnityEngine;

namespace QFramework
{	
	public class Exporter
	{
		public static string GenerateUnityPackageName()
		{
			return "QFramework_" + DateTime.Now.ToString("yyyyMMdd_hh");
		}
	}
	
	public class CustomShortCut : MonoBehaviour
	{
#if UNITY_EDITOR
		[MenuItem("QFramework/1.導出 UnityPackage %e",false,1)]
		private static void MenuClicked()
		{
			var generatePackageName = Exporter.GenerateUnityPackageName();
			
			EditorUtil.ExportPackage("Assets/QFramework",generatePackageName + ".unitypackage");
			
			EditorUtil.OpenInFolder(Path.Combine(Application.dataPath, "../"));
		}
#endif
	}
}

到這里,我們發現,Exporter 類可以和 CunstomShortCut 類進行合並,合並之后的類名是 Exporter,而代碼的文件名改成了 Exporter.cs。

代碼如下:
Exporter.cs

using System;
using System.IO;

#if UNITY_EDITOR
using UnityEditor;
#endif

using UnityEngine;

namespace QFramework
{	
	public class Exporter
	{
#if UNITY_EDITOR
		[MenuItem("QFramework/1.導出 UnityPackage %e",false,1)]
		private static void MenuClicked()
		{
			var generatePackageName = Exporter.GenerateUnityPackageName();
			
			EditorUtil.ExportPackage("Assets/QFramework",generatePackageName + ".unitypackage");
			
			EditorUtil.OpenInFolder(Path.Combine(Application.dataPath, "../"));
		}
#endif
		
		public static string GenerateUnityPackageName()
		{
			return "QFramework_" + DateTime.Now.ToString("yyyyMMdd_hh");
		}
	}
}

目錄結構如下:
006tNc79gy1fzfrcaihnsj30km0ikjud.jpg

這樣第八個示例的第三個 MenuItem 就整理完畢了。

小結

其實在整理第一個示例的時候,第一個示例的類的名字 CustomShortCut 就有很大的問題。我們第一個示例的功能是 導出 UnityPackage,類名卻叫 自定義快捷鍵,這樣比較奇怪。但是當時沒有發現,因為只去關注菜單名是否和文件夾名是否一致了,沒有考慮類名是否合理。

所以呢,我們的規范和約定要加入上一個條例:

  1. 要給類/代碼文件取合適的命名。

加上之后如下:

約定和規則:

  • 每個示例在 QFramework 目錄下創建一個文件夾,文件夾的格式是: 數字.示例的功能
    • 每個示例寫一個腳本,腳本中包含可復用的靜態方法和 MenuItem 方法。
    • 每寫一個示例進行一次導出,導出的文件名后邊加上日期和時間,這個功能已經在導出功能里內置了。
    • 每次有 API 變更的時候做一次備份,備份的名字采用 QFramework_vX.Y.Z 格式。
    • 每次進行整理的時候要確保是在功能有效的情況下進行刪除和變更。
    • 確保菜單名和文件夾名一致(新增)
    • 要給類/代碼文件取合適的命名(新增)
    • 在刪除棄用代碼的步驟:
      1. 消除棄用警告。
      2. 搜索棄用方法的引用,並逐個升級為最新的方法。
      3. 全局搜索方法名,並根據情況逐個升級為新的方法。

在上面 我們通過第八個示例的第三個 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
	}

代碼很容易理解。菜單名字改變了,所以我們的文件夾和類名都要改變。

更改后的目錄如下:
006tNc79gy1fzfrddmxuoj30io0kin05.jpg

代碼如下:

#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 更好,那么這個以后會專門講,現在呢,我們就先這樣做就好了。

文件名改完之后,目錄結構如下圖所示.
006tNc79gy1fzfrdgs8gkj30ka0i6god.jpg

這樣完整的第八個示例,就全部整理完了,通過第八個示例整理出來了第三個示例。刪除了很多冗余代碼,很有成就感。

今天的內容就這些。拜拜~

轉載請注明地址:涼鞋的筆記:liangxiegame.com

更多內容


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM