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


概要

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

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

為什么要用條件編譯

Unity中最常見的使用條件編譯的情況就是分平台編譯不同的代碼片段。由於Unity是跨平台的,不同平台有不同的特性,我們經常能見到 #if...#endif 來做條件編譯的代碼塊。

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

例子

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宏命令,該方法才能被編譯。

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

輸入了EnableLog后,上面的Logger()方法才能被編譯。如果去掉EnableLog,所有調用了Logger()函數的代碼也不會被編譯!

 this.Logger("日志擴展類中的方法。該方法需要在Unity編輯器中添加宏命令EnableLog才能被編譯!");

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM