Unity iOS混合开发界面切换思路

最近有很多博友QQ 私信 或则 留言联系我,请教iOS和Unity界面之前相互切换的问题,源代码就不私下发你们了,界面跳转功能的代码我直接贴到下面好了,顺带说iOS和Unity界面切换的思路。。。

思路

之前一篇文章里面只谈到了Unity和iOS工程的融合,并没有谈到iOS和Unity界面的切换,这里谈谈思路,Unity导出的iOS工程里面的结构大致是这样的,有一个Window,Window上有一个UnityView,但是并没有控制器,也没有根控制器,虽然在导出的iOS工程中Classes文件夹下的UnityAppController中有rootController的属性,但是上面也标注为空~ 所以,思路就只有一种,,既然Unity导出的iOS工程有一个Window并没有控制器,那好,混合开发我们就做两个Window,一个Window用来展示Unity的几面,另外一个Window用于展示iOS APP 原生的界面~ 这就是切换Window的思想。。混合开发这样切换Window的思路应该很常见了。。下面直接贴代码,公司重要代码已经删除,核心代码都在,应该不会影响您的阅读~

Unity界面切换到iOS界面

Unity部分代码~

/// <summary>
/// 停止Unity
/// </summary>
[DllImport ("__Internal")]
private static extern void StopUnity (); // 关闭unity界面
public void CloseUnity ()
{
#if UNITY_ANDROID
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("StopUnity");
#elif UNITY_IPHONE || UNITY_IOS
StopUnity();
#endif
}

Unity这段代码是当在Unity的界面点击一个按钮关闭Unity并且跳转到iOS的界面的时候执行的,上面声明一个内联函数,这个内联函数可以链接到iOS C语言的函数。。在Unity里面声明后当执行一个方法后调用内联函数,这时候会执行iOS已经写好的内联函数,iOS部分代码如下。。

iOS部分代码~

extern "C" {
void StopUnity () { UnityAppController *unityDe = (UnityAppController *)[UIApplication sharedApplication].delegate;
if (unityDe.window.windowLevel == UIWindowLevelNormal){
unityDe.window.windowLevel = UIWindowLevelNormal - 1;
}
[unityDe.appWindow makeKeyAndVisible];
}
}

这段代码写到iOS .mm 的文件中,用 extern "C" {} 包起来,生命这是C 的内联函数。。当Unity调用了StopUnity() 的方法,就会调用iOS extern "C" {} 中的 StopUnity() 方法。。这时候iOS在 StopUnity中执行切换界面的方法。。

iOS界面切换到Unity界面

iOS界面点击一个Button切换到Unity界面。。

iOS部分代码~

// 点击按钮切换到Unity界面~
- (void)didClickButton {
UnityAppController *unityDe = (UnityAppController *)[UIApplication sharedApplication].delegate;
if(unityDe.window.windowLevel == UIWindowLevelNormal - 1) {
unityDe.window.windowLevel = UIWindowLevelNormal;
}
UnitySendMessage("NativeManager", "NStartUnity", "1");
[unityDe.window makeKeyAndVisible];
}

iOS界面中有一个Button,点击这个Button切换到Unity的界面,其中UnitySendMessage("NativeManager", "NStartUnity", "1");这句代码的意思是向Unity发送了一个消息,这个消息发送给Unity里面NativeManager这个对象,告诉NativeManager这个对象调用NStartUnity这个方法,并且传递参数1 。。iOSer看到这里有点可能不解了吧。。。下面再看看Unity部分的代码

Unity场景

场景中有一个NativeManager,,也就是iOS发送的对象,NativeManger上面挂了一个脚本,YXUnityAPI,这个脚本里的代码如下:

Unity部分代码:

