Entender la Gestión Automática de Memoria
Carpetas especiales y orden de compilación script

Platform dependent compilation

Unity includes a feature called 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.

Usted puede correr este código dentro del Editor de Unity, para que pueda compilar el código específicamente para su plataforma destino y probarlo en el Editor!

Directivas de #Defines de plataforma

Las directivas de #defines de plataforma que soporta Unity para sus scripts son:

Property: Function:
UNITY_EDITOR Directiva #define para llamar los scripts del Editor de Unity desde su código de juego.
UNITY_EDITOR_WIN Directiva #define de Plataforma para código de editor en Windows.
UNITY_EDITOR_OSX #define directive for Editor code on Mac OS X.
UNITY_STANDALONE_OSX #define directive for compiling/executing code specifically for Mac OS X (including Universal, PPC and Intel architectures).
UNITY_STANDALONE_WIN Directiva #define para compilar/ejecutar código para aplicaciones stand alone de Windows.
UNITY_STANDALONE_LINUX Directiva #define para compilar/ejecutar código para aplicaciones stand alone Linux.
UNITY_STANDALONE #define directive for compiling/executing code for any standalone platform (Mac OS X, Windows or Linux).
UNITY_WII Directiva #define Define para la compilación/ejecución de código para la consola Wii.
UNITY_IOS Directiva #define para la compilación/ejecución de código para la plataforma iOS.
UNITY_IPHONE Deprecated. Use UNITY_IOS instead.
UNITY_ANDROID Directiva #define para la plataforma Android.
UNITY_PS4 Directiva #define para correr código de Playstation 4.
UNITY_XBOXONE Directiva #define para la ejecución de código de Xbox One.
UNITY_TIZEN Directiva #define para la plataforma Tizen.
UNITY_TVOS Directiva #define para la plataforma Apple TV.
UNITY_WSA #define directive for Universal Windows Platform. Additionally, NETFX_CORE is defined when compiling C# files against .NET Core and using .NET scripting backend.
UNITY_WSA_10_0 #define directive for Universal Windows Platform. Additionally WINDOWS_UWP is defined when compiling C# files against .NET Core.
UNITY_WINRT Same as UNITY_WSA.
UNITY_WINRT_10_0 Equivalent to UNITY_WSA_10_0
UNITY_WEBGL Directiva #define para WebGL.
UNITY_FACEBOOK #define directive for the Facebook platform (WebGL or Windows standalone).
UNITY_ADS Directiva #define para llamar métodos de Unity Ads de su código de juego. Versiones 5.2 y posterior.
UNITY_ANALYTICS Directiva #define para llamar métodos de Unity Analytics para su código de juego. Versión 5.2 y posterior.
UNITY_ASSERTIONS Directiva #define para el proceso para controlar aserciones.

From Unity 2.6.0 onwards, you can compile code selectively. The options available depend on the version of the Editor that you are working on. Given a version number X.Y.Z (for example, 2.6.0), Unity exposes three global #define directives in the following formats: UNITY_X, UNITY_X_Y and UNITY_X_Y_Z.

Aquí hay un ejemplo de las directivas #define expuestas en Unity 5.0.1:

UNITY_5 Directiva #define para la versión de lanzamiento para Unity 5, expuesto en cada lanzamiento 5.x.y .
UNITY_5_0 Directiva #define para la versión mayor de Unity 5.0, expuesto en cada lanzamiento 5.0.z .
UNITY_5_0_1 Directiva #define para la versión menor de Unity 5.0.1.

Starting from Unity 5.3.4, you can compile code selectively based on the earliest version of Unity required to compile or execute a given portion of code. Given the same version format as above (X.Y.Z), Unity exposes one global #define in the format UNITY_X_Y_OR_NEWER, that can be used for this purpose.

Las directivas #define soportadas son:

