这里只是一个好奇的问题。
当您在 iOS 平台上为 Unity 编写插件时,插件具有有限的本地到托管回调功能(从插件到 Unity)。基本上这个文档: iOS 插件 Unity 文档
声明您可以回调的函数签名是这样的:
只能从本机代码调用与以下签名相对应的脚本方法: function MethodName(message:string)
C 中定义的签名如下所示:
void UnitySendMessage(const char* obj, const char* 方法, 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);
这确实有效。但是真的没有别的办法了吗?也许有人知道如何以其他方式完成它?