Unity和OC的交互通信

1,439 阅读1分钟

Unity和OC的交互通信(方法互相调用)

一、Unity中通过C#调用OC方法

1.带参数的方法

1)在C#文件中声明外部的OC方法

// @param initJson 初始化参数
[DllImport("__Internal")]
private static extern void SDKInit(string initJson);

2)在C#文件中调用外部的OC方法

// 初始化的实现
void SDKInit(const char *initJson) {
    [SDKUnityConnector initSDK:[NSString stringWithUTF8String:initJson]];
}
2.不带参数的方法

1)在C#文件中声明外部的OC方法

[DllImport("__Internal")]
private static extern void SDKLogin();

2)在C#文件中调用外部的OC方法

// 不带参数的方法的实现
void SDKLogin() {
    [SDKUnityConnector login];
}
3.带返回值的方法

1)在C#文件中声明外部的OC方法

[DllImport("__Internal")]
private static extern string SDKGetUserInfo();

2)在C#文件中调用外部的OC方法

// 不带参数的方法的实现
const char * SDKGetUserInfo() {
    return [[SDKUnityConnector getUserInfo] UTF8String];
}

其中OC中方法的声明和实现(步骤2)要写在.mm文件中,例如:

#if defined(__cplusplus)
extern "C" {
#endif
    void SDKLogin() {
        [SDKUnityConnector login];
    }
#if defined(__cplusplus)
}
#endif

二、OC回调Unity

1.通过UnitySendMessage函数回调

1)在.m文件中通过UnitySendMessage函数来完成回调

// 通知对象名称(U3D)
static NSString *s_callbackGameObject = @"Main";

// 通知对象的函数名称(U3D)
static NSString *s_callbackFunc = @"SDKCallback";

// msg为OC字符串
UnitySendMessage(s_callbackGameObject.UTF8String, s_callbackFunc.UTF8String, msg.UTF8String)