我想为团结创建一个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);
}
}
答案 0 :(得分:8)
这不是它的工作方式。你不能只用C语言返回一些内容并希望它出现在Unity / C#中。 实现"双向沟通"您需要执行以下操作。
C#代码
[DllImport ("__Internal")]
private static extern void _SomeCMethod(string parameter);
(目标 - )C代码
void _SomeCMethod(const char *parameter)
{
}
在C#中调用_SomeMethod
时,会调用(Objective-)C代码中的_SomeMethod
。
Objective-C代码
- (void)callSomeCSharpMethod
UnitySendMessage("GO", "SomeCSharpMethod", "parameter");
}
C#代码(附加到MonoBehaviour
的 GO
脚本)
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代码。