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去在我们代码中增加推断了。我举个简单样例,例如以下:
上面假设我是在Editor状态下的话,就能看见打印出:
![](http://images.cnitblog.com/blog/487701/201401/170018469867.png)
我们也能够自定义宏定义,在PlayerSetting中定义:
![](http://images.cnitblog.com/blog/487701/201401/170020532369.png)
比如我在上面圈起来的地方填写一个CUSTOM_ITF这个预编译指令。然后在DebugPlatformMesaage函数尾部增加这句话
然后我们执行看下,你就能在控制台看见我们输出的信息了:
![](http://images.cnitblog.com/blog/487701/201401/170034371423.png)
当我们把我们自己定义的宏定义给去掉的时候,我们打印的信息就不会出来。
这可能看起来比之前的更难度,但是不要担心,我将解释一下。
整个头文件的意思是展示出你当前编译代码所基于的平台。这意味着你可以在windows上用visual studio轻松地编译代码。
[C] 纯文本查看 复制代码
?
这是C/C++特殊指令,指示当前源文件在单次编译中仅仅被包含一次。
下一个是:
[C] 纯文本查看 复制代码
?
这个宏告诉编译器包含在这个块中的代码仅仅运行在基于windows的Metro上。
此外,你可以在编辑器下执行一些代码用于测试而不影响你编译到手机或者其他平台的代码。
平台定义:
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状态下的话,就能看见打印出:
![](http://images.cnitblog.com/blog/487701/201401/170018469867.png)
我们也能够自定义宏定义,在PlayerSetting中定义:
![](http://images.cnitblog.com/blog/487701/201401/170020532369.png)
比如我在上面圈起来的地方填写一个CUSTOM_ITF这个预编译指令。然后在DebugPlatformMesaage函数尾部增加这句话
//新加入的内容 #if CUSTOM_ITF customMsg = "我自己定义了预编译"; #endif Debug.Log(customMsg);
然后我们执行看下,你就能在控制台看见我们输出的信息了:
![](http://images.cnitblog.com/blog/487701/201401/170034371423.png)
当我们把我们自己定义的宏定义给去掉的时候,我们打印的信息就不会出来。
#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] 纯文本查看 复制代码
?
相关文章推荐
- unity Platform Dependent Compilation(平台依赖编译)
- Unity3D的Android移动之路之平台依赖编译
- Unity不同平台生成中预处理的注意点
- unity平台的预处理
- unity平台的预处理
- unity平台的预处理
- Unity不同平台生成中预处理的注意点
- Unity平台的预处理
- unity平台的预处理
- Unity区分平台编译
- Unity平台的预处理
- [unity3d]unity平台的预处理
- [unity3d]unity平台的预处理
- Unity不同平台生成中预处理的注意点
- unity平台的预处理
- Unity不同平台生成中预处理的注意点
- [unity3d]unity平台的预处理
- Unity3d依赖于平台的编译
- Windows/Linux平台编译Caffe,不依赖GPU模式
- 【Unity】防反编译之windows平台加密dll