Unity iOS 支持使用以下方法之一的有限原生到托管回调功能。
提示:托管到非托管的调用在 iOS 上是处理器密集型的。 尽量避免每帧调用多个原生方法。
UnitySendMessage
看起来像这样
UnitySendMessage("GameObjectName1", "MethodName1", "要发送的消息");
有三个参数
UnitySendMessage
具有以下限制
void MethodName(string message);
。UnitySendMessage
的调用是异步的,并且有一帧的延迟。UnitySendMessage
时发生冲突。当使用委托时,C# 侧的方法必须是静态的,并且用 MonoPInvokeCallback
属性标记。
要使用委托
然后,原生代码中的函数指针指向 C# 中的静态方法。
此方法的 C# 代码如下所示
delegate void MyFuncType();
[AOT.MonoPInvokeCallback(typeof(MyFuncType))]
static void MyFunction() { }
[DllImport ("__Internal")]
static extern void RegisterCallback(MyFuncType func);
接受回调的 C 代码如下所示
typedef void (*MyFuncType)();
void RegisterCallback(MyFuncType func) {}
注意: 确保从原生方法返回的字符串值是 UTF-8 编码的,并在堆上分配。