unity预编译平台API

依赖于平台的编译

Unity包含一个称为Platform Dependent Compilation的功能这包含一些预处理器指令,可让您对脚本进行分区,以便为受支持的平台之一专门编译和执行一段代码。

你可以在Unity编辑器中运行这个代码,这样你就可以专门为你的目标平台编译代码并在编辑器中测试它!

平台#define指令

Unity支持的平台#define指令如下:






















































属性:

功能:

UNITY_EDITOR

从游戏代码调用Unity编辑器脚本的#define指令。

UNITY_EDITOR_WIN

Windows上编辑器代码的#define指令。

UNITY_EDITOR_OSX

Mac OS X上编辑器代码的#define指令

UNITY_STANDALONE_OSX

#define伪指令,专门用于编译/执行Mac OS X(包括Universal,PPC和Intel体系结构)的代码。

UNITY_STANDALONE_WIN

#define指令,用于编译/执行专门针对Windows独立应用程序的代码。

UNITY_STANDALONE_LINUX

#define指令,用于编译/执行专门针对Linux独立应用程序的代码。

UNITY_STANDALONE

#define伪指令,用于编译/执行任何独立平台(Mac OS X,Windows或Linux)的代码。

UNITY_WII

编译/执行Wii控制台代码的#define指令。

UNITY_IOS

编译/执行iOS平台代码的#define指令。

UNITY_IPHONE

已过时。改用UNITY_IOS

UNITY_ANDROID

Android平台的#define指令。

UNITY_PS4

运行PlayStation 4代码的#define指令。

UNITY_SAMSUNGTV

执行三星电视代码的#define指令。

UNITY_XBOXONE

执行Xbox One代码的#define指令。

UNITY_TIZEN

Tizen平台的#define指令。

UNITY_TVOS

Apple TV平台的#define指令。

UNITY_WSA

通用Windows平台的#define指令。此外,NETFX_CORE是在针对.NET
Core编译C#文件并使用.NET脚本后端时定义的。

UNITY_WSA_10_0

通用Windows平台的#define指令。另外,WINDOWS_UWP是在针对.NET
Core编译C#文件时定义的。

UNITY_WINRT

UNITY_WSA相同

UNITY_WINRT_10_0

相当于UNITY_WSA_10_0

UNITY_WEBGL

WebGL的#define指令。

UNITY_FACEBOOK

Facebook平台的#define指令(WebGL或Windows独立版)。

UNITY_ADS

从游戏代码调用Unity Ads方法的#define指令。版本5.2及以上。

UNITY_ANALYTICS

从游戏代码调用Unity Analytics方法的#define指令。版本5.2及以上。

UNITY_ASSERTIONS

断言控制过程的#define指令。


从Unity 2.6.0开始,你可以有选择地编译代码。可用的选项取决于您正在编辑的编辑器的版本。给定版本号XYZ(例如,2.6.0),Unity公开以下格式的三个全局#define指令:UNITY_XUNITY_X_YUNITY_X_Y_Z

下面是在Unity 5.0.1中公开的#define指令的一个例子:












UNITY_5

在每个5.XY版本中公开的Unity 5发行版本的#define指令。

UNITY_5_0

Unity 5.0的主要版本的#define指令,在每个5.0.Z版本中公开。

UNITY_5_0_1

#5.0版本的#define指令。


