Unity3D平台的预处理

在开发中,特别是unity的跨平台中,我们经常会在各个平台游走,如安卓版,苹果版,PC版......。在此不同的平台上,有可能我们需要做不同的操作。然而我们就可以用unity的自带的平台宏定义方式来做平台的判断。Unity帮我们定义了如下平台预处理:

 名称  描述
UNITY_EDITOR Define for calling Unity Editor scripts from your game code.
UNITY_STANDALONE_OSX Platform define for compiling/executing code specifically for Mac OS (This includes Universal, PPC and Intel architectures).
UNITY_DASHBOARD_WIDGET Platform define when creating code for Mac OS dashboard widgets.
UNITY_STANDALONE_WIN Use this when you want to compile/execute code for Windows stand alone applications.
UNITY_STANDALONE_LINUX Use this when you want to compile/execute code for Linux stand alone applications.
UNITY_STANDALONE Use this to compile/execute code for any standalone platform (Mac, Windows or Linux).
UNITY_WEBPLAYER Platform define for web player content (this includes Windows and Mac Web player executables).
UNITY_WII Platform define for compiling/executing code for the Wii console.
UNITY_IPHONE Platform define for compiling/executing code for the iPhone platform.
UNITY_ANDROID Platform define for the Android platform.
UNITY_PS3 Platform define for running PlayStation 3 code.
UNITY_XBOX360 Platform define for executing Xbox 360 code.
UNITY_NACL Platform define when compiling code for Google native client (this will be set additionally to UNITY_WEBPLAYER).
UNITY_FLASH Platform define when compiling code for Adobe Flash.
 

 

   以后我们可以根据如上宏定义就可以去轻而易举的很容易去在我们代码中加入判断了。我举个简单例子,如下:

[csharp]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class Recompile : MonoBehaviour  
  5. {  
  6.   
  7.     private string platform = string.Empty;  
  8.     // Use this for initialization  
  9.     void Start()  
  10.     {  
  11.         DebugPlatformMesaage();  
  12.     }  
  13.   
  14.     void DebugPlatformMesaage()  
  15.     {  
  16.  
  17. #if UNITY_EDITOR  
  18.         platform = "hi,大家好,我是在unity编辑模式下";  
  19. #elif UNITY_XBOX360  
  20.        platform="hi,大家好,我在XBOX360平台";  
  21. #elif UNITY_IPHONE  
  22.        platform="hi,大家好,我是IPHONE平台";  
  23. #elif UNITY_ANDROID  
  24.        platform="hi,大家好,我是ANDROID平台";  
  25. #elif UNITY_STANDALONE_OSX  
  26.        platform="hi,大家好,我是OSX平台";  
  27. #elif UNITY_STANDALONE_WIN  
  28.        platform="hi,大家好,我是Windows平台";  
  29. #endif  
  30.         Debug.Log("Current Platform:" + platform);  
  31.     }  
  32. }  

上面如果我是在Editor状态下的话,就能看见打印出:     

 

我们也可以自己定义宏定义,在PlayerSetting中定义:

 

例如我在上面圈起来的地方填写一个CUSTOM_ITF这个预编译指令。然后在DebugPlatformMesaage函数尾部加入这句话

[csharp]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. //新添加的内容  
  2. #if CUSTOM_ITF  
  3.         customMsg = "我自定义了预编译";  
  4. #endif  
  5.         Debug.Log(customMsg);  

然后我们运行看下,你就能在控制台看见我们输出的信息了:

 

    当我们把我们自定义的宏定义给去掉的时候,我们打印的信息就不会出来。

 

除了这些,unity中还有各个版本的宏定义,一般开发插件的大牛都会用到。

 

UNITY_2_6 Platform define for the major version of Unity 2.6.
UNITY_2_6_1 Platform define for specific version 1 from the major release 2.6.
UNITY_3_0 Platform define for the major version of Unity 3.0.
UNITY_3_0_0 Platform define for the specific version 0 of Unity 3.0.
UNITY_3_1 Platform define for major version of Unity 3.1.
UNITY_3_2 Platform define for major version of Unity 3.2.
UNITY_3_3 Platform define for major version of Unity 3.3.
UNITY_3_4 Platform define for major version of Unity 3.4.
UNITY_3_5 Platform define for major version of Unity 3.5.
UNITY_4_0 Platform define for major version of Unity 4.0.
UNITY_4_0_1 Platform define for major version of Unity 4.0.1.
UNITY_4_1 Platform define for major version of Unity 4.1.
UNITY_4_2 Platform define for major version of Unity 4.2.
 

 

<span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 14px;">    其实预编译在我们对unity开发的时候还有一个很好的作用,我们Debug的时候是IO,其实会消耗CPU的,从而影响了我们的性能,我们想在开发的时候进行Debug,但不想在到处的时候打印出,在这个时候我们就可以用预编译来判断他是否是在Editor状态下,从而做出相应的操作!</span><br style="margin: 0px; padding: 0px;" /></span>
<span style="margin: 0px; padding: 0px; font-size: 14px;">    预处理命令从来不会被翻译为可执行中的命令,但会影响编译过程的各个方面。例如:使用预处理器指令可以禁止编译器编译代码的某一部分,如果计划发布两个版本的代码,即基本版本和有更多功能的企业版本,即可以使用这些预处理指令。在编译软件的基本版本时,使用预处理器指令还可以禁止编译器编译于额外相关的代码。另外,在编写提供调试信息的代码时,也可以使用预处理器指令。在销售软件时,一般不希望编译这部分代码。预处理器指令开头都有符号#。我们unity的不是分专业版和免费版吗,其实有可能就是用到了预编译,从而编译不同的版本。<br style="margin: 0px; padding: 0px;" /><br style="margin: 0px; padding: 0px;" />  <br style="margin: 0px; padding: 0px;" />  如果对预编译不熟的同学可以去百度,或者谷歌下,我也是在查阅后才明白的!</span>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值