UnityでiOSのnative plugin

UnityでiOSのカメラロールを取得したかったので
native pluginを書きました。

これにはまってしまって抜け出せなくなってしまったので、
メモを残します:)

UnityでiOS(Swift 3)とAndroid(Java)のNative連携 - カメラロールから画像を取得し、Unity側で表示する - Qiita
基本的にはこの記事のコードを丸コピで進めていったのですが、
少し改良してこのようにしました。

public class CameraPicker
{
    [DllImport ("__Internal")]
    private static extern float OpenCameraRoll (string path);

    private Action<string> callback = (s) => { Debug.Log(s); };

    public void  CameraPickerAction(Action<string> callback) {
	this.callback = callback;
    }

    public void WakeUp()
    {
        if (Application.isEditor)
        {
            this.callback("Assets/Resources/test/background_test.jpg");
        }
        else
        {
            switch (Application.platform)
            {
                case RuntimePlatform.IPhonePlayer:
                    OpenCameraRoll( Application.temporaryCachePath + "/tempImage");
                    break;
                default:
                    throw new ArgumentOutOfRangeException();
            }
        }
    }

    public void CallbackAction(string path)
    {
        Debug.Log("callback!!!!!!!!!!!!");
	this.callback(path);
    }
}

このクラスのインスタンスをカメラロールを起動したいタイミングで作成して、
callbackのActionをセットして、WakeUpを実行すれば
起動するはずでしたが、何回やってもうまくいかない。

iPhone/Androidでネイティブプラグインを作るコツ…みたいなもの - テラシュールブログ

void UnitySendMessage(const char* オブジェクト名, const char* メソッド名, const char* 引数);

これをUnityで再現するなら、こんな処理になる。
GameObject.Find(オブジェクト名).SendMessage(メソッド名, 引数) ;```

色々なサイトを眺めていたところこのサイトにたどり着きました。

始めの詰まりは
UnitySendMessageの第一引数をクラス名にしていて呼ばれなかったこと(本当はオブジェクト名)

次の詰まりは
ユニークなオブジェクト名ではなかったことです。(クラス名と同じオブジェクト名でもうまくいかなかったような気がする)

「callbackできないよ!」
みたいなエラーが上がった時には確認してみてください。