Version: 2018.2
Optimizando el rendimiento de físicas
Preparing your application for In-App Purchases (IAP)

Construyendo Plugins para iOS

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

Building an application with a native plugin for iOS

  1. Defina su método externo en el archivo C# como sigue:

    [DllImport ("__Internal")]
    private static extern float FooPluginFunction();
    
  2. Set the editor to the iOS build target.

  3. Add your native code source files to the generated Xcode project’s Classes folder (this folder is not overwritten when the project is updated, but don’t forget to backup your native code).

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 de 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:

Calling C# back from native code

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

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

This function has three parameters: the name of the target GameObject, the script method to call on that object and the message string to pass to the called method.

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

Unity iOS supports automated plugin integration in a limited way. All files with extensions .a,.m,.mm,.c,.cpp located in the Assets\Plugins\iOS folder will be merged into the generated Xcode project automatically. However, merging is done by symlinking files from Assets\Plugins\iOS to the final destination, which might affect some workflows. The .h files are not included in the Xcode project tree, but they appear on the destination file system, thus allowing compilation of .m/.mm/.c/.cpp files.

Note: Subfolders are currently not supported.

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. String values returned from a native method should be UTF–8 encoded and allocated on the heap. Mono marshalling calls are free for strings like this.
  4. As mentioned above, the Xcode project’s Classes folder is a good place to store your native code because it is not overwritten when the project is updated.
  5. Another good place for storing native code is the Assets folder or one of its subfolders. Just add references from the Xcode project to the native code files: right click on the Classes subfolder and choose Add > Existing files.

Ejemplos

Muestra del Navegador Bonjour

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

This sample demonstrates how objective-C code can be invoked from a Unity iOS application. This application implements a very simple Bonjour client. The application consists of a Unity iOS project (Plugins\Bonjour.cs is the C# interface to the native code, while BonjourTest.cs is the script that implements the application logic) and native code (Assets\Code) that should be added to the built Xcode project.


Optimizando el rendimiento de físicas
Preparing your application for In-App Purchases (IAP)