C# Unity从对象c接收事件
我想为unity创建一个ios插件。功能是使用一些sdk发送文本消息。这是我的目标c:C# Unity从对象c接收事件,c#,ios,objective-c,unity3d,C#,Ios,Objective C,Unity3d,我想为unity创建一个ios插件。功能是使用一些sdk发送文本消息。这是我的目标c: -(TextMessage*) CsendText:(NSString *)number CmsgContent:(NSString *)msg{ return [MessagingApi sendText:(NSString*) number msgContent:(NSString *) msg] } 这是我的c包装代码: TextMessage* SendMessage(const char*
-(TextMessage*) CsendText:(NSString *)number CmsgContent:(NSString *)msg{
return [MessagingApi sendText:(NSString*) number msgContent:(NSString *) msg]
}
这是我的c包装代码:
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;
}
你可以看到我返回了一条文本消息,它是一个事件而不是一个字符,我如何才能将事件传递给unity
我的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#代码 (目标-)C代码 当您在C中调用
\u SomeMethod
时,将调用(目标)C代码中的\u SomeMethod
iOS=>Unity
目标C代码
- (void)callSomeCSharpMethod
UnitySendMessage("GO", "SomeCSharpMethod", "parameter");
}
C代码(monobhavior
脚本附加到GO
)
在Objective-C中调用callSomeCSharpMethod
时,会调用C#代码中的SomeCSharpMethod
转换字符串 您必须将
NSString
s转换为c字符串(const char*
),反之亦然
const char*
=>NSString
NSString
=>const char*
注意: 这只是一个关于如何在C#和本机iOS代码之间实现双向通信通道的简单示例。
当然,您不想在代码中硬编码,例如
游戏对象的名称,因此您可以在一开始就将该名称(用于从Objective-C回调)传递给您的本机iOS代码。此处使用Unity 5.3.5f1。我必须将Obj-C方法声明为extern“C”void\u SomeCMethod(const char*参数)
,链接器才能找到它。
void _SomeCMethod(const char *parameter)
{
}
- (void)callSomeCSharpMethod
UnitySendMessage("GO", "SomeCSharpMethod", "parameter");
}
void SomeCSharpMethod(string parameter)
{
}
[NSString stringWithCString:string encoding:NSUTF8StringEncoding];
[string cStringUsingEncoding:NSUTF8StringEncoding];