ここは単なる好奇心の問題です。
iOS プラットフォームで Unity 用のプラグインを作成する場合、プラグインにはネイティブからマネージへのコールバック機能 (プラグインから Unity へ) が制限されています。基本的にこのドキュメント: iOS プラグイン Unity ドキュメント
コールバックできる関数シグネチャは次のとおりです。
次のシグネチャに対応するスクリプト メソッドのみをネイティブ コードから呼び出すことができます: function MethodName(message:string)
C で定義された署名は次のようになります。
void UnitySendMessage(const char* obj, const char* method, const char* msg);
つまり、これは文字列のみを Unity に送り返すことができることを意味します。
現在、私のプラグインでは、protobuf-net を使用してオブジェクトをシリアル化し、ユニティに送り返して逆シリアル化しています。私はこれを機能させましたが、解決策によって、私は非常に醜く、まったくエレガントではないと感じています:
Person* person = [[[[[Person builder] setId:123]
setName:@"Bob"]
setEmail:@"bob@example.com"] build];
NSData* data = [person data];
NSString *rawTest = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
UnitySendMessage("GameObject", "ReceiveProductRequestResponse", [rawTest cStringUsingEncoding:NSUTF8StringEncoding]);
基本的に、バイトストリームを文字列にエンコードするだけです。Unity では、文字列のバイトを取得し、そこから逆シリアル化します。
System.Text.UTF8Encoding encoding=new System.Text.UTF8Encoding();
Byte[] bytes = encoding.GetBytes(message);
これは機能します。しかし、それ以外の方法は本当にありませんか?おそらく、誰かが別の方法でそれを行う方法を知っていますか?