Unity 遊戲框架搭建 2019 (二十7、二十八)棄用的代碼警告解決&棄用的代碼刪除

在前兩篇,咱們把全部的示例重頭到尾整理了一遍。git

當前的狀態以下:github

  1. 要作的事情:
    • (完成) 備份:導出文件,並取一個合理的名字。
  2. 遺留問題:
    • (完成) 第八個示例與以前的示例代碼重複,功能重複。
    • (完成) 方法所在類的命名有問題。
    • 菜單欄顯示順序問題。
    • 棄用的代碼警告
  3. 約定和規則:
    • 每一個示例在 QFramework 目錄下建立一個文件夾,文件夾的格式是: 數字.示例的功能
    • 每一個示例寫一個腳本,腳本中包含可複用的靜態方法和 MenuItem 方法。
    • 每寫一個示例進行一次導出,導出的文件名後邊加上日期和時間,這個功能已經在導出功能裏內置了。
    • 每次有 API 變動的時候作一次備份,備份的名字採用 QFramework_vX.Y.Z 格式。
    • 每次進行整理的時候要確保是在功能有效的狀況下進行刪除和變動。
  4. 示例分類:
    1. 知識學習&收集
      • API 收集
      • C# 語法實踐
    2. 庫自己的功能
      • 規則實現
      • 使用流程提供及優化
      • 效率提高(編碼體驗、邏輯複用)
      • 項目實用工具收集

咱們看下以上遺留問題裏,示例重複這個作完了,還差一個菜單欄顯示順序問題,還有一個棄用的代碼的警告。框架

兩個看起來,棄用代碼的警告立刻就有思路了,就只要保證功能正確的狀況下重寫代碼就行了。dom

咱們看下編輯器的棄用代碼警告:
006tNc79gy1fzfr7gy35wj30mq0dmwgz.jpg
目前有 5 個警告,主要集中在示例 7 和把中。咱們一項一項解決。編輯器

先看示例七的代碼:ide

using System.IO;

#if UNITY_EDITOR
using UnityEditor;
#endif

using UnityEngine;

namespace QFramework
{
	public class CustomShortCut : MonoBehaviour
	{
#if UNITY_EDITOR
		[MenuItem("QFramework/7.自定義快捷鍵 %e")]
		private static void MenuClicked()
		{
			var generatePackageName = PreviousFunctions.GenerateUnityPackageName();
			
			PreviousFunctions.ExportPackage("Assets/QFramework",generatePackageName + ".unitypackage");
			
			PreviousFunctions.OpenInFolder(Path.Combine(Application.dataPath, "../"));
		}
#endif
	}
}

很容易改。改完以後的代碼以下:函數

using System.IO;

#if UNITY_EDITOR
using UnityEditor;
#endif

using UnityEngine;

namespace QFramework
{
	public class CustomShortCut : MonoBehaviour
	{
#if UNITY_EDITOR
		[MenuItem("QFramework/7.自定義快捷鍵 %e")]
		private static void MenuClicked()
		{
			var generatePackageName = Exporter.GenerateUnityPackageName();
			
			EditorUtil.ExportPackage("Assets/QFramework",generatePackageName + ".unitypackage");
			
			EditorUtil.OpenInFolder(Path.Combine(Application.dataPath, "../"));
		}
#endif
	}
}

以後編譯後的結果以下所示:
006tNc79gy1fzfr7jpozqj30mg0d240v.jpg
還剩兩個,咱們看下第 8 個示例的代碼。工具

...
public class PreviousFunctions
{
	...
	[MenuItem("QFramework/8.總結以前的方法/3.生成文件名到剪切板")]
	private static void MenuClicked3()
	{
		CommonUtil.CopyText(GenerateUnityPackageName());		
	}
		
	[MenuItem("QFramework/8.總結以前的方法/4.導出 UnityPackage")]
	private static void MenuClicked4()
	{
		EditorUtil.ExportPackage("Assets/QFramework",GenerateUnityPackageName() + ".unitypackage");
	}
	...
}
...

主要問題在 GenerateUnityPackageName,這個在整理第個示例的時候忘記了,改爲以下代碼就行了。學習

...
public class PreviousFunctions
{
	...
	[MenuItem("QFramework/8.總結以前的方法/3.生成文件名到剪切板")]
	private static void MenuClicked3()
	{
		CommonUtil.CopyText(Exporter.GenerateUnityPackageName());		
	}
		
	[MenuItem("QFramework/8.總結以前的方法/4.導出 UnityPackage")]
	private static void MenuClicked4()
	{
		EditorUtil.ExportPackage("Assets/QFramework",Exporter.GenerateUnityPackageName() + ".unitypackage");
	}
	...
}
...

這樣編譯警告就沒有了。優化

警告的問題所有解決了,棄用的方法就所有能夠刪掉了,由於棄用的方法,只要被調用了纔會報警告,可是在刪除棄用方法的時候要當心一點,由於棄用的方法有多是在某個宏裏邊調用的,這時候最好用一下 IDE 的全局搜索字符串,通常 IDE 都會有,怎麼用,本身用搜索引擎查一下就好了。

