Cómo llamar a funciones nativas de iOS desde Unity

Lea los documentos, es bastante fácil y directo: Creación de complementos para iOS y Unity – Manual: complementos nativos e interfaz de complementos nativos de bajo nivel. eso es todo lo que necesitas.

¡Hágalo usted mismo, intente, falle y aprenda!

Ahora veamos cómo podemos hacer esto:

En su proyecto de Unity, cree una carpeta Assets / Plugin / iOS. Los archivos directamente en esa carpeta (no pueden estar en una subcarpeta) se agregan automáticamente a su proyecto de iOS cuando Unity crea una compilación de iOS.

Crearemos un archivo testplugin.mm en esa carpeta. En ese archivo, colocamos el código para el lado iOS del complemento. Unity necesita que los complementos tengan un nombre c. Entonces, lo envolvemos en una “C” externa. Como dice el documento Building Plugins para iOS al implementar el complemento, debe asegurarse de que las funciones se declaren con el enlace C para evitar problemas de cambio de nombre.

Aquí hay un complemento de ejemplo:

“C” externa
{
int _add (int x, int y)
{
// Solo un ejemplo simple de devolver un valor int
devolver x + y;
}
// Devuelve un char * (una cadena a Unity)
char * _helloWorldString ()
{
// Podemos usar NSString e ir a la cadena c que Unity quiere
NSString * helloString = @ “Hola Mundo”;
// El método UTF8String nos obtiene una cadena de CA. Luego tenemos que malloc una copia para dar a Unity. Reutilizo un método a continuación que lo hace fácil.
return cStringCopy ([helloString UTF8String]);
}

}
// También me gusta incluir estos dos métodos convenientes para convertir entre cadena c y NSString *. Debe devolver una copia de la cadena c para que Unity maneje la memoria y obtenga un valor válido.
char * cStringCopy (const char * string)
{
if (cadena == NULL)
devuelve NULL;
char * res = (char *) malloc (strlen (cadena) + 1);
strcpy (res, cadena);
volver res;
}

Y eso es todo para un simple complemento de iOS. Ahora necesitamos un script de Unity para usarlo.
Cree un archivo llamado TestPlugin.cs en Unity.

usando UnityEngine;
usando System.Collections;
// Necesitamos este para importar nuestras funciones IOS
usando System.Runtime.InteropServices;
TestPlugin de clase pública: MonoBehaviour
{

#if UNITY_IPHONE
[DllImport (“__Internal”)]
privado estático externo int _add (int x, int y);

// En su mayor parte, sus importaciones coinciden con la función definida en el código de iOS, excepto que char * se reemplaza con una cadena aquí para que obtenga una cadena C #.

[DllImport (“__Internal”)]
cadena externa estática privada _helloWorldString ();

#terminara si
// Ahora crea métodos para proporcionar la funcionalidad de iOS

static int Add (int x, int y)
{
int resultado = 0;
// Verificamos nuevamente si hay UNITY_IPHONE, así que no lo intentamos si no es la plataforma iOS.
#if UNITY_IPHONE
// Ahora comprobamos que en realidad es un dispositivo / simulador de iOS, no el Unity Player. Solo obtienes complementos en el dispositivo real o en el Simulador de iOS.
if (Application.platform == RuntimePlatform.IPhonePlayer)
{
resultado = _add (x, y);
}
#terminara si

resultado de retorno;
}
cadena estática HelloWorldString ()
{
cadena helloWorld = “”;

#if UNITY_IPHONE
if (Application.platform == RuntimePlatform.IPhonePlayer)
{
helloWorld = _helloWorldString ();
}
#terminara si

}

}

Otra opción para devolver un valor de su código iOS a Unity es en cualquier momento en su código iOS, puede llamar a UnitySendMessage("UnityObjectName", "UnityObject'sMethodName", "Some message here") . Eso hace que Unity busque ese objeto en su escena y luego llame a ese método y le dé esa cadena. Por lo tanto, si crea un script TestPluginListener.cs y tiene un método void ListenerMethod(string message) , puede crear un objeto TestPluginListener en su escena, agregar ese componente de script y luego llamar a UnitySendMessage("TestPluginListener", "ListenerMethod", "My test message"); en tu código iOS. Su script entonces recibiría ese mensaje y usted podría procesarlo como quiera.

No escribo código aquí en quora para tales preguntas generalmente, pero parece que tuvo suerte con eso. Gracias por A2A Rohith Shenoy

More Interesting

¿Cuáles son las desventajas de iOS 10?

Compré un libro para aprender el desarrollo de iOS 7 en Xcode 5. Ahora que Xcode 6 y iOS 8 están fuera, ¿eso significa que el libro está desactualizado e inútil?

¿Qué es lo que lleva más tiempo, codificar una tienda web / sitio web desde cero (sin WP o similar) o codificar exactamente el mismo servicio desde cero pero para Android / iOS?

¿Por qué Apple hace que cada vez sea más complicado crear una aplicación sin usar guiones gráficos con cada lanzamiento de Xcode?

¿Cuáles son las técnicas utilizadas en el diseño de aplicaciones iOS como "The Economist" para mostrar párrafos de texto, imágenes y tablas en una sola página (o vista)?

¿Xcode 4 beta está listo para usar para desarrollar aplicaciones para producción?

Cómo ganar creando aplicaciones gratuitas para Android o iOS

Aplicaciones móviles: ¿Debo optar por el desarrollo nativo de iOS o el desarrollo multiplataforma con PhoneGap / Xamarin?

¿Puedo compartir mi moneda virtual entre el iOS de mi juego y los clientes web?

Si compro una aplicación para iOS, ¿necesito obtener un archivo de firma?

¿Cuáles son algunas de las características que las aplicaciones pueden construir con iOS 10?

¿Cuáles son algunos buenos consejos para ayudar a los desarrolladores a evitar las desinstalaciones de aplicaciones en Android e iOS?

¿Por qué OS X no está bloqueado como iOS para que los usuarios no puedan estropear su instalación?

Móvil: ¿cuál es el mejor sistema para administrar notificaciones push entre varias aplicaciones?

¿Por qué la comunidad iOS es más abierta que la comunidad Android?