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代码。