---
title: "Unity与C#预处理指令"
author: "Perrin Yong"
author_profile: https://www.pystone.net/profile/
published_by: "Perrin Yong"
canonical: https://www.pystone.net/notes/unity-csharp-preprocessor-directives/
type: note
content_role: unspecified
visibility: public
id_stability: rename-stable
source_path: "10-计算机、信息技术与工程/05-游戏图形与运行时/Unity/Unity与C#预处理指令.md"
content_hash: c9dfffffbeeefc7da3ce873580adc77e5ba5c349bee9ea8215bdf705e7368d20
knowledge_version: 224c990773de.5fa8af6e39fa
site_commit: 224c990773de166d23a886306577dd90379529ce
notes_commit: 5fa8af6e39fa3891d1b9b4832bfa6c4e0ecaaf0a
---
# Unity与C#预处理指令

> 创建时间：2020/5/20 18:31

## Unity&C预处理指令
## 预处理指令（条件编译）

预处理器指令指导编译器在实际编译开始之前对信息进行预处理。
所有的预处理器指令都是以 # 开始。且在一行上，只有空白字符可以出现在预处理器指令之前。预处理器指令不是语句，所以它们不以分号（;）结束。
C# 编译器没有一个单独的预处理器，但是，指令被处理时就像是有一个单独的预处理器一样。在 C# 中，预处理器指令用于在条件编译中起作用。与 C 和 C++ 不同的是，它们不是用来创建宏。一个预处理器指令必须是该行上的唯一指令。

```csharp
class Program
{
    static void Main(string[] args)
    {
        dynamic dyn = 1;
        object obj = 1;
        dyn = dyn + 3;
        //obj = obj + 3; 报错

        // Rest the mouse pointer over dyn and obj to see their
        // types at compile time.
        System.Console.WriteLine(dyn.GetType());
        System.Console.WriteLine(obj.GetType());
    }
}

```

### Conditional特性

可以把输出日志的函数使用Conditional特性来标记上，只有在Unity编辑器中开启了指定的宏命令，这个输出日志的函数才能被编译，即可很方便地开关日志。
`[Conditional("EnableLog")]`
需要在Unity编辑器中添加上EnableLog宏命令，该方法才能被编译。

## Unity自带的一些宏定义

UNITY_EDITOR Unity编辑器
UNITY_EDITOR_WIN Windows 操作系统.
UNITY_EDITOR_OSX macos操作系统
UNITY_STANDALONE_OSX 专门为macos（包括Universal, PPC，Intel architectures）平台的定义
UNITY_STANDALONE_WIN 专门为windows平台的定义
UNITY_STANDALONE_LINUX 专门为Linux平台的定义
UNITY_STANDALONE 独立平台 (Mac OS X, Windows or Linux).
UNITY_WII WII 游戏机平台
UNITY_IOS iOS系统平台
UNITY_IPHONE iPhone
UNITY_ANDROID android系统平台
UNITY_PS4 ps4平台
UNITY_SAMSUNGTV 三星TV平台
UNITY_XBOXONE Xbox One 平台
UNITY_TIZEN Tizen 平台
UNITY_TVOS Apple TV 平台
UNITY_WSA #define directive for Universal Windows Platform. Additionally, NETFX_CORE is defined when compiling C# files against .NET Core and using .NET scripting backend.
UNITY_WSA_10_0 #define directive for Universal Windows Platform. Additionally WINDOWS_UWP is defined when compiling C# files against .NET Core.
UNITY_WINRT UNITY_WSA.
UNITY_WINRT_10_0 UNITY_WSA_10_0
UNITY_WEBGL #define directive for WebGL.
UNITY_FACEBOOK faceBook平台(WebGL or Windows standalone).
UNITY_ADS 调用广告方法，版本 5.2 以后
UNITY_ANALYTICS 调用unity分析服务，版本5.2以后
UNITY_ASSERTIONS 控制指令的过程

UNITY_5 unity5版本, 包含所有的5.x.y版本
UNITY_5_0 Unity5.0版本,包含所有的5.0.x版本
UNITY_5_0_1 Unity5.0.1版本

## 自定义宏定义

File - Build Settings - Player Settings - Other Settings
多个用分号隔开