using UnityEngine;
using System.Collections;
using Vuforia;
using CFramework; /// <summary>
/// 此脚本只处理交互,不做功能性的方法处理~
/// </summary> public class YXUnityAPI : MonoBehaviour
{
#region 新的API接口 /// <summary>
/// 打开Unity,展现第几个场景
/// </summary>
/// <param name="num">打开场景编号</param>
public void NStartUnity (string scenseNum)
{ int num = int.Parse (scenseNum);
switch (num) { case 1:
UnityEngine.SceneManagement.SceneManager.LoadScene ("YXMJ");
break; case 2:
UnityEngine.SceneManagement.SceneManager.LoadScene ("GRYO");
break; default:
break;
} YXUnityAPIHandler.Instance ().StartUnity (num); } #endregion }

如果博友 是一名 iOSer或则是一名Unityer,,您可以和你们公司另外一名小伙伴一起阅读上面的代码,毕竟一部分是iOS的代码,一部分是Unity的代码,,好了,上面的思路就能实现Unity和iOS界面的切换了。。如果您还有疑问~欢迎留言。。

Unity iOS混合开发界面切换思路的更多相关文章

  1. iOS - 混合开发

    5.oc 与 js 混合开发 PhoneGap 专门做混合开发的,已经被另一个公司收购. WebViewJavascriptBridge 国内用的比较多 混合开发的好处:跨平台性.H5开发的时间成本, ...

  2. Unity和Android混合开发

    通用的流程 https://blog.csdn.net/zhangdi2017/article/details/65629589 应用场景 Unity游戏中一些功能需要安卓系统的支持,如搜索wifi等 ...

  3. iOS 实现简单的界面切换

    以下是在iOS中最简单的界面切换示例.使用了多个Controller,并演示Controller之间在切换界面时的代码处理. 实现的应用界面: 首先,创建一个window-based applicat ...

  4. ios&h5混合开发项目仿app页面跳转优化

    前言:本人原本是ios开发工程师,但由于现今H5的兴起,行内刮起了一阵混合开发的风气,趁着这股劲,我也学了前端开发,不说研究的多深,但也能胜任日常的开发工作.长话短说,现今的混合开发应该还处于摸索阶段 ...

  5. iOS混合应用开发入门

    原文出处: cocoacontrols   译文出处:魏志峰(@JeremyWei)   欢迎分享原创到伯乐头条 http://blog.jobbole.com/46554/ 介绍 上周(译者:原文成 ...

  6. 移动web、webApp、混合APP、原生APP、androd H5混合开发 当无网络下,android怎么加载H5界面

    PhoneGap是一个采用HTML,CSS和JavaScript的技术,创建移动跨平台移动应用程序的快速开发平台.它使开发者能够在网页中调用IOS,Android,Palm,Symbian,WP7,W ...

  7. 混合开发使用Chrome Inspect调试WebView预览手机界面和定位元素

    使用Chrome Inspect调试混合应用可以帮助我们排查问题.例如定位元素,快速修改CSS样式并实时查看效果.其实微信开发也是一种混合开发模式,微信可以看做一个原生的Android App搭配了一 ...

  8. 《React Native 精解与实战》书籍连载「iOS 平台与 React Native 混合开发」

    此文是我的出版书籍<React Native 精解与实战>连载分享,此书由机械工业出版社出版,书中详解了 React Native 框架底层原理.React Native 组件布局.组件与 ...

  9. iOS 11开发教程(十三)iOS11应用编辑界面添加视图

    iOS 11开发教程(十三)iOS11应用编辑界面添加视图 在iOS中添加视图的方式有两种:一种是使用编辑界面添加视图:另一种是使用代码添加视图.以下是这两个方式的详细介绍. 1.编辑界面添加视图 使 ...

随机推荐

  1. iOS---iOS10适配iOS当前所有系统的远程推送

    一.iOS推送通知简介 众所周知苹果的推送通知从iOS3开始出现, 每一年都会更新一些新的用法. 譬如iOS7出现的Silent remote notifications(远程静默推送), iOS8出 ...

  2. ShenNiu.MVC管理系统

    本篇将要和大家分享的是一个简单的后台管理系统,这里先发个地址http://www.lovexins.com:8081/(登陆账号:youke,密码:123123:高级用户账号:gaoji,密码:123 ...

  3. CRL快速开发框架系列教程十三(嵌套查询)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  4. 深入浅出JavaScript之原型链&继承

    Javascript语言的继承机制,它没有"子类"和"父类"的概念,也没有"类"(class)和"实例"(instanc ...

  5. TFS 测试用例步骤数据统计

    TFS系统集成了一套BI系统,基于SQL Server的Analysis Service进行实现的.通过这几年的深入使用,能够感触到这个数据数据仓库模型是多么的优秀,和微软官方提供的数据仓库示例Adv ...

  6. spring boot 实战:我们的第一款开源软件

    在信息爆炸时代,如何避免持续性信息过剩,使自己变得专注而不是被纷繁的信息所累?每天会看到各种各样的新闻,各种新潮的技术层出不穷,如何筛选出自己所关心的? 各位看官会想,我们是来看开源软件的,你给我扯什 ...

  7. VB.NET设置控件和窗体的显示级别

    前言:在用VB.NET开发射频检测系统ADS时,当激活已存在的目标MDI子窗体时,被其他子窗体遮住了,导致目标MDI子窗体不能显示. 这个问题怎么解决呢?网上看到一篇帖子VB.NET设置控件和窗体的显 ...

  8. python 3.5 成功安装 scrapy 的步骤

    http://www.cnblogs.com/hhh5460/p/5814275.html

  9. JDBC增加删除修改

    一.配置程序--让我们程序能找到数据库的驱动jar包 1.把.jar文件复制到项目中去,整合的时候方便. 2.在eclipse项目右击"构建路径"--"配置构建路径&qu ...

  10. 【Java大系】Java快速教程

    感谢原作者:Vamei 出处:http://www.cnblogs.com/vamei Java是面向对象语言.这门语言其实相当年轻,于1995年才出现,由Sun公司出品.James Gosling领 ...