u3d与iOS交互(页面跳转)

需要实现功能:从iOS原生界面进入u3d界面,然后还可以从u3d界面退出返回iOS界面.
软件版本Unity5.6.0 Xcode9.2

首先是u3d方面,如果需要从u3d界面返回iOS的话,需要iOS向u3d提供一个公共类用于两个编辑器交互,类里是iOS自己实现的退出页面方法.

u3d与iOS交互(页面跳转)_第1张图片
WX20180104-140926.png

这里一般会把交互类(ViewManager 名字随意 iOS创建 里面有void backClick()方法用于u3d界面退出,这里方法可以暂时不用写实现,之后会在xcode工程里再写也不迟)放在Plugins/iOS文件夹下,然后u3d会创建一个c#脚本来调用iOS的外部方法,再把脚本挂在返回按钮上.

接下来是iOS,u3d会将工程打包成一个xcode工程,这一过程最好在mac上进行,打包出来的xcode工程结构大致如下:
u3d与iOS交互(页面跳转)_第2张图片
WX20180104-141813.png

在Classes中可以找到UnityAppController这个类,UnityAppController和AppDelegate类似,可以对Application的整个生命周期进行管理的,而类里 - (void)startUnity:(UIApplication*)application 则是程序启动后会调用的方法.


u3d与iOS交互(页面跳转)_第3张图片
WX20180104-142553.png
u3d与iOS交互(页面跳转)_第4张图片
WX20180104-143103.png

然后在startUnity方法最下面,我们就可以添加自己的代码,让程序启动以后直接进入iOS的界面,
注意最好每次退出u3d界面都调用UnityPause(YES);使unity暂停,进入前则先调用UnityPause(NO);


u3d与iOS交互(页面跳转)_第5张图片
WX20180104-143934.png

这里为跳转界面的代码,前面我写了一个TabBarController作为跟控制器,并且为TabBar添加了两个子控制器,这个代码就不贴了,至此运行工程,应该程序直接会进入我们的TabBar控制器.

接下来我们要通过从iOS进入u3d界面,这里我用TabBarController来控制页面跳转,从UnityAppController中可以获得GetAppController().rootViewController,这就是u3d的Controller,于是我在TabBarController中写了一个block,点击按钮然后通过block回调,在UnityAppController中让TabBar跳转至u3d.


u3d与iOS交互(页面跳转)_第6张图片
WX20180104-145511.png

GetAppController().window.rootViewController其实就是我们的tabbar,之前我们刚刚替换的.

最后我们再从u3d退出回到iOS界面就大功告成,在Libraries/Plugins/iOS中可以找到我们之前提供给u3d交互用的公共类.
u3d与iOS交互(页面跳转)_第7张图片
WX20180104-142222.png

然后在ViewManager的预留方法中发送通知,让UnityAppController的startUnity接收方法退出u3d界面.


u3d与iOS交互(页面跳转)_第8张图片
WX20180104-150356.png

效果展示:
QQ20180104-151105.gif

你可能感兴趣的:(u3d与iOS交互(页面跳转))