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

当前的状态如下:

  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. mybatis进阶案例之多表查询

    mybatis进阶案例之多表查询 一.mybatis中表之间的关系 在数据库中,实体型之间的关系主要有如下几种: 1.一对一 如果对于实体集A中的每一个实体,实体集B中至多有一个(也可以没有)实体与之 ...

  2. C语言程序设计(六) 循环控制结构

    第六章 循环控制结构 循环结构:需要重复执行的操作 被重复执行的语句序列称为循环体 计数控制的循环 条件控制的循环 当型循环结构 直到型循环结构 for while do-while while(循环 ...

  3. 【python】提取sql语句中的表名

    前言 最近刚学python,写一个小工具时需要提取sql语句中表名,查询一番后找到一篇文章挺不错的,mark一下 PS.那篇文章是转载的,且没有标注转载自哪里 正文 import ply.lex as ...

  4. QT使用信号量QSemaphore处理大量数据

    实现如下:

  5. 解决QQ“抱歉,无法发起临时会话,您可以 添加对方为好友以发送消息”

    很多网站,目前无法发起临时会话,自己在找网上找到教程,特分享给大家.自从2014年3月1日开始,网站上放置QQ客服代码的网站,在点击联系QQ时,以前可以正常发起临时会话的,现在提示:“抱歉,无法发起临 ...

  6. NFS作为根文件系统,挂载超时

    NFS服务器配置正确后,使用ramfs,通过mount能够正常挂载NFS,但是作为ROOTFS无法正常挂载,显示超时. 经查看log,RPC报错-120. 分析结果: 在Ubuntu1804上,nfs ...

  7. iOS包重签名工具,ipa文件重签名,快速签名,SignTool签名工具,好用的签名工具,App重签名

    新工具 ProjectTool 已上线 这是一款快速写白包工具,秒级别写H5游戏壳包,可视化操作,极易使用,支持Swift.Objecive-C双语言 QQ交流群:811715780 进入 Proje ...

  8. 华为云+NextCloud(私人云盘搭建)

    这几天发现了牛客+华为云的返现活动,免费用一年,赶紧的去搞了一个折腾折腾.(相关软件下载链接在最下面) 噔噔噔!!! 102822985.png) 废话少说,开始搭建. 基础环境部署 Apache安装 ...

  9. [转]【maven】解决Missing artifact jdk.tools:jdk.tools:jar:1.6

    解决在pom.xml文件中出现的Missing artifact jdk.tools:jdk.tools:jar:1.6问题 <dependency> <groupId>jdk ...

  10. 初识socket之TCP协议

    TCP服务端.客户端(基础版本) # 这是服务端import socket ​server = socket.socket()  # 买手机server.bind(('127.0.0.1', 8080 ...