咱們在這篇把全部的棄用代碼刪除掉。

示例十

代碼以下

using System;
#if UNITY_EDITOR
using UnityEditor;
#endif

using UnityEngine;

namespace QFramework
{
	public class TransformLocalPosImprovements
	{
#if UNITY_EDITOR
		[MenuItem("QFramework/10.Transform 賦值優化")]
#endif
		private static void GenerateUnityPackageName()
		{
			var transform = new GameObject("transform").transform;

			TransformSimplify.SetLocalPosX(transform, 5.0f);
			TransformSimplify.SetLocalPosY(transform, 5.0f);
			TransformSimplify.SetLocalPosZ(transform, 5.0f);
		}

		[Obsolete("方法已棄用,請使用 TransformSimplify")]
		public static void SetLocalPosX(Transform transform, float x)
		{
			TransformSimplify.SetLocalPosX(transform, x);
		}
		
		[Obsolete("方法已棄用,請使用 TransformSimplify")]
		public static void SetLocalPosY(Transform transform, float y)
		{
			TransformSimplify.SetLocalPosY(transform, y);
		}
		
		[Obsolete("方法已棄用,請使用 TransformSimplify")]
		public static void SetLocalPosZ(Transform transform, float z)
		{
			TransformSimplify.SetLocalPosZ(transform, z);
		}
		
		[Obsolete("方法已棄用,請使用 TransformSimplify")]
		public static void SetLocalPosXY(Transform transform, float x, float y)
		{
			TransformSimplify.SetLocalPosXY(transform, x, y);
		}
		
		[Obsolete("方法已棄用,請使用 TransformSimplify")]
		public static void SetLocalPosXZ(Transform transform, float x, float z)
		{
			TransformSimplify.SetLocalPosXZ(transform, x, z);
		}
		
		[Obsolete("方法已棄用,請使用 TransformSimplify")]
		public static void SetLocalPosYZ(Transform transform, float y, float z)
		{
			TransformSimplify.SetLocalPosYZ(transform, y, z);
		}
	}
}

刪除的步驟以下:

  1. 對方法的名稱,進行引用搜索,IDE 裏通常右鍵會有個 Find Refenreces/Usages,大概這樣的,若是有的話,就逐個進行解決。
  2. 對方法的名稱,進行全局文本搜索,通常在 IDE 裏快捷鍵是 cmd/ctrl + shift + F,若是不是能夠本身搜一下。通過步驟 1 以後,在執行本操做,結果極可能是在宏定義裏的引用,這時候就須要用肉眼去檢查了,看看是否是最新的方法,若是不是就更新。

每個棄用的方法咱們都要這樣一個一個去解決。

解決按以後代碼以下:

#if UNITY_EDITOR
using UnityEditor;
#endif

using UnityEngine;

namespace QFramework
{
	public class TransformLocalPosImprovements
	{
#if UNITY_EDITOR
		[MenuItem("QFramework/10.Transform 賦值優化")]
#endif
		private static void GenerateUnityPackageName()
		{
			var transform = new GameObject("transform").transform;

			TransformSimplify.SetLocalPosX(transform, 5.0f);
			TransformSimplify.SetLocalPosY(transform, 5.0f);
			TransformSimplify.SetLocalPosZ(transform, 5.0f);
		}
	}
}

第十個示例解決了。

示例八

使用以上的步驟,整理後的示例代碼以下:

#if UNITY_EDITOR
using UnityEditor;
#endif

using UnityEngine;
using System;
using System.IO;

namespace QFramework
{
	public class CommonUtil
	{
		public static void CopyText(string text)
		{
			GUIUtility.systemCopyBuffer = text;
		}
	}

	public class Exporter
	{
		public static string GenerateUnityPackageName()
		{
			return "QFramework_" + DateTime.Now.ToString("yyyyMMdd_hh");
		}
	}

	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 PreviousFunctions : MonoBehaviour
	{		
#if UNITY_EDITOR
		[MenuItem("QFramework/8.總結以前的方法/1.獲取文件名")]
		private static void MenuClicked()
		{
			Debug.Log(Exporter.GenerateUnityPackageName());
		}
		
		[MenuItem("QFramework/8.總結以前的方法/2.複製文本到剪切板")]
		private static void MenuClicked2()
		{
			CommonUtil.CopyText("要複製的關鍵字");
		}

		[MenuItem("QFramework/8.總結以前的方法/3.生成文件名到剪切板")]
		private static void MenuClicked3()
		{
			CommonUtil.CopyText(Exporter.GenerateUnityPackageName());		
		}
		
		[MenuItem("QFramework/8.總結以前的方法/4.導出 UnityPackage")]
		private static void MenuClicked4()
		{
			EditorUtil.ExportPackage("Assets/QFramework",Exporter.GenerateUnityPackageName() + ".unitypackage");
		}
		
		[MenuItem("QFramework/8.總結以前的方法/5.打開所在文件夾")]
		private static void MenuClicked5()
		{
			EditorUtil.OpenInFolder(Application.dataPath);
		}
		
		[MenuItem("QFramework/8.總結以前的方法/6.MenuItem 複用")]
		private static void MenuClicked6()
		{
			EditorUtil.CallMenuItem("QFramework/8.總結以前的方法/4.導出 UnityPackage");
			EditorUtil.OpenInFolder(Path.Combine(Application.dataPath, "../"));
		}
#endif
	}
 }

