【Unity】iOSネイティブプラグインのSwiftからのコールバック

botman_orange Unity

UnityHub-2.4.3 Unity-2020.3.6f1 Xcode-12.4 Swift-5.3

はじめに

iOS の BLE 接続プラグインを作成して下記のようなものを作ってみました。

Unity から iOS のメソッド呼び出しはサクッとできたのですが iOS 側からのコールバックに少しつまづいたのでそのあたりについて書きます。

プラグインの構成

せっかくなので Swift で書きたいので下記の構成になります。

pludin

プラグインに必要なのは下記2つです。

  • .mm ファイル(C#から呼び出す用)
  • .swift ファイル(プラグインの実装ファイル)

ボタンを押して Swift の print を実行して 10 を返すメソッドを呼び出す場合、下記のような実装になります。

Swift ファイル。

Objective-C++ ファイル。

C# ファイル。

少し気をつけないといけないのが C# に int を返したい場合、Swift 側では Int ではなく Int32 を使う必要があります。Int を使うと思わぬ動作をしたり、クラッシュしたりするので気をつけましょう。

対応する型は下記参考。
Objective-CからSwiftへの書き換え作業、型、ポインタ、配列Array、辞書Dictionary

コールバック

いよいよコールバックを実装します。

Swift ファイル。

Objective-C++ ファイル。

C# ファイル。

これでボタンを押したときに static void HogeCallback(int num, string text) が呼び出されます。

string を扱いたい場合に const signed char* でいいのかはちょっとわかりませんがとりあえず動きました。

これを応用してコールバックをいっぱい登録すれば「はじめに」にあるような BLE 接続ができます。

おわりに

無事 Swift からコールバックできました!

今回のやつだとメモリリークする気がするのでちゃんとやるならいいタイミングで登録したコールバック関数を開放してやるために clear メソッド(ここで nil つっこむ)とか作って呼び出す必要があるかと思います。

参考

コメント

タイトルとURLをコピーしました