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