注意上面的Main方法中出现的UnityAppController,该类就是作为控制类来实现Unity在iOS上显示的功能,在Main方法中就是将该控制器作为参数传递,即Main方法之后就会进入该类执行。

所以这是我们进入到UnityAppController.mm,来查看该类中的方法执行顺序,可以看到这里的代码结构和OC的一般类的代码结构类似,除此之外还有一些C语言程序,作为相对底层中Unity与iOS交互的桥梁,不用管。我们需要关注的是:UnityAppController.mm中函数执行的顺序以及我们能够在哪里加上我们自己的代码实现”项目入口”的修改,从而做到整个程序一上来先显示我们自己的View,然后通过自定义事件再来跳转到Unity部分。所以整个项目看起来就像把Unity导出的工程剖开,将我们自定义的部分”塞”进去,从而实现iOS与Unity3d的交互。

操作步骤

通过UnityAppController.mm类中方法的执行顺序可以看出,在执行完StartUnity时,才让Unity界面显示出来,所以这个方法就是在Xcode中Unity界面的入口,所以这里我们可以通过修改这个入口,从而实现对Unity界面显示的控制。

1、在Xcode工程中创建一个OC的类,分别为HomeViewController,EnterIUnityViewController,以及单例类MyDataManager

2、各个类的作用,首先解释一下单例类MyDataManager,在该单例中实现存放一些全局变量,来判断是否进行跳转的判断,以及在该单例中还声明了存放UIViewController和UIWindow变量,因为实现修改程序入口的本质就是对window进行修改。

PS:因为有同学一直问这里单例类里实现的代码,所以这里更新下,将单例类中的.h文件和.m文件的代码截图放在这里。

.h文件

.m文件

而HomeViewController是自定义的一个来,该类只是简单地提供一个iOS的原生界面,在该界面上防止按钮,实现向EnterUnityViewController跳转,这里使用的模态。

修改startUnity方法中代码

EnterViewController中主要实现点击进入Unity界面的方法,同时在该类中实现进入到Unity界面时,在Unity界面上添加返回到之前界面按钮的方法。在该方法里要判断是不是第一次启动Unity,如果是第一次启动Unity界面的话,需要添加返回按钮,如果不是的话,就通过单例中保存的Unity的viewController取出来进行展示。具体实现如下

添加的返回按钮的方法如下

3、如果是第一次启动Unity界面的话,还是需要到Unity自动生成的UnityAppController中进行修改它的入口函数的,在入口函数中进行判断,代码如下: