译者注:此方法并不一定适合所有场合,大家可以当作参考。
警告在任何一种编译型语言中都非常非常的重要:它们告知你计算机已经检查了你的代码,而且意识到你“很可能”创造了一个bug;它们甚至提供一些关于这个bug会是什么的信息。
但是计算机又不是很确定它所警告的是不是bug——如果是确定的,那它就是一个编译错误(红色的)了。所以,在Unity中,警告是黄色的,而且是“不确定的”。但是,在有些情况下,你明明知道不是bug却要报出警告,这是非常恼人的。绝大多数集成开发环境都能让你设置警告的开与关,Unity却做不了。。。这里就是讲我们怎么解决这个问题。
注:全局的警告关闭技术可用在很多地方,比如自定义工程范围内的#defines——更多信息在:Unity Forum thread on SMCS etc
确保你真的要这样做
如果你知道你在对编译警告做什么,跳过这一节。
作为一个资深的C/C++程序员,这对我非常有用。我是这样写代码的:
基于C语言和类C语言的内在功能,第4行的速写“;//”就能让你开启/关闭一行代码,只需敲4下键盘。在现代的集成开发环境中,通常有更好的方法实现该效果,但它不失为一个小而有效的例子。
这个代码在Unity控制台触发了一个警告:
对于这种情况的警告,我们要在所有的地方关闭它;因为这种写法是我正在使用的一种深思熟虑的技术,所以我不需要(或者说不想要)这种警告。我想到了这种警告的后果:它以为是你意外地在“if”语句的同一行写了一个分号。我范这种错误,那是快15年前的事了;我有信心在短期内不会再范这样的错误。
所以在文件里,我写上:
-nowarn:0642
注:这只作用于游戏脚本。如果对编辑器脚本做这样的操作,你要使用另外一个文件——gmcs.rsp
只对这个文件,你要忽略这个特定的警告。当你完成了这个长时段的调整,你又要重启这个警告。
1. 来到文件的最顶端
2. 对每一个你要关闭的警告添加一行#pragma语句: #pragma warning disable 1234;
再一次,这个数字是Unity控制台里出现在字母“CS”之后的任何数字。在我的例子里,是0219。
选项3:在单行代码上关闭警告(或者是一整块代码)
这跟选项2类似,除了:
1. 找到你要关闭警告的语句行
2. 在代码行前,为每一个警告添加一行关闭警告的#pragma语句
3. 在代码行后,为每一个警告添加一行开启警告的#pragma语句
原文作者:adam
原文出处:http://t-machine.org/index.php/2016/04/16/unity3d-remove-yellow-warnings-you-dont-need-unitytips/
警告在任何一种编译型语言中都非常非常的重要:它们告知你计算机已经检查了你的代码,而且意识到你“很可能”创造了一个bug;它们甚至提供一些关于这个bug会是什么的信息。
但是计算机又不是很确定它所警告的是不是bug——如果是确定的,那它就是一个编译错误(红色的)了。所以,在Unity中,警告是黄色的,而且是“不确定的”。但是,在有些情况下,你明明知道不是bug却要报出警告,这是非常恼人的。绝大多数集成开发环境都能让你设置警告的开与关,Unity却做不了。。。这里就是讲我们怎么解决这个问题。
注:全局的警告关闭技术可用在很多地方,比如自定义工程范围内的#defines——更多信息在:Unity Forum thread on SMCS etc
确保你真的要这样做
如果你知道你在对编译警告做什么,跳过这一节。
其余的每一个人:请三思。一个警告意味出现了下面的某种情况:
- 你有一个写到一半的类或者算法,所以有一些未被使用的代码,等等。这不是BUG。
- 你在以一种不寻常的方式使用编程语言。有可能是个BUG
1.如果该不寻常使用是个意外:很有可能是个BUG
2.如果该不寻常使用是深思熟虑的,专业级别的:不是BUG
2.如果该不寻常使用是深思熟虑的,专业级别的:不是BUG
- 你本要敲一个变量,却意外地写成了另外一个变量的名字。严重的,常见的BUG
(特别要注意最后一条:这是最糟糕的bug,你看上一百遍也看不出有哪里是“错误的”,而且计算机也报告是语法正确的!)
所以,即使很多的警告是“误报”(本来就不是bug,而且你也知道),但也有很多是“警告对”的,而且它们是你抵御某些险恶bug的最后防线。要在个案的基础上对待每一个警告!
选项1:在所有地方关闭警告
作为一个资深的C/C++程序员,这对我非常有用。我是这样写代码的:
基于C语言和类C语言的内在功能,第4行的速写“;//”就能让你开启/关闭一行代码,只需敲4下键盘。在现代的集成开发环境中,通常有更好的方法实现该效果,但它不失为一个小而有效的例子。
这个代码在Unity控制台触发了一个警告:
对于这种情况的警告,我们要在所有的地方关闭它;因为这种写法是我正在使用的一种深思熟虑的技术,所以我不需要(或者说不想要)这种警告。我想到了这种警告的后果:它以为是你意外地在“if”语句的同一行写了一个分号。我范这种错误,那是快15年前的事了;我有信心在短期内不会再范这样的错误。
1.
创建文件“smcs.rsp”
2.
保存文件到你工程的Assets文件下面
3.
一行写一个你要废止的警告(写法看下面)
4.
修改任意一个文件,Unity会重新现场加载并遵从你的新设置
smcs.rsp的内容:
-nowarn: 1234
“1234”就是Unity控制台里出现在警告消息里的那个数字——在我的案例中,我们最后得到的是:
所以在文件里,我写上:
-nowarn:0642
注:这只作用于游戏脚本。如果对编辑器脚本做这样的操作,你要使用另外一个文件——gmcs.rsp
选项2:只在一个文件中关闭警告
举个例子,你在使用一个新的游戏功能,而且正在做调整。你有一堆正在调整的变量,有时在代码中用到,有时又不用到。你会得到这个恼人的警告:
只对这个文件,你要忽略这个特定的警告。当你完成了这个长时段的调整,你又要重启这个警告。
1. 来到文件的最顶端
2. 对每一个你要关闭的警告添加一行#pragma语句: #pragma warning disable 1234;
再一次,这个数字是Unity控制台里出现在字母“CS”之后的任何数字。在我的例子里,是0219。
选项3:在单行代码上关闭警告(或者是一整块代码)
这跟选项2类似,除了:
1. 找到你要关闭警告的语句行
2. 在代码行前,为每一个警告添加一行关闭警告的#pragma语句
3. 在代码行后,为每一个警告添加一行开启警告的#pragma语句
原文作者:adam
原文出处:http://t-machine.org/index.php/2016/04/16/unity3d-remove-yellow-warnings-you-dont-need-unitytips/