Unity 游戏框架搭建 2019 (二十七、二十八)弃用的代码警告解决&弃用的代码删除
在前两篇,我们把所有的示例重头到尾整理了一遍。
当前的状态如下:
- 要做的事情:
- (完成) 备份:导出文件,并取一个合理的名字。
- 遗留问题:
- (完成) 第八个示例与之前的示例代码重复,功能重复。
- (完成) 方法所在类的命名有问题。
- 菜单栏显示顺序问题。
- 弃用的代码警告
- 约定和规则:
- 每个示例在 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,大概这样的,如果有的话,就逐个进行解决。
- 对方法的名称,进行全局文本搜索,一般在 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));
}
}
}
到目前为止,我们把所有的弃用的方法全部删除了。
全部删除之后,笔者的心情轻松了很多。
小结
当前的状态如下:
- 要做的事情:
- (完成) 备份:导出文件,并取一个合理的名字。
- 遗留问题:
- (完成) 第八个示例与之前的示例代码重复,功能重复。
- (完成) 方法所在类的命名有问题。
- 菜单栏显示顺序问题。
- (完成) 弃用的代码警告
- 约定和规则:
- 每个示例在 QFramework 目录下创建一个文件夹,文件夹的格式是: 数字.示例的功能
- 每个示例写一个脚本,脚本中包含可复用的静态方法和 MenuItem 方法。
- 每写一个示例进行一次导出,导出的文件名后边加上日期和时间,这个功能已经在导出功能里内置了。
- 每次有 API 变更的时候做一次备份,备份的名字采用 QFramework_vX.Y.Z 格式。
- 每次进行整理的时候要确保是在功能有效的情况下进行删除和变更。
- 在删除弃用代码的步骤:
- 消除弃用警告。
- 搜索弃用方法的引用,并逐个升级为最新的方法。
- 全局搜索方法名,并根据情况逐个升级为新的方法。
- 示例分类:
- 知识学习&收集
- API 收集
- C# 语法实践
- 库本身的功能
- 规则实现
- 使用流程提供及优化
- 效率提升(编码体验、逻辑复用)
- 项目实用工具收集
- 知识学习&收集
注意:在约定和规则部分,增加了删除弃用代码的步骤。
今天内容就这些,我们在下篇接着整理。
转载请注明地址:凉鞋的笔记:liangxiegame.com
更多内容
QFramework 地址:https://github.com/liangxiegame/QFramework
QQ 交流群:623597263
Unity 进阶小班:
- 主要训练内容:
- 框架搭建训练(第一年)
- 跟着案例学 Shader(第一年)
- 副业的孵化(第二年、第三年)
- 权益、授课形式等具体详情请查看《小班产品手册》:https://liangxiegame.com/master/intro
- 主要训练内容:
关注公众号:liangxiegame 获取第一时间更新通知及更多的免费内容。

