Unity平台的预处理及依赖于平台的编译

Unity包含了一些预编译处理指令,让你可以专门的针对不同的平台分开编译和执行一段代码,这一功能被命名为“依赖于平台的编译”。

此外,你可以在编辑器下执行一些代码用于测试而不影响你编译到手机或者其他平台的代码。


平台定义:

Unity对您的脚本支持的平台定义有:


UNITY_EDITOR                                用于执行UnityEditor模式下的脚本的定义.
UNITY_STANDALONE_OSX               用于编译和执行专门针对Mac OS的代码的平台定义.
UNITY_DASHBOARD_WIDGET          为创建Dashboard widget工具的代码的平台定义.
UNITY_STANDALONE_WIN               专门为Windows的独立应用程序编译/执行代码的平台定义.
UNITY_STANDALONE_LINUX            专门为Linux的独立应用程序编译/执行代码的平台定义.
UNITY_STANDALONE                       为任何平台的独立应用程序编译/执行代码的平台定义(包括Windows、Mac、Linux).
UNITY_WEBPLAYER                          网页播放器的内容的平台定义 (这包括Windows和Mac的Web播放器的可执行文件).
UNITY_WII                                      专门为Wii游戏机编译和执行代码的平台定义.
UNITY_IPHONE                                为iPhone平台的编译和执行代码的平台定义.
UNITY_ANDROID                             为安卓平台的编译和执行代码的平台定义.
UNITY_PS3                                      为PS3编译和执行代码的平台定义.
UNITY_XBOX360                               为XBOX360编译和执行代码的平台定义.
UNITY_NACL                                    为谷歌客户端编译和执行代码的平台定义. (这是对 UNITY_WEBPLAYER的补充).
UNITY_FLASH                                   为AdobeFlash编译和执行代码的平台定义.
UNITY_METRO                                 包含在这个块中的代码仅仅运行在基于windows的Metro上


 
 
你也可以为了区分Unity引擎的不同版本有选择的编译代码.目前支持的是:

UNITY_2_6                         Unity 2.6的平台定义.

UNITY_2_6_1                     Unity 2.6.1的平台定义.

UNITY_3_0                         Unity 3.0的平台定义.

UNITY_3_0_0                     Unity 3.0.0的平台定义.

UNITY_3_1                         Unity 3.1的平台定义..

UNITY_3_2                         Unity 3.2的平台定义.

UNITY_3_3                         Unity 3.3的平台定义.

UNITY_3_4                         Unity 3.4的平台定义.

UNITY_3_5                         Unity 3.5的平台定义.

UNITY_4_0                         Unity 4.0的平台定义.

UNITY_4_0_1                     Unity 4.0.1的平台定义.

UNITY_4_1                         Unity 4.1的平台定义.

 以后我们能够依据如上宏定义就能够去轻而易举的非常easy去在我们代码中增加推断了。我举个简单样例,例如以下:

using UnityEngine;  
using System.Collections;  
  
public class Recompile : MonoBehaviour  
{  
  
    private string platform = string.Empty;  
    // Use this for initialization  
    void Start()  
    {  
        DebugPlatformMesaage();  
    }  
  
    void DebugPlatformMesaage()  
    {  
#if UNITY_EDITOR  
        platform = "hi,大家好,我是在unity编辑模式下";  
#elif UNITY_XBOX360  
       platform="hi,大家好,我在XBOX360平台";  
#elif UNITY_IPHONE  
       platform="hi,大家好,我是IPHONE平台";  
#elif UNITY_ANDROID  
       platform="hi,大家好,我是ANDROID平台";  
#elif UNITY_STANDALONE_OSX  
       platform="hi,大家好,我是OSX平台";  
#elif UNITY_STANDALONE_WIN  
       platform="hi,大家好,我是Windows平台";  
#endif  
        Debug.Log("Current Platform:" + platform);  
    }  
}  
上面假设我是在Editor状态下的话,就能看见打印出:        我们也能够自定义宏定义,在PlayerSetting中定义:   比如我在上面圈起来的地方填写一个CUSTOM_ITF这个预编译指令。然后在DebugPlatformMesaage函数尾部增加这句话

//新加入的内容  
#if CUSTOM_ITF  
        customMsg = "我自己定义了预编译";  
#endif  
        Debug.Log(customMsg);  

然后我们执行看下,你就能在控制台看见我们输出的信息了:       当我们把我们自己定义的宏定义给去掉的时候,我们打印的信息就不会出来。
#pragma once 
 
#if UNITY_METRO 
#define EXPORT_API __declspec(dllexport) __stdcall 
#elif UNITY_WIN 
#define EXPORT_API __declspec(dllexport) 
#else 
#define EXPORT_API 
#endif
这可能看起来比之前的更难度,但是不要担心,我将解释一下。
整个头文件的意思是展示出你当前编译代码所基于的平台。这意味着你可以在windows上用visual studio轻松地编译代码。

[C]  纯文本查看  复制代码
?
 
#pragma once
这是C/C++特殊指令,指示当前源文件在单次编译中仅仅被包含一次。

下一个是:
[C]  纯文本查看  复制代码
?
 
#if UNITY_METRO
这个宏告诉编译器包含在这个块中的代码仅仅运行在基于windows的Metro上。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值