zoukankan      html  css  js  c++  java
  • 使用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才能被编译!");
  • 相关阅读:
    hiveserver2 with kerberos authentication
    python Basic usage
    python Quicksort demo
    Python HeapSort
    mrunit for wordcount demo
    CCDH证书
    Hadoop question list
    Hadoop Yarn core concepts
    Hadoop Resource
    Hadoop could not find or load main class
  • 原文地址:https://www.cnblogs.com/guxin/p/9235282.html
Copyright © 2011-2022 走看看