在前两篇,我们把所有的示例重头到尾整理了一遍。

当前的状态如下:

  1. 要做的事情:

    • (完成) 备份:导出文件,并取一个合理的名字。
  2. 遗留问题:
    • (完成) 第八个示例与之前的示例代码重复,功能重复。
    • (完成) 方法所在类的命名有问题。
    • 菜单栏显示顺序问题。
    • 弃用的代码警告
  3. 约定和规则:
    • 每个示例在 QFramework 目录下创建一个文件夹,文件夹的格式是: 数字.示例的功能
    • 每个示例写一个脚本,脚本中包含可复用的静态方法和 MenuItem 方法。
    • 每写一个示例进行一次导出,导出的文件名后边加上日期和时间,这个功能已经在导出功能里内置了。
    • 每次有 API 变更的时候做一次备份,备份的名字采用 QFramework_vX.Y.Z 格式。
    • 每次进行整理的时候要确保是在功能有效的情况下进行删除和变更。
  4. 示例分类:
    1. 知识学习&收集

      • API 收集
      • C# 语法实践
    2. 库本身的功能
      • 规则实现
      • 使用流程提供及优化
      • 效率提升(编码体验、逻辑复用)
      • 项目实用工具收集

我们看下以上遗留问题里,示例重复这个做完了,还差一个菜单栏显示顺序问题,还有一个弃用的代码的警告。

两个看起来,弃用代码的警告马上就有思路了,就只要保证功能正确的情况下重写代码就好了。

我们看下编辑器的弃用代码警告:



目前有 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);
}
}
}

删除的步骤如下:

  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

更多内容

Unity 游戏框架搭建 2019 (二十七、二十八)弃用的代码警告解决&弃用的代码删除的更多相关文章

  1. Unity 游戏框架搭建 2019 (二十七) 弃用的代码警告解决

    在前两篇,我们把所有的示例重头到尾整理了一遍. 当前的状态如下: 要做的事情: (完成) 备份:导出文件,并取一个合理的名字. 遗留问题: (完成) 第八个示例与之前的示例代码重复,功能重复. (完成 ...

  2. Unity 游戏框架搭建 2019 (九~十二) 第一章小结&第二章简介&第八个示例

    第一章小结 为了强化教程的重点,会在合适的时候进行总结与快速复习. 第二章 简介 在第一章我们做了知识库的准备,从而让我们更高效地收集示例. 在第二章,我们就用准备好的导出工具试着收集几个示例,这些示 ...

  3. Unity 游戏框架搭建 2019 (二十一、二十二) 第三章简介&整理前的准备

    整理前的准备 到目前为止,我们积攒了很多示例了,并且每个示例也都贯彻了最的约定和规则. 在上一篇的小结也说了一个比较新的东西:编程体验优化. 在之前我们还积攒了一个问题:代码重复问题. 我们可是忍住整 ...

  4. Unity 游戏框架搭建 2019 (二十三) 备份与版本号&危险的操作

    先列出上一篇的总结: 要做的事情: 备份:导出文件,并取一个合理的名字. 遗留问题: 第八个示例与之前的示例代码重复,功能重复. 约定和规则: 每个示例在 QFramework 目录下创建一个文件夹, ...

  5. Unity 游戏框架搭建 2019 (二十六) 第一轮整理完结

    昨天呢我们把第八个示例整理完了.整理之后学习了类的第一作用:方法的集合,还有 Obselete 这个 API.并且在进行整理的时候贯彻了我们新的约定和规则:先确保功能有效,再去做变更和删除. 今天我们 ...

  6. Unity 游戏框架搭建 2019 (四十二、四十三) MonoBehaviour 简化 & 定时功能

    MonoBehaviour 简化 在前两篇,我们完成了第九个示例.为了完善第九个示例,我们复习了类的继承,又学习了泛型和 params 关键字. 我们已经接触了类的继承了.接触继承之前,把类仅仅当做是 ...

  7. Unity 游戏框架搭建 2019 (十八~二十) 概率函数 & GameObject 显示、隐藏简化 & 第二章 小结与快速复习

    在笔者刚做项目的时候,遇到了一个需求.第一个项目是一个跑酷游戏,而跑酷游戏是需要一条一条跑道拼接成的.每个跑道的长度是固定的,而怪物的出现位置也是在跑道上固定好的.那么怪物出现的概率决定一部分关卡的难 ...

  8. Unity 游戏框架搭建 2019 (二十五) 类的第一个作用 与 Obselete 属性

    在上一篇我们整理到了第七个示例,我们今天再接着往下整理.我们来看第八个示例: #if UNITY_EDITOR using UnityEditor; #endif using UnityEngine; ...

  9. Unity 游戏框架搭建 2019 (二十九) 方法所在类命名问题诞生的原因

    我们在整理阶段解决了一些意外的问题.但是这些问题仅仅只是被解决而已,我们并没有去思考过这些问题是为什么产生的?以及在以后我们如何去避免这些问题的产生? 方法所在类的命名问题,最后我们通过方法分类解决了 ...

随机推荐

  1. C语言程序设计(四) 键盘输入和屏幕输出

    第四章 键盘输入和屏幕输出 转义字符 \n 换行,光标移到下一行的起始位置 \r 回车(不换行),光标移到当前行的起始位置 \0 空字符 \t 水平制表 \v 垂直制表 \b 退格 \f 走纸换页 \ ...

  2. JAVAEE学习day03,基本的流程控制

    有问题请留言 1.流程控制语句分类 1)顺序控制语句 2)选择结构语句 if... if...else... if...else if... else... for... switch... whil ...

  3. tersserorc的简单使用

    tesserocr 是 python 的一个 OCR 库,它是对 tesseract 做的一层 Python API 封装,所以他的核心是tesseract. tesseract 的安装见 https ...

  4. 一口气说出 6种,@Transactional注解的失效场景

    整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 一口气说出 9种 分布式ID生成方式,面试官有点懵了 面试总被问 ...

  5. 创建和存储 cookie

    在这个例子中我们要创建一个存储访问者名字的 cookie.当访问者首次访问网站时,他们会被要求填写姓名.名字会存储于 cookie 中.当访问者再次访问网站时,他们就会收到欢迎词. 首先,我们会创建一 ...

  6. orale中pl/sql的数据类型总结

    一.pl/sql的概念 pl/sql简单的说就是:sql语句+编程语言的特性. 二.pl/sql的优点 1.可以提高程序的运行效率,因为能够减少数据库的访问次数. 2.可以对复杂的业务逻辑进行封装 3 ...

  7. [AFO·游记]我的C++451天游击战

    写在前面 05/10/19 今天心情很糟糕,没学新东西,复习没复习,作业没写完,下午要网课,明天要月考,脑子里就像是被一团棉花塞住了.静静的思考了半个小时,把自己手头上的事情排了个序,所以决定先把游记 ...

  8. Python中常见的报错名称

    Python中常见的报错名称 1.SyntaxError 语法错误.看看是否用Python关键字命名变量,有没有使用中文符号,运算符.逻辑运算符等符号是不是使用不规范. 2.IndentationEr ...

  9. Journal of Proteome Research | Quantifying Protein-Specific N-Glycome Profiles by Focused Protein and Immunoprecipitation Glycomics (分享人:潘火珍)

    文献名:Quantifying Protein-Specific N-Glycome Profiles by Focused Protein and Immunoprecipitation Glyco ...

  10. 使用tomcat运行时提示some characters cannot be mapped using iso-8859-1 character encoding异常

    今天第一次使用java进行jsp项目搭建,也是第一次使用tomcat.tomcat是运行java web的一个小型服务器,属于Apache的一个开源免费的服务. 在运行web 的时候,我们就要先配置好 ...