Unity多平台自定义宏和Scripting Define Symbols的使用
发表于2018-06-04
本篇文章主要和大家介绍多平台自定义宏和自定义符号的使用。
平台定义
- UNITY_EDITOR 编辑器调用。
- UNITY_STANDALONE_OSX 专门为Mac OS(包括Universal,PPC和Intelarchitectures)平台的定义。
- UNITY_DASHBOARD_WIDGET Mac OS Dashboard widget (Mac OS仪表板小部件)。
- UNITY_STANDALONE_WIN Windows 操作系统。
- UNITY_STANDALONE_LINUX Linux的独立的应用程序。
- UNITY_STANDALONE 独立的平台(Mac,Windows或Linux)。
- UNITY_WEBPLAYER 网页播放器(包括Windows和Mac Web播放器可执行文件)。
- UNITY_WII Wii游戏机平台。
- UNITY_IPHONE iPhone平台。
- UNITY_ANDROID Android平台。
- UNITY_PS3 PlayStation 3。
- UNITY_XBOX360 Xbox 360。
- UNITY_NACL 谷歌原生客户端(使用这个必须另外使用UNITY_WEBPLAYER)。
- UNITY_FLASH Adobe Flash
先给大家介绍两个常用到的宏
1.#region 直接上代码演示
using UnityEngine; using System.Collections; public class Test : MonoBehaviour { #region 收缩自如 int index = 0; void MyFun() { } #endregion }
那region宏加上后是什么效果呢?我们来点下#region左边增加的 “—”号。
看到效果了把!很多行代码收缩在一行,并只显示了自己的注释。region宏可以让我们很轻松的去整理代码。
2.#if UNITY_ 根据运行设备来选择性执行某块代码。
#if UNITY_IPHONE Debug.Log("UNITY_IPHONE"); #elif UNITY_ANDROID Debug.Log("UNITY_ANDROID"); #elif UNITY_EDITOR Debug.Log("UNITY_EDITOR"); #endif
这里区分了 iphone、安卓和编辑器三个平台,当然还有更多平台。 这个在做移动端时会经常用到。
介绍完Unity自带的宏后,我们来学习一下如何去自定义宏。
一、首先我们先了解一下自定义宏的作用
其实是类似于上面刚介绍的第二个宏,但我们不是区分平台,而是根据自己的定义去区分。啥叫根据自己定义区分那?按步骤操作完你就明白了。
二、比如我们先新建宏,宏的名称根据自己情况定,这里我们根据区分发布版本来定义宏,分别为“RELEASE”和“DEVELOP”,也就是我们想在开发模式下 去执行DEVELOP下的内容;在想要正式发布时 去执行RELEASE下的内容。
三、那么我们就可以这样来写:
using UnityEngine; using System.Collections; public class Test : MonoBehaviour { string url = string.Empty; // 服务器地址 void Start() { #if DEVELOP url = "dev.s.taobao.com"; #elif RELEASE url = "rel.s.taobao.com"; #endif Debug.Log(url); } }
四、这一步我们选择当前项目的平台。打开“BuildSetting”,先在“Platform”中选择这个项目的平台,然后点击“Switch Platform”。我当前项目是属于移动端安卓平台,见下图。
五、好,我们在代码中使用了自定义的宏,而且已经确定好了平台,那我们如何来决定当前是在DEVELOP还是RELEASE宏下呢?现在我们来做这件事情,再次打开“BuildSetting”界面,并点击“PlayerSetting”,选择好对应版本,在“Scripting Define Symbols”下 去指定当前执行哪个宏(多个宏以;隔开),在这我们输入“RELEASE” 来测试下工程。
六、来运行下Unity 查看我们的输出内容:
调试信息在程序设计过程中的作用是至关重要的。如果游戏设计完成后。这些调试信息就不应该在程序运行过程中继续调用。
可以用过设置脚本定义符号来确定游戏运行时是否执行调试信息输出代码
using UnityEngine; using System.Collections; public class ShowDebugInfo : MonoBehaviour { void Start() { #if SHOW_DEBUG_MESSAGES Debug.Log("Pos: " + transform.position.ToString()); #endif Debug.Log("Start funciton called"); } }
没有在Configuration中指定脚本定义符号时 在 "#if 定义的符号名“ 和”#endif" 之间的代码会被编译器忽略,而不参与编译。与此相反,则所有代码都会参与编译。