Unity多平台预处理

在开发中,特别是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.
 

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

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

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

我们也能够自定义宏定义,在PlayerSetting中定义:

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

  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.
时间: 09-18

Unity多平台预处理的相关文章

加速 Unity 不同平台打包的一种思路

Unity打包总的来说还不是一件特别复杂的事情, 但是我们知道任何关于跨平台(多线程等)这类问题, 总是会把事情搞得复杂起来. 以前项目的打包是通过Jenkins对一个工程下对不同平台多次打包, 不可避免需要切换不同平台, 因而十分耗费时间, 之后改进了一种办法, 针对不同平台单独创建文件夹, 单独从SVN同步, 单独打包. 这种做法的主要问题是项目大起来之后, 整体占用空间太大, 我们用的Mac Pro还是500G的, 两个项目同时用, 硬盘更是吃紧. 最近我优化了一种方法, Unity针对不

TYPESDK手游聚合SDK客户端设计思路与架构之四:unity开发平台部分结构设计和思路

在上一篇<iOS平台接口设计及思路>中我们阐述了ios平台的接口结构和思路.在这里我们将阐述unity平台下的接口结构和思路. unity平台是开发平台,我们的程序代码是在这个ide下堆叠的.unity端并不需要过多的考虑不同运行平台(安卓/iOS)上的底层机制是如何实现的,本身unity已经做了相应的处理,我们只需要知道自己当前的运行平台是什么样的,然后做好相关的平台差异 2.对不同运行平台(安卓/iOS)能自适配 化接口调用就行. 因为unity平台是开发平台,游戏渠道的差异性我们在运行平

unity 各平台本地文件的读取目录

在win上,将配置文件放在了 Application.dataPath 目录下,编辑状态下,测试通过.发布为exe后,读取失败.后来将配置文件放到生成的_data文件下,通过. 当然想到以后发布到其他平台,在移动端下 Application.persistentDataPath  才是移动端可用的保存生成文件的地方,放到resource中打包后不可以更改了,放到Application .dataPath中移动端是没有访问权限的.需要修改的文件建议放在Application.persistentD

Unity各平台路径总结

路径是Unity开发中令人头疼的一个问题,根据我的开发经验,现将开发中遇到的路径问题总结如下: 1. 如何读取Application.streamingAssetsPath下的文件? Edit.iOS平台可以使用File类来读取.Android平台无法使用File类读取. 通用的方式为使用WWW进行加载,并且除了Android平台以外,其他平台路径之前需要加"file://". 2. 权限问题  Application.persistentDataPath路径下的文件可读可写,Appl

几种Unity运行平台的判断

这里就介绍几种常见的,也是便于使用的几种平台判断的方法. 1.先说第一种,也是我用的顺手的一个.利用RuntimePlatform判断,API上的解释是[The platform application is running. Returned by Application.platform.] 举个栗子:if (Application.platform == RuntimePlatform.WindowsEditor)  { } 一般常用的是三个平台,安卓[Android],苹果[Iphone

Unity移动平台使用顶点动画或UV动画的问题。

都是精度问题,移动平台开发针对大量性能不一的GPU.各种无法预料的问题. UV动画出现卡顿,解决方案,限制UV的范围.只能缓解. 涉及到_Time的使用时,很大几率会出现问题.不管是使用_Time进行UV顶点,还是顶点动画,在一些移动设备尤其是旧的移动设备上,shader mode 2.0,fragment shader精度低的情况下,基本上都会有问题.

Unity判断平台

方式一:Application.platform 不管当前在BuildSetting上选择的是什么平台,Windows平台下,一定会返回RuntimePlatfrom.WindowEditor,即返回的是当前真实的运行环境 方式二:#if UNITY_X 如果是Eidtor状态下,BuildSetting上选择的是Android平台,那么UNITY_EDITOR和UNITY_ANDROID都会被编译

unity windowEditor平台下鼠标左键控制摄像机的视角

工作的原因,今天就只写了unity下的鼠标左键控制摄像机的视角左右上下调节:明天,补齐.[有诸多参考,着实是需要多多加油的] using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; public class CameraMove : MonoBehaviour { public Vector3 target; private Vec

unity 判断平台(安卓,iOS还是编辑器)

两种方式 --------------- C预处理器编译判断 --------------- #if UNITY_IOS // ... iOS项目才会编译 #elif UNITY_ANDROID // ... apk 或 iOS项目才会编译 #elif UNITY_EDITOR // ... UNITY调试时候才编译 #endif --------------- 代码运行时判断 --------------- if(Application.platform == RuntimePlatform.