ドキュメント

Unity Engine

Unity Engine

ネイティブコードからのコールバック

Understand how to use native-to-managed callback functionality.
読み終わるまでの所要時間 4 分最終更新 1ヶ月前

Unity iOS は、ネイティブからマネージへのコールバック機能を制限付きでサポートします。これは、以下の 2 つの方法のいずれかで行うことができます。
**ヒント:**マネージコードからのアンマネージコードの呼び出しは、iOS 上でプロセッサーに高負荷を与えます。フレームごとに複数のネイティブメソッドを呼び出さないでください。

UnitySendMessage を使用

UnitySendMessage
は以下のようになります。
UnitySendMessage("GameObjectName1", "MethodName1", "Message to send");
3 つのパラメーターがあります。
  • ターゲットゲームオブジェクトの名前
  • そのオブジェクト上で呼び出すスクリプトメソッド
  • 呼び出されたメソッドに渡すためのメッセージ文字列
UnitySendMessage
には以下の制限があります。
  1. ネイティブコードからは、以下のシグネチャに対応するスクリプトメソッドのみを呼び出すことができます。
    void MethodName(string message);
  2. UnitySendMessage
    への呼び出しは非同期であり、1 フレーム遅延します。
  3. 2 つ以上のゲームオブジェクトが同じ名前を持つ場合、
    UnitySendMessage
    の使用時に競合が発生する可能性があります。

デリゲートを使用

デリゲートを使用する場合、C# 側のメソッドは静的で、
MonoPInvokeCallback
属性でマークされている必要があります。
デリゲートを使用するには、以下を行います。
  1. メソッドをデリゲートとして extern メソッドに渡します。
  2. ネイティブコードで 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 でエンコードされ、ヒープに割り当てられます。

追加リソース