Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity从对象c接收事件_C#_Ios_Objective C_Unity3d - Fatal编程技术网

C# Unity从对象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*

我想为unity创建一个ios插件。功能是使用一些sdk发送文本消息。这是我的目标c:

-(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];