`
wgcode
  • 浏览: 576986 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Unity3D平台依赖编译

阅读更多

Platform Dependent Compilation

 

Unity includes a feature named “Platform Dependent Compilation”. This consists of some preprocessor directives that let you partition your scripts to compile and execute a section of code exclusively for one of the supported platforms.

Furthermore, you can run this code within the Editor, so you can compile the code specifically for your mobile/console and test it in the Editor!

Platform Defines

The platform defines that Unity supports for your scripts are:

Property:Function:
UNITY_EDITOR Define for calling Unity Editor scripts from your game code.
UNITY_EDITOR_WIN Platform define for editor code on Windows.
UNITY_EDITOR_OSX Platform define for editor code on Mac OSX.
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_FLASH Platform define when compiling code for Adobe Flash.
UNITY_BLACKBERRY Platform define for a Blackberry10 device.
UNITY_WP8 Platform define for Windows Phone 8.
UNITY_METRO Platform define for Windows Store Apps (additionally NETFX_CORE is defined when compiling C# files against .NET Core).
UNITY_WINRT Equivalent to UNITY_WP8 |UNITY_METRO

Also you can compile code selectively depending on the version of the engine you are working on. Currently the supported ones are:

 
UNITY_2_6 Platform define for the major version of Unity 2.6.
UNITY_2_6_1 Platform define for specific version 2.6.1.
UNITY_3_0 Platform define for the major version of Unity 3.0.
UNITY_3_0_0 Platform define for specific version 3.0.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 specific version 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_4_3 Platform define for major version of Unity 4.3.
UNITY_4_5 Platform define for major version of Unity 4.5.

Note: For versions before 2.6.0 there are no platform defines as this feature was first introduced in that version.

Testing precompiled code.

We are going to show a small example of how to use the precompiled code. This will simply print a message that depends on the platform you have selected to build your target.

First of all, select the platform you want to test your code against by clicking on File -> Build Settings. This will bring the build settings window to select your target platform.

Build Settings window with the WebPlayer Selected as Target platform.Build Settings window with the WebPlayer Selected as Target platform.

Select the platform you want to test your precompiled code against and press the Switch Editor button to tell Unity which platform you are targeting.

Create a script and copy/paste this code:-

// JS
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")



Then, depending on which platform you selected, one of the messages will get printed on the Unity console when you press play.

Note that in C# you can use a CONDITIONAL attribute which is a more clean, less error-prone way of stripping out functions, see http://msdn.microsoft.com/en-us/library/4xssyw96(v=vs.90).aspx.

In addition to the basic #if compiler directive, you can also use a multiway test in C# and JavaScript:-


#if UNITY_EDITOR
    Debug.Log("Unity Editor");

#elif UNITY_IPHONE
    Debug.Log("Unity iPhone");

#else
    Debug.Log("Any other platform");

#endif


However, Boo currently supports only the ifdef directive.

Platform Custom Defines

It is also possible to add to the built-in selection of defines by supplying your own. In the Other Settings panel of the Player Settings, you will see the Scripting Define Symbols textbox.

Here, you can enter the names of the symbols you want to define for that particular platform, separated by semicolons. These symbols can then be used as the conditions for #if directives just like the built-in ones.

Global Custom Defines

You can define your own preprocessor directives to control which code gets included when compiling. To do this you must add a text file with the extra directives to the “Assets/” folder. The name of the file depends on the language you are using, and the extension is .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

As an example, if you include the single line “-define:UNITY_DEBUG” in your smcs.rsp file the define UNITY_DEBUGwill exist as a global define for C# scripts, except for Editor scripts.

Every time you make changes to .rsp files you will need to recompile for them to be effective. You can do this by updating or reimporting a single script (.js, .cs or .boo) file.

If you want to modify only global defines, you should use Scripting Define Symbols in Player Settings, because this will cover all the compilers. If you choose the .rsp files instead, you’ll have to provide one file for every compiler Unity uses, and you won’t know when one or another compiler is used.

The use of the .rsp files is described in the help section of the smcs application which is included in the Editor installation folder. You can get more information by running “smcs -help”. Also, bear in mind the .rsp file needs to match the compiler being invoked. For example, when targeting the web player, smcs is used with smcs.rsp; when targeting standalone players, gmcs is used with gmcs.rsp; when targeting MS compiler, csc is used with csc.rsp; and so on.

分享到:
评论

相关推荐

    Unity3d AssetBundle反编译工具,AssetStudio.v0.15.47

    Unity3d AssetBundle反编译工具,查问题,获取资源辅助

    unity3d文件反编译工具

    反编译 unity3d文件 点击'new project'选择要反编译的文件。 先点‘New project’选择unity3d文件,再点'Unpack Web Archrive in a directory'选择导出的文件夹。

    unity3d 反编译最新版

    unity3d 反编译最新版,解析unity3d 打包的 最新资源

    Unity 3D脚本编程 使用C#语言开发跨平台游戏

    Unity 3D脚本编程 使用C#语言开发跨平台游戏 陈嘉栋 著 目录 第1 章 Hello Unity 3D 1 第2 章 Mono 所搭建的脚本核心基础22 第3 章 Unity 3D 脚本语言的类型系统58 ...第14 章 Unity 3D 的脚本编译 365

    2020最新Unity3D LitJson-0.16.0 集合

    2020最新Unity3D LitJson-0.16.0.DLL 集合,已编译好DLL,支持float类型。根据你的Unity3D的Net版本选择不同的LitJson版本。

    反编译从unity3d编译好的文件

    反编译从unity3d编译好的文件 从此以后老版再也不用逼我做图了 方法: 点击'new project'选择要反编译的文件。 先点‘New project’选择unity3d文件,再点'Unpack Web Archrive in a directory'选择导出的文件夹。

    unity3d编译移动MM Android项目教程

    1、首先你要在Unity3d中生成集成好MMSDK的apk包。(别忘了把mmbilling.jar文件里的assets文件夹复制到unity的android目录中,libs也不止到android目录中,这样打出来的包才可以) 2、打开mmbilling.jar包取出mmiap....

    Unity3D开发数据安全及反编译解决方案.pdf

    Unity3D开发数据安全及反编译解决方案.pdf Unity3D开发数据安全及反编译解决方案.pdf Unity3D开发数据安全及反编译解决方案.pdf Unity3D开发数据安全及反编译解决方案.pdf Unity3D开发数据安全及反编译解决方案....

    unity3d 文件反编译工具

    反编译 unity生成的文件 直接获取资源文件

    Unity3d中使用HttpUtility

    2、Unity3d中使用HttpUtility,如果直接在plugins中引入 System.Web.DLL的话,在对Unity3d项目打包的时候会报错,在U3D环境中,编译运行一切正常,但在打包发布(Build)为PC版本可执行文件时,却出现错误:...

    unity3d-android开发反编译工具集合

    包含AssetStudio、dex2jar、jd-gui-windows、APK helper、apktool、AXMLPrinter2.jar、ildasm、ILSpy,unity3d开发过程中反编译涉及的工具

    unity3d反编译工具

    unity3d文件的反编译工具,具体什么功能你懂的,csdn上别的up主太贪婪,平价下载

    UnityAPK反编译工具dnSpy-ne资源提取工具UnityStudio

    UnityStudio是资源提取工具,dnSpy-net代码反编译工具,两款UnityApk反编译工具,亲测可用

    unity3d 高仿王者荣耀 源码下载

    unity3d高仿王者荣耀源代码。实现类王者荣耀游戏的MOBA功能。程序提供了服务端和客户端,实现了基本的人物,技能,小兵,防御塔以及水晶的功能,实现了单局胜利的简单逻辑。客户端可以生成手机或者电脑端,均测试...

    unity3d试衣源码

    unity3d试衣软件Demo,可供参考,推荐用unity3d 4.6.0版本来编译

    项目反编译项目反编译项目反编译

    可以反编译Unity项目可以反编译Unity项目可以反编译Unity项目可以反编译Unity项目可以反编译Unity项目可以反编译Unity项目可以反编译Unity项目可以反编译Unity项目可以反编译Unity项目可以反编译Unity项目可以反编译...

    UnityDLL反编译

    unityDLL反编译文件

    unity Assetbundle 资源反编译查看工具

    unity Assetbundle 资源反编译查看工具

Global site tag (gtag.js) - Google Analytics