Optimizando el rendimiento de físicas
Preparando su aplicación para "In App Purchases" (Compras dentro de la aplicación)

Construyendo Plugins para iOS

Esta página describe los Plugins de Código Nativo para la plataforma iOS.

Construyendo una Aplicación con un Plugin Nativo para iOS

  1. Defina su método externo en el archivo C# como sigue:
[DllImport ("__Internal")]
private static extern float FooPluginFunction();
  1. Configure el editor al objetivo de construcción iOS
  2. Agregue sus archivos fuente de código nativo a carpeta “Classes” del proyecto XCode generado (esta carpeta no se sobre-escribe cuando el proyecto es actualizado, pero no se le olvide hacer una copia de seguridad de su código nativo).

Si usted está utilizando C++ (.cpp) o Objective-C++ (.mm) para implementar el plugin usted deber asegurarse que las funciones son declaradas con C linkage para evitar name mangling issues.

extern "C" {
  float FooPluginFunction();
}

Los Plugins escritos en C u Objective-C no necesitan esto ya que estos lenguajes no utilizan el name-mangling.

Utilizando Su Plugin desde C#

Los plugins nativos de iOS pueden ser llamados solamente cuando sean desplegados en el dispositivo actual, por lo que es recomendado envolver todos los métodos de código nativo con una capa de código adicional de C#. Este código debería revisar Application.platform y llamar métodos nativos solamente cuando la aplicación está corriendo en el dispositivo; valores ficticios pueden ser devueltos cuando la aplicación corre en el Editor. Vea la muestra de la aplicación del navegador Bonjour para un ejemplo:

LLamando C# / JavaScript devuelta desde código nativo

El Unity iOS soporta de manera limitada una funcionalidad de llamadas nativas vía UnitySendMessage:

UnitySendMessage("GameObjectName1", "MethodName1", "Message to send");

Esta función tiene tres parámetros : el nombre del GameObject objetivo, el método script a ser llamado en ese objeto y el string de mensaje en ser pasado para el método llamado.

Limitaciones conocidas:

  1. Únicamente los métodos script que corresponden a la siguiente signatura pueden ser llamados desde código nativo: function MethodName(message:string)
  2. Llamadas a UnitySendMessage son asincrónicas y tienen una demora de un cuadro (frame).

Integración de plugin automatizada

El Unity iOS soporta una integración de plugin automatizada en una manera limitada. Todos los archivos con extensiones de .a,.m,.mm,.c,.cpp ubicadas en la carpeta Assets/Plugins/iOS serán fusionada al proyecto Xcode generado de manera automática. Sin embargo, la fusión es hecha haciendo symlink en los archivos delAssets/Plugins/iOS al destino fina, lo cual puede afectar algunos flujos de trabajo. Los archivos .h no son incluidos en el árbol del proyecto de Xcode, pero aparecen el sistema de archivos destino, por lo tanto le permite la compilación de archivos .m/.mm/.c/.cpp .

Tenga en cuenta: las sub-carpetas no son actualmente soportadas.

Recomendaciones iOS

  1. Llamadas gestionadas a llamadas no gestionadas son bastante intensivas en el procesados en iOS. Intente evitar llamada múltiples métodos nativos por cuadro (frame).
  2. Como se menciono arriba, envuelva sus métodos nativos con una capa adicional C# que llame código nativo en el dispositivo y devuelva valores ficticios en el Editor.
  3. Valores string devuelto de un método nativo deberían ser codificados a UTF–8 y asignados al heap. Llamadas Mono de cálculo de referencia son gratis para strings como este.
  4. Como se menciono arriba, la carpeta “Classes” del proyecto Xcode es un buen lugar para almacenar su código nativo porque no es sobre-escrito cuando el proyecto es actualizado.
  5. Otro buen lugar para almacenar código nativo es la carpeta Assets o una de sus sub-carpetas. Simplemente agregue referencia del proyecto Xcode a los archivos del código nativo : haga click derecho en la sub-carpeta “Classes” y escoja “Add->Existing files…”.

Ejemplos

Muestra del Navegador Bonjour

Un ejemplo simple del uso de un plugin en código nativo puede ser encontrado aquí

Este ejemplo demuestra como código objective-C puede ser invocado desde una aplicación Unity iOS. Esta aplicación implementa un cliente Bonjour simple. La aplicación consiste de un proyecto del Unity iOS (Plugins/Bonjour.cs es la interfaz C# al código nativo, mientras BonjourTest.js es el script JS que implementa la lógica de la aplicación) y código nativo (Assets/Code) que debería ser agregado al proyecto XCode construido.

Optimizando el rendimiento de físicas
Preparando su aplicación para "In App Purchases" (Compras dentro de la aplicación)