0
点赞
收藏
分享

微信扫一扫

iOS与Unity交互


软件版本:Unity5.3.4/Xcode8.1

1、Unity导出的iOS工程文件目录如下:

                               

iOS与Unity交互_生命周期

作为一名开发者,我们拿到这个工程的第一件事,就是找到整个程序的入口,在我们所认知的大多数语言的入口都是Main()函数,OC也不例外,在

Classes文件夹下:

                                   

iOS与Unity交互_javascript_02

它在Main()函数里面,调用的文件是:

UnityAppController

iOS与Unity交互_ios_03


2、找到这个文件,通过研究发现,UnityAppController和AppDelegate是一样的,而在正常开发中,AppDelegate是对Application的整个生命周期进行管理的,下图为一个UIApplication的生命周期,我们可以看到系统事件存在着非常有用的监听,在UnityAppController.mm里面我们也可以看到对应的函数,这意味着在Unity中一样可以收到这些事件,以后我们将继承UnityAppController,并重写这些监听。也可以看一下这篇文章:http://www.jianshu.com/p/1f2792bc11c4


iOS与Unity交互_生命周期_04

3、找到UntiyAppController找到StartUnity()这个方法,程序在启动之后会调用这个方法,

iOS与Unity交互_ios_05

              

到这里,其实基本就已经实现切换到我们自己的界面了,但是可能会有疑问。

疑问一:怎么回到Unity的界面,这里切换了控制器那么Unity的控制器是不是已经拿不到了,或者已经释放了?

答:Unity里面有两个方法拿到RootViewController, GetAppController().window.rootViewController和GetAppController().rootViewController,他们两个内存地址是一样的,我替换的是Window的rootViewController,那么Unity本身的控制器是还是没有释放的,我们可以通过GetAppController().rootViewController去拿到,然后我们就可以用原生方法,pushviewcontroller或者modal去跳转进入。

   疑问二:进入Unity如何返回iOS原生界面?

答:这里需要Unity在他们的界面添加一个的外部方法(或者说我们提供一个外部方法给Unity调用),然后我们去根据进入Unity界面的时候是用push或者modal去进行退出操作,例如当前是Modal进入的:

 

iOS与Unity交互_javascript_06

以上其实就是与Unity界面切换的方法,其实不止一种,网上还有很多类似的方法,在这里也分享一下:

    ​​ javascript:void(0)​​    这个是当初学习的连接

    ​​ javascript:void(0)​​  虽然比较老了,但还是有很多学习的地方

    ​​ http://www.ceeger.com/forum/read.php?tid=20533​​   这个也比较详细。

 

4、真正的交互现在才开始:

    Unity本身给我们提供了很多方法,比如下面这些

iOS与Unity交互_javascript_07


可以发送消息,发送点击、移动和通知等事件。

举个简单的例子:


iOS与Unity交互_ios_08

这三个参数需要和Unity开发人员进行协商,可以复杂也可以简单,比如复杂到一个json字符串的传递。


    到这里,本次分享基本算是讲完,内容可能讲的有点粗糙,但是主要用意是分析一种学习思想,想清楚为什么要这样去做,以及如何去利用已知的知识去学习新的知识等等。


举报

相关推荐

0 条评论