在前两篇,我们把所有的示例重头到尾整理了一遍。
当前的状态如下:
要做的事情:
(完成) 备份:导出文件,并取一个合理的名字。
遗留问题:
(完成) 第八个示例与之前的示例代码重复,功能重复。
(完成) 方法所在类的命名有问题。
菜单栏显示顺序问题。
弃用的代码警告
约定和规则:
每个示例在 QFramework 目录下创建一个文件夹,文件夹的格式是: 数字.示例的功能
每个示例写一个脚本,脚本中包含可复用的静态方法和 MenuItem 方法。
每写一个示例进行一次导出,导出的文件名后边加上日期和时间,这个功能已经在导出功能里内置了。
每次有 API 变更的时候做一次备份,备份的名字采用 QFramework_vX.Y.Z 格式。
每次进行整理的时候要确保是在功能有效的情况下进行删除和变更。
示例分类:
知识学习&收集
API 收集
C# 语法实践
库本身的功能
规则实现
使用流程提供及优化
效率提升(编码体验、逻辑复用)
项目实用工具收集
我们看下以上遗留问题里,示例重复这个做完了,还差一个菜单栏显示顺序问题,还有一个弃用的代码的警告。
两个看起来,弃用代码的警告马上就有思路了,就只要保证功能正确的情况下重写代码就好了。
我们看下编辑器的弃用代码警告:
目前有 5 个警告,主要集中在示例 7 和把中。我们一项一项解决。
先看示例七的代码:
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 } }之后编译后的结果如下所示:
还剩两个,我们看下第 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); } } }删除的步骤如下:
对方法的名称,进行引用搜索,IDE 里一般右键会有个 Find Refenreces/Usages,大概这样的,如果有的话,就逐个进行解决。