Unity’s Platform Dependent Compilation feature 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.
You can run this code within the Unity Editor, so you can compile the code specifically for your target platform and test it in the Editor.
Las directivas de #defines de plataforma que soporta Unity para sus scripts son:
Define | Function |
---|---|
UNITY_EDITOR | #define directive to call Unity Editor scripts from your game code. |
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_EDITOR_LINUX | #define directive for Editor code on Linux. |
UNITY_STANDALONE_OSX | #define directive to compile or execute 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 | 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_SWITCH | #define directive for executing Nintendo Switch code. |
UNITY_LUMIN | #define directive for the Magic Leap OS platform. You can also use PLATFORM_LUMIN. |
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_WEBGL | Directiva #define para WebGL. |
UNITY_FACEBOOK | Directiva #define para la plataforma de Facebook (WebGL o Windows independiente). |
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. |
UNITY_64 | #define directive for 64-bit platforms. |
You can also 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.
Here is an example of #define directives exposed in Unity 2019.4.14:
Define | Function |
---|---|
UNITY_2019 | #define directive for the release version of Unity 2019, exposed in every 2019.Y.Z release. |
UNITY_2019_4 | #define directive for the major version of Unity 2019.4, exposed in every 2019.4.Z release. |
UNITY_2019_4_14 | #define directive for the minor version of Unity 2019.4.14. |
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), 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:
Define | Function |
---|---|
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. |
ENABLE_INPUT_SYSTEM | Defined when the Input System package is enabled in Player Settings. |
ENABLE_LEGACY_INPUT_MANAGER | Defined when the legacy Input Manager is enabled in Player Settings. |
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:
// 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("iOS");
#endif
#if UNITY_STANDALONE_OSX
Debug.Log("Standalone OSX");
#endif
#if UNITY_STANDALONE_WIN
Debug.Log("Standalone 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
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.
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).
Note: 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:
mcs.rsp
, andcsc.rsp
.