使用C#的Conditional特性與Unity編輯器宏命令作條件編譯

概要

在傳統的C#項目中,用Conditional特性作條件編譯時,須要在Visual Studio中項目的屬性裏添加上條件編譯符號,用法參考這篇文章編輯器

而在Unity項目中,條件編譯符號須要在Unity Editor編輯器中添加。函數

爲何要用條件編譯

Unity中最多見的使用條件編譯的狀況就是分平臺編譯不一樣的代碼片斷。因爲Unity是跨平臺的,不一樣平臺有不一樣的特性,咱們常常能見到 #if...#endif 來作條件編譯的代碼塊。性能

另外一種常見用法是,例如在編輯器下運行時輸出日誌,而在打包真機調試時爲了節省性能須要關閉日誌(在Update()函數中每幀輸出日誌很耗性能)。此時能夠把輸出日誌的函數使用Conditional特性來標記上,只有在Unity編輯器中開啓了指定的宏命令,這個輸出日誌的函數才能被編譯,便可很方便地開關日誌。ui

例子

namespace UnityEngine
{
    public static class DebugExtension
    {
        [Conditional("EnableLog")]
        public static void Logger(this object obj, string message)
        {
            Debug.Log(message);
        }
   }
}

上面的代碼中,經過C#的擴展方法,給全部的System.Object類添加了一個Logger()方法,該方法被標記爲[Conditional("EnableLog")]。須要在Unity編輯器中添加上EnableLog宏命令,該方法才能被編譯。this

Unity編輯器添加宏命令在File - Build Settings - Player Settings - Other Settings中,以下圖。spa

輸入了EnableLog後,上面的Logger()方法才能被編譯。若是去掉EnableLog,全部調用了Logger()函數的代碼也不會被編譯!.net

 this.Logger("日誌擴展類中的方法。該方法須要在Unity編輯器中添加宏命令EnableLog才能被編譯!");
相關文章
相關標籤/搜索