C#的预处理指令
参考书籍: 《C#图解教程》
在C++里面一般一个源文件就要一个#ifdef,因为要避免重定义,C#就不用这东西了,直接用命名空间这省事。
- #define,允许重定义。
- #define 和 #undef 指令只能放在源文件第一行。
比较好用的就是#region和#endregion,可以用来折叠代码用。
在Unity中,用于多平台控制输入常用#if,#else,#elif,#endif,这四个组合使用。如
#if UNITY_STANDALONE
//单机时输入
horizontal = (int)Input.GetAxisRaw("Horizontal");
vertical = (int)Input.GetAxisRaw("Vertical");
#elif UNITY_IOS || UNITY_ANDROID
//ios或安卓输入
Input.touches[0]; //获取第一个触摸。
//省略操作。
#endif
但更建议使用[System.Diagnostics.Conditional]特性,该特性只能用于返回void类型。生成IL(公共中间语言)比#if更效率。
//需要该命名空间。
using System.Diagnostics;
//声明定义。
[Conditional("UNITY_STANDALONE")]
void getHorizontalAndVerticalFromStandalone(ref int horizontal,ref int vertical)
{
horizontal = (int)Input.GetAxisRaw("Horizontal");
vertical = (int)Input.GetAxisRaw("Vertical");
}
//IOS或Android
[Conditional("UNITY_IOS"),Conditional("UNITY_ANDROID")]
void getHorizontalAndVerticalFromMobile(ref int horizontal,ref int vertical)
{
Input.touches[0];
//省略操作。
}
//
//控制输入类中
//
//直接调用,如果是单机,第二个方法不会执行。
getHorizontalAndVerticalFromStandalone(ref horizontal,ref vertical);
getHorizontalAndVerticalFromMobile(ref horizontal,ref vertical);