【问题标题】:Unity receive event from object cunity 从对象 c 接收事件
【发布时间】:2015-06-19 13:01:51
【问题描述】:

我想为统一创建一个 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# ios objective-c unity3d


    【解决方案1】:

    这不是它的工作方式。您不能只返回 C 中的内容并期望它出现在 Unity/C# 中。 要实现“双向通信”,您需要执行以下操作。


    统一 => iOS

    C#代码

    [DllImport ("__Internal")]
    private static extern void _SomeCMethod(string parameter);
    

    (Objective-) C 代码

    void _SomeCMethod(const char *parameter) 
    {
    }
    

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

    iOS => 统一

    Objective-C 代码

    - (void)callSomeCSharpMethod
        UnitySendMessage("GO", "SomeCSharpMethod", "parameter");
    }
    

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

    void SomeCSharpMethod(string parameter)
    {
    }
    

    当你在 Objective-C 中调用 callSomeCSharpMethod 时,你的 C# 代码中的 SomeCSharpMethod 会被调用。


    转换字符串

    您必须将您的 NSStrings 转换为 c 字符串 (const char *),反之亦然。

    const char * => NSString

    [NSString stringWithCString:string encoding:NSUTF8StringEncoding];
    

    NSString => const char *

    [string cStringUsingEncoding:NSUTF8StringEncoding];
    

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

    【讨论】:

    • 这里使用 Unity 5.3.5f1。我必须将 Obj-C 方法声明为 extern "C" void _SomeCMethod(const char *parameter) 以便链接器找到它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    • 2014-06-15
    • 1970-01-01
    • 2019-08-04
    相关资源
    最近更新 更多