Unity从对象c接收事件

Ele*_*nor 5 c# objective-c unity-game-engine ios

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

-(TextMessage*) CsendText:(NSString *)number CmsgContent:(NSString *)msg{
    return [MessagingApi sendText:(NSString*) number msgContent:(NSString *) msg]
}
Run Code Online (Sandbox Code Playgroud)

这是我的包装代码:

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;
}
Run Code Online (Sandbox Code Playgroud)

你可以看到我返回一个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);
        }

    }       
Run Code Online (Sandbox Code Playgroud)

d4R*_*4Rk 9

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


Unity => iOS

C#代码

[DllImport ("__Internal")]
private static extern void _SomeCMethod(string parameter);
Run Code Online (Sandbox Code Playgroud)

(目标 - )C代码

void _SomeCMethod(const char *parameter) 
{
}
Run Code Online (Sandbox Code Playgroud)

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

iOS => Unity

Objective-C代码

- (void)callSomeCSharpMethod
    UnitySendMessage("GO", "SomeCSharpMethod", "parameter");
}
Run Code Online (Sandbox Code Playgroud)

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

void SomeCSharpMethod(string parameter)
{
}
Run Code Online (Sandbox Code Playgroud)

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


转换字符串

你必须将你的NSStrings 转换为c strings(const char *),反之亦然.

const char * => NSString

[NSString stringWithCString:string encoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)

NSString => const char *

[string cStringUsingEncoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)

注意: 这只是一个关于如何在C#和本机iOS代码之间实现双向通信通道的简单示例.当然你不想GameObject在你的代码中硬编码例如你的名字,所以你可以在一开始就把这个名字(来自Objective-C的回调)传递给你的原生iOS代码.