Unity 游戏框架搭建 2019 (二十七、二十八)弃用的代码警告解决&弃用的代码删除的更多相关文章
- Unity 游戏框架搭建 2019 (二十七) 弃用的代码警告解决
在前两篇,我们把所有的示例重头到尾整理了一遍. 当前的状态如下: 要做的事情: (完成) 备份:导出文件,并取一个合理的名字. 遗留问题: (完成) 第八个示例与之前的示例代码重复,功能重复. (完成 ...
- Unity 游戏框架搭建 2019 (九~十二) 第一章小结&第二章简介&第八个示例
第一章小结 为了强化教程的重点,会在合适的时候进行总结与快速复习. 第二章 简介 在第一章我们做了知识库的准备,从而让我们更高效地收集示例. 在第二章,我们就用准备好的导出工具试着收集几个示例,这些示 ...
- Unity 游戏框架搭建 2019 (二十一、二十二) 第三章简介&整理前的准备
整理前的准备 到目前为止,我们积攒了很多示例了,并且每个示例也都贯彻了最的约定和规则. 在上一篇的小结也说了一个比较新的东西:编程体验优化. 在之前我们还积攒了一个问题:代码重复问题. 我们可是忍住整 ...
- Unity 游戏框架搭建 2019 (二十三) 备份与版本号&危险的操作
先列出上一篇的总结: 要做的事情: 备份:导出文件,并取一个合理的名字. 遗留问题: 第八个示例与之前的示例代码重复,功能重复. 约定和规则: 每个示例在 QFramework 目录下创建一个文件夹, ...
- Unity 游戏框架搭建 2019 (二十六) 第一轮整理完结
昨天呢我们把第八个示例整理完了.整理之后学习了类的第一作用:方法的集合,还有 Obselete 这个 API.并且在进行整理的时候贯彻了我们新的约定和规则:先确保功能有效,再去做变更和删除. 今天我们 ...
- Unity 游戏框架搭建 2019 (四十二、四十三) MonoBehaviour 简化 & 定时功能
MonoBehaviour 简化 在前两篇,我们完成了第九个示例.为了完善第九个示例,我们复习了类的继承,又学习了泛型和 params 关键字. 我们已经接触了类的继承了.接触继承之前,把类仅仅当做是 ...
- Unity 游戏框架搭建 2019 (十八~二十) 概率函数 & GameObject 显示、隐藏简化 & 第二章 小结与快速复习
在笔者刚做项目的时候,遇到了一个需求.第一个项目是一个跑酷游戏,而跑酷游戏是需要一条一条跑道拼接成的.每个跑道的长度是固定的,而怪物的出现位置也是在跑道上固定好的.那么怪物出现的概率决定一部分关卡的难 ...
- Unity 游戏框架搭建 2019 (二十五) 类的第一个作用 与 Obselete 属性
在上一篇我们整理到了第七个示例,我们今天再接着往下整理.我们来看第八个示例: #if UNITY_EDITOR using UnityEditor; #endif using UnityEngine; ...
- Unity 游戏框架搭建 2019 (二十九) 方法所在类命名问题诞生的原因
我们在整理阶段解决了一些意外的问题.但是这些问题仅仅只是被解决而已,我们并没有去思考过这些问题是为什么产生的?以及在以后我们如何去避免这些问题的产生? 方法所在类的命名问题,最后我们通过方法分类解决了 ...
随机推荐
- mybatis进阶案例之多表查询
mybatis进阶案例之多表查询 一.mybatis中表之间的关系 在数据库中,实体型之间的关系主要有如下几种: 1.一对一 如果对于实体集A中的每一个实体,实体集B中至多有一个(也可以没有)实体与之 ...
- C语言程序设计(六) 循环控制结构
第六章 循环控制结构 循环结构:需要重复执行的操作 被重复执行的语句序列称为循环体 计数控制的循环 条件控制的循环 当型循环结构 直到型循环结构 for while do-while while(循环 ...
- 【python】提取sql语句中的表名
前言 最近刚学python,写一个小工具时需要提取sql语句中表名,查询一番后找到一篇文章挺不错的,mark一下 PS.那篇文章是转载的,且没有标注转载自哪里 正文 import ply.lex as ...
- QT使用信号量QSemaphore处理大量数据
实现如下:
- 解决QQ“抱歉,无法发起临时会话,您可以 添加对方为好友以发送消息”
很多网站,目前无法发起临时会话,自己在找网上找到教程,特分享给大家.自从2014年3月1日开始,网站上放置QQ客服代码的网站,在点击联系QQ时,以前可以正常发起临时会话的,现在提示:“抱歉,无法发起临 ...
- NFS作为根文件系统,挂载超时
NFS服务器配置正确后,使用ramfs,通过mount能够正常挂载NFS,但是作为ROOTFS无法正常挂载,显示超时. 经查看log,RPC报错-120. 分析结果: 在Ubuntu1804上,nfs ...
- iOS包重签名工具,ipa文件重签名,快速签名,SignTool签名工具,好用的签名工具,App重签名
新工具 ProjectTool 已上线 这是一款快速写白包工具,秒级别写H5游戏壳包,可视化操作,极易使用,支持Swift.Objecive-C双语言 QQ交流群:811715780 进入 Proje ...
- 华为云+NextCloud(私人云盘搭建)
这几天发现了牛客+华为云的返现活动,免费用一年,赶紧的去搞了一个折腾折腾.(相关软件下载链接在最下面) 噔噔噔!!! 102822985.png) 废话少说,开始搭建. 基础环境部署 Apache安装 ...
- [转]【maven】解决Missing artifact jdk.tools:jdk.tools:jar:1.6
解决在pom.xml文件中出现的Missing artifact jdk.tools:jdk.tools:jar:1.6问题 <dependency> <groupId>jdk ...
- 初识socket之TCP协议
TCP服务端.客户端(基础版本) # 这是服务端import socket server = socket.socket() # 买手机server.bind(('127.0.0.1', 8080 ...