Unity判断所在平台编译

依赖于平台的编译

官方API

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

您可以在Unity Editor中运行此代码,这样您就可以专门为目标平台编译代码并在编辑器中对其进行测试!

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

属性:功能:
UNITY_EDITOR#define指令,用于从游戏代码中调用Unity Editor脚本。
UNITY_EDITOR_WINWindows上编辑器代码的#define指令。
UNITY_EDITOR_OSXMac 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#define指令,用于编译/执行Wii控制台的代码。
UNITY_IOS#define指令,用于编译/执行iOS平台的代码。
UNITY_IPHONE已过时。请改用UNITY_IOS
UNITY_ANDROID适用于Android平台的#define指令。
UNITY_PS4用于运行PlayStation 4代码的#define指令。
UNITY_XBOXONE执行Xbox One
 #define指令代码。
UNITY_TIZENTizen平台的#define指令。
UNITY_TVOSApple TV平台的#define指令。
UNITY_WSA

通用Windows平台

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

UNITY_WSA_10_0通用Windows平台的#define指令。另外,在针对.NET Core编译C#文件时定义了WINDOWS_UWP
UNITY_WINRTUNITY_WSA相同。
UNITY_WINRT_10_0相当于UNITY_WSA_10_0
UNITY_WEBGLWebGL
 #define指令。
UNITY_FACEBOOKFacebook平台的#define指令(WebGL或Windows独立版)。
UNITY_ADS#define指令,用于从您的游戏代码中调用Unity Ads方法。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_1Unity 5.0.1次要版本的#define指令。

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

支持的#define指令是:

  
CSHARP_7_3_OR_NEWER在构建支持C#7.3或更高版本的脚本时定义。
ENABLE_MONO为Mono编写后端#define脚本。
ENABLE_IL2CPP用于IL2CPP的
脚本后端#define 。
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_LEGACY在Mono和IL2CPP上针对.NET 2.0或.NET 2.0子集API兼容级别构建脚本时定义。
NET_4_6在Mono和IL2CPP上针对.NET 4.x API兼容级别构建脚本时定义。
NET_STANDARD_2_0在Mono和IL2CPP上针对.NET Standard 2.0 API兼容级别构建脚本时定义。
ENABLE_WINMD_SUPPORT在IL2CPP和.NET上启用Windows运行时支持时定义。有关详细信息,请参阅Windows运行时支持

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

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

测试预编译的代码

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

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

选择PC,Mac和Linux作为目标平台的Build Settings窗口

选择PC,Mac和Linux作为目标平台的Build Settings窗口

选择要测试预编译代码的平台,然后单击“ 切换平台”以告知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更清晰,更不容易出错的方法来剥离函数。有关更多信息,请参阅ConditionalAttribute类。请注意,常见的Unity回调(例如Start(),Update(),LateUpdate(),FixedUpdate(),Awake())不受此属性的影响,因为它们是直接从引擎调用的,并且出于性能原因,它会不要考虑它们。

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

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

#elif UNITY_IOS
    Debug.Log("Unity iPhone");

#else
    Debug.Log("Any other platform");

#endif

平台自定义#defines

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

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

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值