- 用户指南
- 资源商店 (Asset Store)
- 资源服务器 (Asset Server)(仅限团队许可证)
- 缓存服务器(仅限团队许可证)
- 幕后场景
- 创建游戏
- 运行时实例化预设 (Prefabs)
- 变换 (Transforms)
- 物理
- 添加随机的游戏元素
- 粒子系统(Particle Systems)
- Mecanim 动画系统
- 旧动画系统
- 导航网格 (Navmesh) 和寻路 (Pathfinding)(仅限专业版 (Pro))
- Sound (音频侦听器)
- 游戏界面元素
- 多玩家联网游戏
- iOS 开发入门
- Android 开发入门
- Blackberry 10 开发入门
- Metro:入门指南
- 本地客户端开发入门
- FAQ
- Advanced
- Vector Cookbook
- 资源包(仅限专业版)
- Graphics Features
- 资源数据库 (AssetDatabase)
- 构建播放器管道
- 分析器(仅限专业版)
- 光照贴图快速入门
- 遮挡剔除(仅限专业版)
- 相机使用技巧
- 运行时加载资源
- 通过脚本修改源资源
- 用程序生成网格几何体
- 富文本
- 在 Unity 工程 (Project) 中使用 Mono DLL
- 事件函数的执行顺序
- 移动优化实用指南
- Unity XCode 工程结构
- 优化图形性能
- 减少文件大小
- 理解自动内存管理
- 平台依赖编译
- 泛型函数
- 调试
- 插件(专业版/移动版特有功能)
- 文本场景文件格式(仅限专业版)
- 流媒体资源
- 启动时运行编辑器脚本代码
- 网络模拟
- VisualStudio C 集成
- 分析
- 检查更新
- 安装多版本 Unity
- 故障排除
- Unity 中的阴影
- Unity 中的 IME
- 对集成显卡进行优化
- 网络播放器 (Web Player) 部署
- 使用网络播放器中的信任链系统
平台依赖编译
Unity 包含名为“平台依赖编译 (Platform Dependent Compilation)”的功能。它包含一些预处理器指令,让您可以分割脚本,在支持的平台上专门编译和执行某一段代码。
此外,可以在编辑器中运行这一代码,从而为特定的手机/控制台编译代码并在编辑器中测试!
平台定义
Unity 支持的平台定义脚本有:
UNITY_EDITOR | 定义从游戏代码中调用 Unity 编辑器脚本。 |
UNITY_STANDALONE_OSX | 专门用于 Mac OS 编译/执行的代码(包括 Universal、PPC 和 Intel架构)的平台定义。 |
UNITY_DASHBOARD_WIDGET | 为 Mac OS 仪表板小部件创建代码时的平台定义。 |
UNITY_STANDALONE_WIN | 为 Windows 独立应用程序编译/执行代码时使用的功能。 |
UNITY_STANDALONE_LINUX | 为 Linux 独立应用程序编译/执行代码时使用的功能。 |
UNITY_STANDALONE | 此功能可用来为任何独立平台(Mac、Windows 或 Linux)编译/执行代码。 |
UNITY_WEBPLAYER | 网络播放器内容的平台定义(包括 Windows 和 Mac 网络播放器可执行文件)。 |
UNITY_WII | 为 Wii 控制台编译/执行代码的平台定义。 |
UNITY_IPHONE | 为 iPhone 平台编译/执行代码的平台定义。 |
UNITY_ANDROID | Android 平台的平台定义。 |
UNITY_PS3 | 运行 PlayStation 3 代码的平台定义。 |
UNITY_XBOX360 | 执行 Xbox 360 代码的平台定义。 |
UNITY_NACL | Google 本地客户端编译代码时的平台定义(在 UNITY_WEBPLAYER 进行设置)。 |
UNITY_FLASH | 为 Adobe Flash 编译代码的平台定义。 |
UNITY_BLACKBERRY | Blackberry10 设备的平台定义。 |
您也可以选择性地编译代码,这取决于您正在使用的引擎版本。目前支持的有:
UNITY_2_6 | Unity 2.6 主要版本的平台定义。 |
UNITY_2_6_1 | 2.6 主要版本中指定版本 1 的平台定义。 |
UNITY_3_0 | Unity 3.0 主要版本的平台定义。 |
UNITY_3_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 主要版本的平台定义。 |
注意:2.6.0 之前的版本没有平台定义,因为此功能在该版本中首次引入。
测试预编译代码。
我们将通过一个小例子展示预编译代码的使用方式。这将根据您构建目标所选择的平台,输出一条信息。
首先点击文件 (File) -> 构建设置 (Build Settings),选择测试代码的平台。这将打开构建设置窗口,选择目标平台。
在构建设置窗口中选择 WebPlayer 作为目标平台。
选择测试预编译代码需要的平台,然后按下切换编辑器 (Switch Editor) 按钮,提示 Unity 您的目标平台。
创建一个脚本,复制/粘贴以下代码:
JavaScript 示例:
function Awake() { #if UNITY_EDITOR Debug.Log("Unity Editor"); #endif #if UNITY_IPHONE Debug.Log("Iphone"); #endif #if UNITY_STANDALONE_OSX Debug.Log("Stand Alone OSX"); #endif #if UNITY_STANDALONE_WIN Debug.Log("Stand Alone Windows"); #endif }
C# 示例:
using UnityEngine; using System.Collections; public class PlatformDefines : MonoBehaviour { void Start () { #if UNITY_EDITOR Debug.Log("Unity Editor"); #endif #if UNITY_IPHONE Debug.Log("Iphone"); #endif #if UNITY_STANDALONE_OSX Debug.Log("Stand Alone OSX"); #endif #if UNITY_STANDALONE_WIN Debug.Log("Stand Alone Windows"); #endif } }
Boo 示例:
import UnityEngine class PlatformDefines (MonoBehaviour): def Start (): ifdef UNITY_EDITOR: Debug.Log("Unity Editor") ifdef UNITY_IPHONE: Debug.Log("IPhone") ifdef UNITY_STANDALONE_OSX: Debug.Log("Stand Alone OSX") ifdef not UNITY_IPHONE: Debug.Log("not an iPhone")
然后,根据所选择的平台,按下 “play” 时,Unity 控制台将输出一条信息。
除基础 #if 编译器指令以外,还可以在 C# 和 JavaScript 中使用多路测试:
#if UNITY_EDITOR Debug.Log("Unity Editor"); #elif UNITY_IPHONE Debug.Log("Unity iPhone"); #else Debug.Log("Any other platform"); #endif
但是,Boo 目前仅支持 ifdef 指令。
平台定制定义
也可以提供 自己的脚本,将其添加至内置定义选择中。在播放器设置 (Player Settings) 的其他设置 (Other Settings) 面板中,您将看到脚本定义符号 (Scripting Define Symbols) 文本框。
在这里,可以输入想要为这一特定平台定义的符号,用分号隔开。这些符号可以作为 #if 指令的条件,就像内置符号一样。
全局定制定义
可以定义自己的预处理器指令,控制在编译时可以使用哪些代码。为此,必须添加带有其他指令的文本文件至“资源 (Assets/)” 文件夹。文件的名称取决于使用的语言,扩展名为.rsp:
C# | <Project Path>/Assets/smcs.rsp |
C# - Editor Scripts | <Project Path>/Assets/gmcs.rsp |
UnityScript | <Project Path>/Assets/us.rsp |
Boo | <Project Path>/Assets/boo.rsp |
例如,如果在smcs.rsp文件中包含独立行 "-define:UNITY_DEBUG
",定义的 UNITY_DEBUG
将作为 C# 脚本的全局定义,编辑器脚本除外。
每次更改 .rsp 文件,都需要重新编译才能保证有效。只需更新或重新导入单个脚本 (.js, .cs or .boo) 文件即可。
如果只需要修改全局定义,应使用播放器设置 (Player Settings) 中的脚本定义符号 (Scripting Define Symbols),因为这将覆盖所有编译器。若选择 .rsp 文件,就必须为 Unity 使用的每个编译器提供 一个文件,并且将无法了解何时使用一个或另一个编译器。
.rsp 文件的使用在 smcs 应用程序(包含在编辑器安装文件夹中)的帮助部分有详细说明。可以运行 "smcs -help
" 了解更多信息。同时,请务必记住,.rsp 文件必须与调用的编译器匹配。例如,如果针对网络播放器,smcs 将与 smcs.rsp 同时使用;如果针对独立播放器,gmcs 将与 gmcs.rsp 同时使用;如果针对 MS 编译器,csc 将与 csc.rsp 同时使用,等等。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论