iOS与Unity 3D的交互

作者: 走向菜鸟的菜鸟 | 来源:发表于2016-12-17 15:09 被阅读174次

前言: 新手接触,大神勿喷,希望多多指教.
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

相关文章

网友评论

  • paintingStyle:iOS端内部嵌入了两款AR的游戏,进入不同的场景使用 UnitySendMessage("Controller", "OpenSence",data);传递不同的参数,但是只有第一次启动他才能进入其中一个,当进入第二个发送新的消息时还是会显示第一个的游戏画面,iOS端Unity是无法关闭的,后来测试加入 UnityLoadApplication();
    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);
    }
  • 否极泰来_L:你们开发是将Unity导入iOS项目中吗?
    走向菜鸟的菜鸟:@航磊_ 是的

本文标题:iOS与Unity 3D的交互

本文链接:https://www.haomeiwen.com/subject/negomttx.html