Unity iOS supports limited native-to-managed callback functionality using one of the following methods:
Tip: Managed-to-unmanaged calls are processor-intensive on iOS. Try to avoid calling multiple native methods per frame.
UnitySendMessage
looks like this:
UnitySendMessage("GameObjectName1", "MethodName1", "Message to send");
There are three parameters:
UnitySendMessage
has the following limitations:
void MethodName(string message);
.UnitySendMessage
are asynchronous and have a delay of one frame.UnitySendMessage
.When you use delegates, the method on the C# side must be static and marked with the MonoPInvokeCallback
attribute.
To use delegates:
The function pointer in the native code then points back to the static method in C#.
The C# code for this method looks like this:
delegate void MyFuncType();
[AOT.MonoPInvokeCallback(typeof(MyFuncType))]
static void MyFunction() { }
[DllImport ("__Internal")]
static extern void RegisterCallback(MyFuncType func);
The C code that accepts the callback then looks like this:
typedef void (*MyFuncType)();
void RegisterCallback(MyFuncType func) {}
Note: Ensure string values returned from a native method are UTF–8 encoded and allocated on the heap.