ENABLE_MONO Scripting backend #define for Mono.
ENABLE_IL2CPP Scripting backend #define for IL2CPP.
ENABLE_DOTNET Scripting backend #define for .NET.
NETFX_CORE Defined when building scripts against .NET Core class libraries on .NET.
NET_2_0 Defined when building scripts against .NET 2.0 API compatibility level on Mono and IL2CPP.
NET_2_0_SUBSET Defined when building scripts against .NET 2.0 Subset API compatibility level on Mono and IL2CPP.
NET_4_6 Defined when building scripts against .NET 4.x API compatibility level on Mono and IL2CPP.
NET_STANDARD_2_0 Defined when building scripts against .NET Standard 2.0 API compatibility level on Mono and IL2CPP.
ENABLE_WINMD_SUPPORT Defined when Windows Runtime support is enabled on IL2CPP and .NET. See Windows Runtime Support for more details.

You use the DEVELOPMENT_BUILD #define to identify whether your script is running in a player which was built with the “Development Build” option enabled.

Usted también puede compilar el código selectivamente dependiendo del back-end de scripting.

Probando código pre-compilado

Abajo hay un ejemplo de cómo utilizar el código pre-compilado. Imprime un mensaje que depende en la plataforma que usted ha seleccionado para su objetivo de construcción.

First of all, select the platform you want to test your code against by going to File > Build Settings. This displays the Build Settings window; select your target platform from here.

La ventana de los Build Settings con PC, Mac & Linux seleccionado como las plataformas destinos
La ventana de los Build Settings con PC, Mac & Linux seleccionado como las plataformas destinos

Seleccione la plataforma con la cual usted quiere probar su código pre-compilado y haga click en Swith Platform para decirle a Unity a qué plataforma le está apuntando.

Cree un script y copie/pegue el siguiente código:

// 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_IOS
      Debug.Log("Iphone");
    #endif

    #if UNITY_STANDALONE_OSX
    Debug.Log("Stand Alone OSX");
    #endif

    #if UNITY_STANDALONE_WIN
      Debug.Log("Stand Alone Windows");
    #endif

  }
}

Para probar el código, haga click en el Play Mode. Confirme que el código funciona al revisar por mensajes relevantes en la consola de Unity, dependiendo en qué plataforma ha seleccionado - por ejemplo, si usted escoge iOS, se configura que el mensaje “Iphone” aparezca en la consola.

In C# you can use a CONDITIONAL attribute which is a more clean, less error-prone way of stripping out functions. See ConditionalAttribute Class for more information. Note that common Unity callbacks (ex. Start(), Update(), LateUpdate(), FixedUpdate(), Awake()) are not affected by this attribute because they are called directly from the engine and, for performance reasons, it does not take them into account.

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

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

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

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

#endif

Platform custom #defines

It is also possible to add to the built-in selection of #define directives by supplying your own. Open the Other Settings panel of the Player Settings and navigate to the Scripting Define Symbols text box.

Ingrese los nombres de los símbolos que usted quiere definir para esa plataformas en particular separado por puntos y comas. Estos símbolos luego pueden ser utilizados como las condiciones para las directivas #if, como las integradas.

Global custom #defines

Usted puede definir sus propias directivas pre-processor para controlar qué código es incluido cuando se compila. Para hacer esto usted debe agregar un archivo de texto con las directivas extras a la carpeta Assets. El nombre del archivo depende en el lenguaje que usted esté utilizando. La extensión es .rsp:

C# (player and editor scripts) <Project Path>/Assets/mcs.rsp
UnityScript <Project Path>/Assets/us.rsp

As an example, if you include the single line -define:UNITY_DEBUG in your mcs.rsp file, the #define directive UNITY_DEBUG exists as a global #define for C# scripts, except for Editor scripts.

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

NOTE

If you want to modify only global #define directives, use Scripting Define Symbols in Player Settings, as this covers all the compilers. If you choose the .rsp files instead, you need to provide one file for every compiler Unity uses, and you don’t know when one or another compiler is used.

The use of .rsp files is described in the ‘Help’ section of the mcs application which is included in the Editor installation folder. You can get more information by running mcs -help.

Tenga en cuenta que los archivos .rsp necesitan coincidir el compilador que es invocado. Por ejemplo:

  • when targeting any players or the editor, mcs is used with mcs.rsp, and
  • cuando se apunte a un compilador MS , csc se utiliza con csc.rsp, etc.

  • 2018–03–16 Page amended with no editorial review

  • Removed Samsung TV support.

Entender la Gestión Automática de Memoria
Carpetas especiales y orden de compilación script