Unity从对象c接收事件

我想为团结创建一个ios插件。 该函数使用一些sdk发送textmessage。 好吧,这是我的对象c:

-(TextMessage*) CsendText:(NSString *)number CmsgContent:(NSString *)msg{ return [MessagingApi sendText:(NSString*) number msgContent:(NSString *) msg] } 

这是我的包装代码:

 TextMessage* SendMessage(const char* contactNumber,const char* content){ Messaging* msg = [[Messaging alloc] init]; NSString* nr = [NSString stringWithUTF8String:contactNumber]; NSString* contentText = [NSString stringWithUTF8String:content]; TextMessage* newText = [msg CsendText:nr CmsgContent:contentText]; return newText; } 

你可以看到我返回一个textmessage,这是一个不是char的事件,我怎样才能将事件传递给团结,

我的c#代码在这里:

 #if UNITY_IPHONE [DllImport("__Internal")] private static extern string SendMessage (string contactNumber,string content); #endif string phoneNumber=""; string content=""; void OnGUI () { phoneNumber = GUI.TextField ( new Rect (250, 125, 250, 25), phoneNumber, 40); content = GUI.TextField (new Rect (250, 157, 250, 25), content, 40); if (GUI.Button(new Rect (250, 250, 100, 30),"click me")) { SendMessage(phoneNumber,content); } } 

这不是它的工作方式。 你不能只用C语言返回一些内容并期望它出现在Unity / C#中。 要实现“双向通信”,您需要执行以下操作。


Unity => iOS

C#代码

 [DllImport ("__Internal")] private static extern void _SomeCMethod(string parameter); 

(目标 – )C代码

 void _SomeCMethod(const char *parameter) { } 

当您在C#中调用_SomeMethod时,会调用(Objective-)C代码中的_SomeMethod

iOS => Unity

Objective-C代码

 - (void)callSomeCSharpMethod UnitySendMessage("GO", "SomeCSharpMethod", "parameter"); } 

C#代码( 附加到GO MonoBehaviour脚本

 void SomeCSharpMethod(string parameter) { } 

在Objective-C中调用callSomeCSharpMethod时,将调用C#代码中的SomeCSharpMethod


转换字符串

您必须将NSString转换为c字符串( const char * ),反之亦然。

const char * => NSString

 [NSString stringWithCString:string encoding:NSUTF8StringEncoding]; 

NSString => const char *

 [string cStringUsingEncoding:NSUTF8StringEncoding]; 

注意:这只是一个关于如何在C#和本机iOS代码之间实现双向通信通道的简单示例。 当然,您不希望在代码中对GameObject的名称进行硬编码,因此您可以在一开始就将该名称(对于Objective-C的回调)传递给您的本机iOS代码。