NativePluginsからUnityへメッセージを送る際、コールバックやSendMessageを使うのだが、実はもう一つだけ方法がある。この方法はC#のデリゲートをコールバックとしてネイティブに登録し、それを直接呼び出してもらう方法だ。
C#側
//実際の使い方
public static void CallPlugin ()
{
_CallPlugin (CallbackResult);
}//ネイティブにメソッドを受け渡す
[DllImport("__Internal")]
private static extern void _CallPlugin (Callback method);//登録するメソッドと同じフォーマットのデリゲート
public delegate void Callback ();//登録するメソッドにはMonoPInvokeCallbackAttributeを付ける
[AOT.MonoPInvokeCallbackAttribute(typeof(Callback))]
static void CallbackResult ()
{
// call back
}
C側
他のWebViewや他のviewからのコールバックとして受けて、そのままunityのGameObject生成みたいな事をすると、別スレッドからのアクセス扱いになりそうな気がする(多分SendMessageが次フレームに届くのはメインループ待ってるのが理由)。extern "C" typedef void (*MyCallback)();
extern "C" {
void _CallPlugin(MyCallback callback)
{
(callback)();
}
}