[unity3d]unity平台的预处理

简介: 在开发中,特别是unity的跨平台中,我们经常会在各个平台游走,如安卓版,苹果版,PC版......。在此不同的平台上,有可能我们需要做不同的操作。然而我们就可以用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.
 

 

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

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状态下的话,就能看见打印出:     

 

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

 

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

//新添加的内容
#if CUSTOM_ITF
        customMsg = "我自定义了预编译";
#endif
        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.
 

 

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


如果对预编译不熟的同学可以去百度,或者谷歌下,我也是在查阅后才明白的!

相关文章
|
移动开发 前端开发 C#
在Unity3D中实现热力图、风向图、温度图效果(Unity3D)
因一个任务要完成如何在Unity上面实现热力图的效果,所以百度了很久,发现资料很少,现在就把我总结的如何在Unity上面基于Canvas实现热力图效果的实现过程分享出来, 此前转载了一篇主要讲的是如何根据数据值,在Canvas上重新绘制RGBA的值,完成热力图的绘制,不过用的是H5写的,我修改了一下,用C#重写的
|
4月前
|
图形学
【Unity3D开发小游戏】Unity3D零基础一步一步教你制作跑酷类游戏
【Unity3D开发小游戏】Unity3D零基础一步一步教你制作跑酷类游戏
|
4月前
|
设计模式 存储 前端开发
【Unity3D日常开发】Unity3d中使用MVC框架
【Unity3D日常开发】Unity3d中使用MVC框架
|
7月前
|
数据采集 物联网 Linux
Unity3D下实现Linux平台RTMP推流(以采集Unity窗体和声音为例)
随着物联网等行业的崛起,越来越多的传统行业如虚拟仿真、航天工业、工业仿真、城市规划等,对Linux下的生态构建,有了更大的期望,Linux平台下,可选的直播推拉流解决方案相对Windows和移动端,非常少,基于Unity的Linux推送方案,更是几无参考。本文以Unity3d环境下Linux平台推送Unity窗体和Unity采集的音频,然后编码推送到RTMP服务器为例,大概说下实现过程。
135 0
|
Java Android开发 图形学
Unity3D与Android的交互通信(Unity3D)
这篇文章主要讲的是如何使用Android Studio与Unity的交互通信。主要内容有如何在Android Studio创建工程,如何设置,以及如何导出。以及在Unity调用Android的方法。
|
存储 C# 图形学
从零开始做一款Unity3D游戏<一>——亲自上手使用Unity(二)
从零开始做一款Unity3D游戏<一>——亲自上手使用Unity
从零开始做一款Unity3D游戏<一>——亲自上手使用Unity(二)
|
编解码 JavaScript C#
从零开始做一款Unity3D游戏<一>——亲自上手使用Unity(一)
从零开始做一款Unity3D游戏<一>——亲自上手使用Unity
从零开始做一款Unity3D游戏<一>——亲自上手使用Unity(一)
|
小程序 定位技术 API
Unity3D-开发工具选择与Unity安装
本笔记基于windows平台,使用Unity软件ARFoundation开发工具开发安卓系统 开发工具版本: Windows11 Unity Hub 2.5.5 Unity2020.3.25f1c1(LTS)
705 0
Unity3D-开发工具选择与Unity安装
|
图形学 数据安全/隐私保护
在Unity3D中如何画线,LineRender组件你一定要会(Unity3D)
发现网上很多教程都是如何用LineRender组件画线,但是这个组件还有很多其他的功能属性也是很有趣的,下面就让我们来看看吧
|
设计模式 存储 前端开发
在Unity3d中如何使用MVC框架(Unity3D)
MVC是一种比较常见的设计框架,是一种将代码的功能进行划分的一种设计框架,主要原理就是将软件用户界面和业务逻辑分离,以使代码可扩展性、可复用性、可维护性、灵活性加强。 MVC在桌面应用程序,以及网页架构上面用的比较多,那么怎么应用到Unity3d中呢,下面就带大家去了解这个设计框架,以及如何在Unity中应用。