Version: 2019.1
Understanding Automatic Memory Management
Carpetas especiales y orden de compilación script

Compilación dependiente de la plataforma

Unity incluye una función llamada Compilacion dependiente de la plataforma. Esto consiste en algunas directivas de preprocesador que le permiten particionar sus scripts para compilar y ejecutar una sección de código exclusivamente para una de las plataformas compatibles.

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:

Propiedad: Función:
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 Directiva #define para código de editor en Mac OS X.
UNITY_STANDALONE_OSX directiva #define para compilar/ejecutar código específicamente para Mac OS X (incluyendo arquitecturas Universal, PPC e Intel).
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 directiva #define para compilar/ejecutar código para cualquier plataforma independiente (Mac OS X, Windows o 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 Obsoleto. Use UNITY_IOS en su lugar.
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 Directiva #define para Universal Windows Platform. Además, NETFX_CORE se define al compilar archivos C# contra .NET Core y al utilizar el back-end de scripts .NET.
UNITY_WSA_10_0 Directiva #define para Universal Windows Platform. Además, WINDOWS_UWP se define al compilar archivos C# contra .NET Core.
UNITY_WINRT Igual que UNITY_WSA.
UNITY_WINRT_10_0 Equivalente a UNITY \ WSA_10_0_ | |UNITY_WEBGL__ Directiva #define para WebGL.
UNITY_FACEBOOK Directiva #define para la plataforma de Facebook (WebGL o Windows independiente).
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.

Desde Unity 2.6.0 en adelante, puede compilar el código de forma selectiva. Las opciones disponibles dependen de la versión del Editor en la que esté trabajando. Dado un número de versión X.Y.Z (por ejemplo, 2.6.0), Unity expone tres directivas #define globales en los siguientes formatos: 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.

A partir de Unity 5.3.4, puede compilar el código de forma selectiva en función de la versión más antigua de Unity requerida para compilar o ejecutar una porción determinada de código. Dado el mismo formato de versión que el anterior (X.Y.Z), Unity expone un #define global en el formato UNITY_X_Y_OR_NEWER, que se puede usar para este propósito.

Las directivas #define soportadas son:

CSHARP_7_3_OR_NEWER Defined when building scripts with support for C# 7.3 or newer.
ENABLE_MONO #define de scripting de backend para Mono
ENABLE_IL2CPP #define de scripting de backend para IL2CPP
NET_2_0 Definido al compilar scripts contra el nivel de compatibilidad API .NET 2.0 en Mono e IL2CPP.
NET_2_0_SUBSET Definido al compilar scripts contra el nivel de compatibilidad de la API de subconjuntos .NET 2.0 en Mono e IL2CPP.
NET_LEGACY Defined when building scripts against .NET 2.0 or .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. See Windows Runtime Support for more details.

Utiliza DEVELOPMENT_BUILD #define para identificar si su script se ejecuta en un reproductor que se creó con la opción “Desarrollo de desarrollo” habilitada.

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.

En primer lugar, seleccione la plataforma con la que desea probar el código yendo a File > Build Settings. Esto muestra la ventana Build Settings; seleccione su plataforma de destino desde aquí.

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:

// 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.

En C# puede usar un atributo CONDITIONAL que es una forma más limpia y menos propensa a errores de desvinculación de funciones. Consulte ConditionalAttribute Class para obtener más información. Tenga en cuenta que los callbacks más comunes de Unity (por ejemplo, Start(), Update(), LateUpdate(), FixedUpdate(), Awake()) no se ven afectadas por este atributo porque se invocan directamente desde el motor y, por razones de rendimiento, lo hace no los tome en cuenta.

Además de la directiva básica del compilador #if, también puede usar una prueba de múltiples vías en C#:


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

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

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

# endif


#defines personalizados por plataforma

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.

#defines personalizados Globales

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# (scripts de jugador y editor) <Project Path>/Assets/mcs.rsp

Como ejemplo, si incluye la única línea -define: UNITY_DEBUG en su archivo mcs.rsp, la directiva #define UNITY_DEBUG existe como un #define global para los scripts de C #, excepto para los scripts del Editor.

Cada vez que realice cambios en los archivos . Rsp, debe volver a compilar para que sean eficaces. Puede hacerlo actualizando o reimportando un único archivo de script (.js o .cs).

NOTA

If you want to modify only global #define directives, use Scripting Define Symbols in Player settings, because this covers all the compilers. If you choose the .rsp files instead, you need to provide one file for every compiler Unity uses.

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 the .NET 3.5 Equivalent (deprecated) scripting runtime version, mcs is used with mcs.rsp, and
  • when targeting the .NET 4.x Eqivalent scripting runtime version compiler, csc is used with csc.rsp.

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

  • Se quita el soporte a Samsung TV

Understanding Automatic Memory Management
Carpetas especiales y orden de compilación script
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961