将Unity3D 添加到IOS具体页面 以及横屏显示

关于在ios中整合Unity的配置,参见上一篇文章 http://www.jianshu.com/p/6553127e6138
目前网上大部分的教程都是来自the-nerd的版本,所以都是用两个window来相互切换,这样有两点问题

1、如何设置ios整体竖屏,unity界面单独横屏?
2、如何将Unity展示在某个子View中?

接下来就来解决这两个问题

1.修改AppDelegate

将Unity3D 添加到IOS具体页面 以及横屏显示_第1张图片
AppDelegate h.png
将Unity3D 添加到IOS具体页面 以及横屏显示_第2张图片
AppDelegate m.png

1.1 只保留unityAppController,其他方法对象都不要
1.2 这样Unity就初始化好了
1.3 Unity无论在Android还ios都是和当前app的进程绑定在一起的,通常Unity退出,也会把程序杀死。不同的是,Android中可以创建分支进程,所以Unity嵌套在Android平台中,可以需要时再创建,关闭页面时就销毁,ios不行,只能一开始就初始化。

2.创建一个UI

自定义一个类继承UIViewController,在storyboard上添加一个ViewController 关联起来


将Unity3D 添加到IOS具体页面 以及横屏显示_第3张图片
UI.png

对应的 .mm文件


将Unity3D 添加到IOS具体页面 以及横屏显示_第4张图片
代码.png

2.1 UI界面很简单,上面一个view命名为unityView,下面添加一个button用于返回,稍微加一下居中靠边的约束
2.2 添加到指定的View中
一定要import UnityView.h 否则编译报错
一定要改成.mm文件 否则运行时报错
frame可以任意设定,以此来调整unity显示的位置
其实UnityGetGLView()就是unityView

extern "C" UIView*      UnityGetGLView()    { return GetAppController().unityView; }

2.3 横屏
必须是模态推出(modal)
导出Unity项目最好是 AutoRotation (Orientation?)
shouldAutorotate 必须返回NO 否则转动屏幕后会回到ios app设置的方向
ios程序设置竖屏

3 运行图

将Unity3D 添加到IOS具体页面 以及横屏显示_第5张图片
QQ图片20170825194850.png

4 Bug

有一个问题至今没有解决,项目中需要切换3D模型和AR场景
显示横屏时,3D场景界面显示正确,AR场景的图标也显示正确方向,但摄像头取景却会反向(影像是倒的),暂时还不知道如何处理(感觉是高通的Bug,有知道的可以分享一下),如果单独只是用3D场景,上面的方式是没有问题的。

以上,代码还是蛮简单的。

你可能感兴趣的:(将Unity3D 添加到IOS具体页面 以及横屏显示)