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)