前言: 新手接触,大神勿喷,希望多多指教.
iOS与Unity 3D的交互有两种方式:
第一种:iOS调用Unity 3D提供的方法UnitySendMessage.第一个参数是 unity脚本挂载的gameobject 第二个参数是 unity提供的方法名 第三个参数是参数
UnitySendMessage(<#const char *obj#>, <#const char *method#>, <#const char *msg#>)
第二种:Unity 3D调用iOS的方法.此时需将OC配置成C作为中间桥梁(此代码写可在.m的最下部@end之后)
@interface SpeechRecognizer ()
{
IFlySpeechRecognizer *_iflySpeechRecognizer;
}
@end
@implementation SpeechRecognizer
// 方法内写unity调用的时候应该走的代码
- (void)initalVoice {
_iflySpeechRecognizer = [[IFlySpeechRecognizer alloc] init];
}
@end
SpeechRecognizer *speech = NULL;
#if defined (__cplusplus)
extern "C"
{
#endif
// 初始化 InitalSpeechRecognition为提供给Unity调用的方法名
// initalVoice为自己定的需要unity去调用的方法
void InitalSpeechRecognition() {
if (speech == NULL) {
speech = [[SpeechRecognizer alloc] init];
}
[speech initalVoice];
}
#if defined (__cplusplus)
}
#endif
网友评论
Profiler_InitProfiler();
切换偶尔是正常的,但有时候会显示错乱,麻烦看下
(void)showUnityWindow {
if (_didResignActive) {
UnityPause(false);
}
_didResignActive = NO;
UnityLoadApplication();
Profiler_InitProfiler();
self.window.hidden =YES;
self.unityWindow.hidden = NO;
[self.unityWindow makeKeyWindow];
}
(void)hideUnityWindow {
UnityPause(true);
_didResignActive = YES;
Profiler_UninitProfiler();
self.unityWindow.hidden = YES;
self.window.hidden = NO;
[self.window makeKeyWindow];
}
发送消息代码:
(void)wjBtnDidClicked {
[kAppDelegate showUnityWindow];
[self toUnityPageWithValue:@"wj"];
}
(void)scenesBtnDidClicked {
[kAppDelegate showUnityWindow];
[self toUnityPageWithValue:@"scenes"];
}
#pragma mark - 跳转到对应的Unity页面
(void)toUnityPageWithValue:(NSString *)value {
// TODO: 新增代码
//报错SendMessage: object Controller does not have receiver for function openSence! 说明UnitySendMessage传递的对象不具备相应的方法
const char *data = [value UTF8String];
/**
你那边需要打开场景的话 需要 传值给 OpenSence这个函数 通过ios给unity对象传值的方式 值有两个 "wj" 和 ”scenes“
"Controller" "openSence" "wj 或者 scenes"
*/
UnitySendMessage("Controller", "OpenSence",data);
}