您的位置:首页 > 移动开发 > Unity3D

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

2016-09-19 20:07 239 查看
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] 纯文本查看 复制代码

?
这是C/C++特殊指令,指示当前源文件在单次编译中仅仅被包含一次。

下一个是:

[C] 纯文本查看 复制代码

?
这个宏告诉编译器包含在这个块中的代码仅仅运行在基于windows的Metro上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: