ネイティブコードからのコールバック
Understand how to use native-to-managed callback functionality.
読み終わるまでの所要時間 4 分最終更新 1ヶ月前
Unity iOS は、ネイティブからマネージへのコールバック機能を制限付きでサポートします。これは、以下の 2 つの方法のいずれかで行うことができます。
**ヒント:**マネージコードからのアンマネージコードの呼び出しは、iOS 上でプロセッサーに高負荷を与えます。フレームごとに複数のネイティブメソッドを呼び出さないでください。
UnitySendMessage を使用
UnitySendMessageUnitySendMessage("GameObjectName1", "MethodName1", "Message to send");3 つのパラメーターがあります。
- ターゲットゲームオブジェクトの名前
- そのオブジェクト上で呼び出すスクリプトメソッド
- 呼び出されたメソッドに渡すためのメッセージ文字列
UnitySendMessage- ネイティブコードからは、以下のシグネチャに対応するスクリプトメソッドのみを呼び出すことができます。
void MethodName(string message); - への呼び出しは非同期であり、1 フレーム遅延します。
UnitySendMessage - 2 つ以上のゲームオブジェクトが同じ名前を持つ場合、の使用時に競合が発生する可能性があります。
UnitySendMessage
デリゲートを使用
デリゲートを使用する場合、C# 側のメソッドは静的で、 属性でマークされている必要があります。
MonoPInvokeCallbackデリゲートを使用するには、以下を行います。
- メソッドをデリゲートとして extern メソッドに渡します。
- ネイティブコードで extern メソッドを、対応するシグネチャを持つ関数へのポインターを受け入れる関数として実装します。
ネイティブコードの関数ポインターは 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 でエンコードされ、ヒープに割り当てられます。