
#if、#else、#eif、#endif
以前自己做開發的時候,基本沒有怎么用過C#的#if之類的預處理指令。實習了之后,發現項目中C#代碼部分用了很多預處理指令。所以學習了一下。
這幾個#if的用法和if-else語句差不多,都是如果滿足條件則會執行。但不同的是這里往往使用的是預處理指令。
舉個小栗子:使用系統內置指令
一般可以讓不同的版本或者不同的平台執行一些不同的測試代碼,來幫助我們調試。
//VS會在編寫代碼時就自動判斷出將會執行哪個代碼塊,並把不會執行的置灰。(VS牛批!!!)
//當游戲處於編輯器階段即還未發布時(可以在VS中改變調試的模式為Release)
#if DEBUG
Debug.Log("當前是編輯器模式");
#else
Debug.Log("當前不是編輯器模式");
#endif
#define、#undef
使用#define我們可以自定義指令。
使用#undef可以取消定義的指令。
注意:
- define指令需要放在using之前使用
- define指令不能用於聲明常量值
舉個小栗子:自定義指令
//定義放在using之前
#define TEST
using ***
//執行代碼部分
#if TEST
//當我們注釋掉定義時,VS中代碼塊內容也會自動置灰
Debug.Log("你好呀");
#endif
系統內置預處理指令總結
官網地址:https://docs.unity3d.com/2019.1/Documentation/Manual/PlatformDependentCompilation.html
Unity支持的平台#define指令如下:
從Unity 2.6.0開始,你可以有選擇地編譯代碼。可用的選項取決於您正在編輯的編輯器的版本。給定版本號XYZ(例如,2.6.0),Unity公開以下格式的三個全局#define指令:UNITY_X,UNITY_X_Y和UNITY_X_Y_Z。
從Unity 5.3.4開始,您可以根據Unity編譯或執行給定代碼所需的最早版本的Unity來選擇性地編譯代碼。給定與上述(XYZ)相同的版本格式,Unity 將以UNITY_X_Y_OR_NEWER格式公開一個全局#define ,可用於此目的。