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!
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_SAMSUNGTV | Directiva #define para la ejecución de código de Samsung TV. | |
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_WP_8_1 | Directiva #define para Windows Phone 8.1. | |
UNITY_WSA | #define directive for Windows Store Apps. Additionally, NETFX_CORE is defined when compiling C# files against .NET Core. | |
UNITY_WSA_8_1 | Directiva #define para Windows Store Apps cuando se apunte a SDK 8.1. | |
UNITY_WSA_10_0 | Directiva #define para Windows Store Apps cuando se apunte Universal Windows 10 Apps. Adicionalmente WINDOWS_UWP y NETFX_CORE son definidas cuando se compile archivo C# contra .NET Core. | |
UNITY_WINRT | Igual que UNITY_WSA. | |
UNITY_WINRT_8_1 | Equivalent to UNITY_WP_8_1 | UNITY_WSA_8_1. This is also defined when compiling against Universal SDK 8.1. | |
UNITY_WINRT_10_0 | Equivalente a UNITY \ WSA_10_0_ | |UNITY_WEBGL__ | Directiva #define para WebGL. |
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:
ENABLE_MONO | #define de scripting de backend para Mono |
ENABLE_IL2CPP | #define de scripting de backend para IL2CPP |
ENABLE_DOTNET | #define de scripting de backend para .NET |
NETFX_CORE | Definido al compilar scripts contra bibliotecas de clases .NET Core en .NET. |
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_4_6 | Definido al compilar scripts contra el nivel de compatibilidad API de .NET 4.6 en Mono e IL2CPP. |
ENABLE_WINMD_SUPPORT | Se define cuando la compatibilidad con Windows Runtime está habilitada en IL2CPP y .NET. Consulte Soporte de tiempo de ejecución de Windows ) para obtener más detalles. |
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.
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í.
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.
Tenga en cuenta que en C# usted puede utilizar un atributo CONDITIONAL
el cual es más limpio, una manera de stripping out funciones que sea menos propicia a los errores. Ver http://msdn.microsoft.com/en-us/library/4xssyw96(v=vs.90).aspx para más información.
Adicionalmente a la directiva del compilador básica #if
, usted puede utilizar también una prueba multiway en C# y JavaScript:
# if UNITY_EDITOR
Debug.Log("Unity Editor");
# elif UNITY_IOS
Debug.Log("Unity iPhone");
# else
Debug.Log("Any other platform");
# endif
También es posible agregar la propia selección de directivas #define. Abra el panel Other Settings de Player Settings y vaya al cuadro de texto Scripting Define Symbols.
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.
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 |
UnityScript | <Project Path>/Assets/us.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
Si desea modificar solo las directivas #define globales, use Scripting Define Symbols en Player Settings, ya que esto cubre todos los compiladores. Si elige los archivos . Rsp en su lugar, necesita proporcionar un archivo para cada compilador que utiliza Unity, y no sabe cuándo se utiliza uno u otro compilador.
El uso de archivos . Rsp se describe en la sección ‘Help’ de la aplicación mcs que se incluye en la carpeta de instalación del Editor. Puede obtener más información ejecutando mcs -help
.
Tenga en cuenta que los archivos .rsp necesitan coincidir el compilador que es invocado. Por ejemplo:
mcs.rsp
, ycsc.rsp
, etc.