Unity iOS は、ネイティブからマネージへのコールバック機能を制限付きでサポートします。これは、以下の 2 つの方法のいずれかで行うことができます。
ヒント:マネージコードからのアンマネージコードの呼び出しは、iOS 上でプロセッサーに高負荷を与えます。フレームごとに複数のネイティブメソッドを呼び出さないでください。
UnitySendMessage は以下のようになります。
UnitySendMessage("GameObjectName1", "MethodName1", "Message to send");
3 つのパラメーターがあります。
UnitySendMessage には以下の制限があります。
void MethodName(string message);
UnitySendMessage への呼び出しは非同期であり、1 フレーム遅延します。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 でエンコードされ、ヒープに割り当てられます。