是否是感受清爽了不少?哈哈哈。

示例十一

整理以後代碼以下:

using System;
#if UNITY_EDITOR
using UnityEditor;
#endif

using UnityEngine;

namespace QFramework
{
	public class TransformSimplify
	{
		/// <summary>
		/// 重置操做
		/// </summary>
		/// <param name="trans">Trans.</param>
		public static void Identity(Transform trans)
		{
			trans.localPosition = Vector3.zero;
			trans.localScale = Vector3.one;
			trans.localRotation = Quaternion.identity;
		}
		
		public static void SetLocalPosX(Transform transform, float x)
		{
			var localPos = transform.localPosition;
			localPos.x = x;
			transform.localPosition = localPos;
		}
		
		public static void SetLocalPosY(Transform transform, float y)
		{
			var localPos = transform.localPosition;
			localPos.y = y;
			transform.localPosition = localPos;
		}
		
		public static void SetLocalPosZ(Transform transform, float z)
		{
			var localPos = transform.localPosition;
			localPos.z = z;
			transform.localPosition = localPos;
		}
		
		public static void SetLocalPosXY(Transform transform, float x, float y)
		{
			var localPos = transform.localPosition;
			localPos.x = x;
			localPos.y = y;
			transform.localPosition = localPos;
		}
		
		public static void SetLocalPosXZ(Transform transform, float x, float z)
		{
			var localPos = transform.localPosition;
			localPos.x = x;
			localPos.z = z;
			transform.localPosition = localPos;
		}
		
		public static void SetLocalPosYZ(Transform transform, float y, float z)
		{
			var localPos = transform.localPosition;
			localPos.y = y;
			localPos.z = z;
			transform.localPosition = localPos;
		}
	}
	
	public class TransformIdentity : MonoBehaviour
	{
		
#if UNITY_EDITOR
		[MenuItem("QFramework/11.Transform 歸一化")]
#endif
		private static void MenuClicked()
		{
			var transform = new GameObject("transform").transform;

			TransformSimplify.Identity(transform);
		}
	}
}

示例十二

整理以後代碼以下:

using System;

#if UNITY_EDITOR
using UnityEditor;
#endif

using UnityEngine;
using Random = UnityEngine.Random;

namespace QFramework
{
	public class MathUtil
	{
		/// <summary>
		/// 輸入百分比返回是否命中機率
		/// </summary>
		public static bool Percent(int percent)
		{
			return Random.Range (0, 100) <= percent;
		}
	}
	public class PercentFunction : MonoBehaviour
	{
#if UNITY_EDITOR
		[MenuItem("QFramework/12.機率函數")]
#endif
		private static void MenuClicked()
		{
			Debug.Log(MathUtil.Percent(50));
		}
	}
}

到目前爲止,咱們把全部的棄用的方法所有刪除了。

所有刪除以後,筆者的心情輕鬆了不少。

小結

當前的狀態以下:

  1. 要作的事情:
    • (完成) 備份:導出文件,並取一個合理的名字。
  2. 遺留問題:
    • (完成) 第八個示例與以前的示例代碼重複,功能重複。
    • (完成) 方法所在類的命名有問題。
    • 菜單欄顯示順序問題。
    • (完成) 棄用的代碼警告
  3. 約定和規則:
    • 每一個示例在 QFramework 目錄下建立一個文件夾,文件夾的格式是: 數字.示例的功能
    • 每一個示例寫一個腳本,腳本中包含可複用的靜態方法和 MenuItem 方法。
    • 每寫一個示例進行一次導出,導出的文件名後邊加上日期和時間,這個功能已經在導出功能裏內置了。
    • 每次有 API 變動的時候作一次備份,備份的名字採用 QFramework_vX.Y.Z 格式。
    • 每次進行整理的時候要確保是在功能有效的狀況下進行刪除和變動。
    • 在刪除棄用代碼的步驟:
      1. 消除棄用警告。
      2. 搜索棄用方法的引用,並逐個升級爲最新的方法。
      3. 全局搜索方法名,並根據狀況逐個升級爲新的方法。
  4. 示例分類:
    1. 知識學習&收集
      • API 收集
      • C# 語法實踐
    2. 庫自己的功能
      • 規則實現
      • 使用流程提供及優化
      • 效率提高(編碼體驗、邏輯複用)
      • 項目實用工具收集

注意:在約定和規則部分,增長了刪除棄用代碼的步驟。

今天內容就這些,咱們在下篇接着整理。

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

更多內容

相關文章
相關標籤/搜索