从Unity 5.3.4开始,您可以根据Unity编译或执行给定代码所需的最早版本的Unity来选择性地编译代码。给定与上述(XYZ相同的版本格式,Unity 将以UNITY_X_Y_OR_NEWER格式公开一个全局#define ,可用于此目的。

受支持的#define指令是:






















ENABLE_MONO

脚本后端#define for Mono。

ENABLE_IL2CPP

脚本后端#define for IL2CPP。

ENABLE_DOTNET

脚本后端#define for .NET。

NETFX_CORE

在.NET上针对.NET Core类库构建脚本时定义。

NET_2_0

在Mono和IL2CPP上针对.NET 2.0 API兼容级别构建脚本时定义。

NET_2_0_SUBSET

在Mono和IL2CPP上针对.NET 2.0 Subset API兼容级别构建脚本时定义。

NET_4_6

在Mono和IL2CPP上针对.NET 4.6 API兼容级别构建脚本时定义。

ENABLE_WINMD_SUPPORT

在IL2CPP和.NET上启用Windows运行时支持时定义。有关更多详细信息,请参阅Windows
Runtime支持


您可以使用DEVELOPMENT_BUILD #define来确定脚本是否在使用“Development Build”选项启用的播放器中运行。

您也可以根据脚本后端选择性地编译代码。

测试预编译的代码

以下是如何使用预编译代码的示例。它会打印一条消息,这取决于您为目标版本选择的平台。

首先,通过转到文件>构建设置,选择您要测试代码的平台这将显示Build Settings窗口; 从这里选择你的目标平台。

建立设置窗口,选择PC,Mac和Linux作为目标平台建立设置窗口,选择PC,Mac和Linux作为目标平台

选择要测试预编译代码的平台,然后单击“ 切换平台”,以告知Unity您定位的是哪个平台。

创建一个脚本并复制/粘贴以下代码:

// JS
function Awake() {
  #if UNITY_EDITOR
    Debug.Log("Unity Editor");
  #endif

  #if UNITY_IPHONE
    Debug.Log("Iphone");
  #endif

  #if UNITY_STANDALONE_OSX
    Debug.Log("Stand Alone OSX");
  #endif

  #if UNITY_STANDALONE_WIN
    Debug.Log("Stand Alone Windows");
  #endif    
}


// C#
using UnityEngine;
using System.Collections;

public class PlatformDefines : MonoBehaviour {
  void Start () {

    #if UNITY_EDITOR
      Debug.Log("Unity Editor");
    #endif

    #if UNITY_IOS
      Debug.Log("Iphone");
    #endif

    #if UNITY_STANDALONE_OSX
    Debug.Log("Stand Alone OSX");
    #endif

    #if UNITY_STANDALONE_WIN
      Debug.Log("Stand Alone Windows");
    #endif

  }          
}


要测试代码,请单击“ 播放模式”通过检查Unity控制台中的相关消息来确认代码的工作原理,具体取决于您选择的平台 - 例如,如果选择iOS,消息“Iphone”将设置为显示在控制台中。

请注意,在C#中,你可以使用一个CONDITIONAL属性,这是一个更干净,更不容易出错的剥离函数的方式。请参阅http://msdn.microsoft.com/en-us/library/4xssyw96(v=vs.90).aspx以获取更多信息。

除了基本的#if编译器指令之外,还可以在C#和JavaScript中使用多路测试:






#if UNITY_EDITOR Debug.Log("Unity Editor"); #elif UNITY_IOS Debug.Log("Unity iPhone"); #else Debug.Log("Any other platform"); #endif

平台自定义#defines

也可以通过提供自己的内容来添加到#define指令的内置选择中。打开播放器设置”的“ 其他设置”面板,然后导航到“ 脚本定义符号”文本框。


输入要为特定平台定义的符号的名称,用分号分隔。这些符号可以作为#if指令的条件,就像内置的符号一样。

全球定制#定义

您可以定义自己的预处理器指令来控制在编译时包含哪些代码。要做到这一点,你必须添加一个文本文件与额外的指令到资产文件夹。文件的名称取决于您使用的语言。扩展名是.rsp










C#(播放器和编辑器脚本)

<项目路径> /Assets/mcs.rsp

UnityScript

<项目路径> /Assets/us.rsp


例如,如果-define:UNITY_DEBUGmcs.rsp文件中包含单行#define伪指令将UNITY_DEBUG作为C#脚本的全局#define存在,编辑器脚本除外。

每次您对.rsp文件进行更改时,都需要重新编译以使其生效。您可以通过更新或重新导入单个脚本(.js或.cs)文件来完成此操作。

注意

如果你想修改全球唯一#define指令,使用脚本定义符号播放器设置,因为这涵盖了所有的编译器。如果您选择.rsp文件,则需要为Unity使用的每个编译器提供一个文件,而您不知道何时使用了一个或另一个编译器。

编辑器安装文件夹中包含mcs应用程序的“帮助”部分描述.rsp文件的使用您可以通过运行获得更多信息mcs -help

请注意.rsp文件需要匹配被调用的编译器。例如:


  • 当瞄准任何玩家或编辑器时,mcs被用于mcs.rsp

  • 靶向MS编译器时,CSC使用具有csc.rsp

依赖于平台的编译

Unity包含一个称为Platform Dependent Compilation的功能这包含一些预处理器指令,可让您对脚本进行分区,以便为受支持的平台之一专门编译和执行一段代码。

你可以在Unity编辑器中运行这个代码,这样你就可以专门为你的目标平台编译代码并在编辑器中测试它!

平台#define指令

Unity支持的平台#define指令如下:






















































属性:

功能:

UNITY_EDITOR

从游戏代码调用Unity编辑器脚本的#define指令。

UNITY_EDITOR_WIN

Windows上编辑器代码的#define指令。

UNITY_EDITOR_OSX

Mac OS X上编辑器代码的#define指令

UNITY_STANDALONE_OSX

#define伪指令,专门用于编译/执行Mac OS X(包括Universal,PPC和Intel体系结构)的代码。

UNITY_STANDALONE_WIN

#define指令,用于编译/执行专门针对Windows独立应用程序的代码。

UNITY_STANDALONE_LINUX

#define指令,用于编译/执行专门针对Linux独立应用程序的代码。

UNITY_STANDALONE

#define伪指令,用于编译/执行任何独立平台(Mac OS X,Windows或Linux)的代码。

UNITY_WII

编译/执行Wii控制台代码的#define指令。

UNITY_IOS

编译/执行iOS平台代码的#define指令。

UNITY_IPHONE

已过时。改用UNITY_IOS

UNITY_ANDROID

Android平台的#define指令。

UNITY_PS4

运行PlayStation 4代码的#define指令。

UNITY_SAMSUNGTV

执行三星电视代码的#define指令。

UNITY_XBOXONE

执行Xbox One代码的#define指令。

UNITY_TIZEN

Tizen平台的#define指令。

UNITY_TVOS

Apple TV平台的#define指令。

UNITY_WSA

通用Windows平台的#define指令。此外,NETFX_CORE是在针对.NET
Core编译C#文件并使用.NET脚本后端时定义的。

UNITY_WSA_10_0

通用Windows平台的#define指令。另外,WINDOWS_UWP是在针对.NET
Core编译C#文件时定义的。

UNITY_WINRT

UNITY_WSA相同

UNITY_WINRT_10_0

相当于UNITY_WSA_10_0

UNITY_WEBGL

WebGL的#define指令。

UNITY_FACEBOOK

Facebook平台的#define指令(WebGL或Windows独立版)。

UNITY_ADS

从游戏代码调用Unity Ads方法的#define指令。版本5.2及以上。

UNITY_ANALYTICS

从游戏代码调用Unity Analytics方法的#define指令。版本5.2及以上。

UNITY_ASSERTIONS

断言控制过程的#define指令。


从Unity 2.6.0开始,你可以有选择地编译代码。可用的选项取决于您正在编辑的编辑器的版本。给定版本号XYZ(例如,2.6.0),Unity公开以下格式的三个全局#define指令:UNITY_XUNITY_X_YUNITY_X_Y_Z

下面是在Unity 5.0.1中公开的#define指令的一个例子:












UNITY_5

在每个5.XY版本中公开的Unity 5发行版本的#define指令。

UNITY_5_0

Unity 5.0的主要版本的#define指令,在每个5.0.Z版本中公开。

UNITY_5_0_1

#5.0版本的#define指令。


从Unity 5.3.4开始,您可以根据Unity编译或执行给定代码所需的最早版本的Unity来选择性地编译代码。给定与上述(XYZ相同的版本格式,Unity 将以UNITY_X_Y_OR_NEWER格式公开一个全局#define ,可用于此目的。

受支持的#define指令是:






















ENABLE_MONO

脚本后端#define for Mono。

ENABLE_IL2CPP

脚本后端#define for IL2CPP。

ENABLE_DOTNET

脚本后端#define for .NET。

NETFX_CORE

在.NET上针对.NET Core类库构建脚本时定义。

NET_2_0

在Mono和IL2CPP上针对.NET 2.0 API兼容级别构建脚本时定义。

NET_2_0_SUBSET

在Mono和IL2CPP上针对.NET 2.0 Subset API兼容级别构建脚本时定义。

NET_4_6

在Mono和IL2CPP上针对.NET 4.6 API兼容级别构建脚本时定义。

ENABLE_WINMD_SUPPORT

在IL2CPP和.NET上启用Windows运行时支持时定义。有关更多详细信息,请参阅Windows
Runtime支持


您可以使用DEVELOPMENT_BUILD #define来确定脚本是否在使用“Development Build”选项启用的播放器中运行。

您也可以根据脚本后端选择性地编译代码。

测试预编译的代码

以下是如何使用预编译代码的示例。它会打印一条消息,这取决于您为目标版本选择的平台。

首先,通过转到文件>构建设置,选择您要测试代码的平台这将显示Build Settings窗口; 从这里选择你的目标平台。

建立设置窗口,选择PC,Mac和Linux作为目标平台建立设置窗口,选择PC,Mac和Linux作为目标平台

选择要测试预编译代码的平台,然后单击“ 切换平台”,以告知Unity您定位的是哪个平台。

创建一个脚本并复制/粘贴以下代码:

// JS
function Awake() {
  #if UNITY_EDITOR
    Debug.Log("Unity Editor");
  #endif

  #if UNITY_IPHONE
    Debug.Log("Iphone");
  #endif

  #if UNITY_STANDALONE_OSX
    Debug.Log("Stand Alone OSX");
  #endif

  #if UNITY_STANDALONE_WIN
    Debug.Log("Stand Alone Windows");
  #endif    
}


// C#
using UnityEngine;
using System.Collections;

public class PlatformDefines : MonoBehaviour {
  void Start () {

    #if UNITY_EDITOR
      Debug.Log("Unity Editor");
    #endif

    #if UNITY_IOS
      Debug.Log("Iphone");
    #endif

    #if UNITY_STANDALONE_OSX
    Debug.Log("Stand Alone OSX");
    #endif

    #if UNITY_STANDALONE_WIN
      Debug.Log("Stand Alone Windows");
    #endif

  }          
}


要测试代码,请单击“ 播放模式”通过检查Unity控制台中的相关消息来确认代码的工作原理,具体取决于您选择的平台 - 例如,如果选择iOS,消息“Iphone”将设置为显示在控制台中。

请注意,在C#中,你可以使用一个CONDITIONAL属性,这是一个更干净,更不容易出错的剥离函数的方式。请参阅http://msdn.microsoft.com/en-us/library/4xssyw96(v=vs.90).aspx以获取更多信息。

除了基本的#if编译器指令之外,还可以在C#和JavaScript中使用多路测试:






猜你喜欢

转载自blog.csdn.net/Fenglele_Fans/article/details/82259063