c语言写桌面程序unity,Unity和iOS原生界面交互示例

注意上面的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文件的代码截图放在这里。

5524d9e9befd

.h文件

5524d9e9befd

.m文件

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

5524d9e9befd

修改startUnity方法中代码

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

5524d9e9befd

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

5524d9e9befd

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

5524d9e9befd

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/392964.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle审计实施

1、语句审计 Audit session; Audit session By ; 与instance连接的每个会话生成一条审计记录。审计记录将在连接时期插入并且在断开连接时期进行更新。 保留有关会话的信息比如连接时期断开连接时期处理的逻辑和物理I/O,以及更多信息将存储在单独一条审计 记录中…

JPDA 架构研究5 - Agent利用环境指针访问VM (内存管理篇)

引入: 我们在前面说到JVMTI的客户端Agent,又提到Agent通过环境指针来访问VM。这里就来看看环境指针到底有多大的访问VM的能力。 分类1:内存管理 a.Allocate. 分配内存 jvmtiError Allocate(jvmtiEnv* env,jlong size,unsigned char** mem_ptr) size:分配…

leetcode94. 二叉树的中序遍历(dfs)

给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3]1\2/3输出: [1,3,2]代码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val x; }* }*/ class …

vtk删除一个actor_如何构建一个基于actor的简单区块链

vtk删除一个actorScalachain is a blockchain built using the Scala programming language and the actor model (Akka Framework).Scalachain是使用Scala编程语言和参与者模型( Akka Framework )构建的区块链。 In this story I will show the development process to build…

java枚举的简单介绍

1.枚举,enum关键字,相当于public final static. 2.举例: 首先定义了一个名为spiciness的枚举类型。 public enum Spiciness {NOT, MILD, MEDIUM, HOT, FLAMING } 再来测试一下enum,这个测试方法表明它有tostring()方法&#xff0…

浏览器中插入富文本编辑器

常用的富文本编辑器有CKEditor、UEEditor、TinyEditor、KindEditor等、以下以kindeditor编辑器的使用为例。 1.官网下载KindEditor编辑器http://kindeditor.net/down.php, 当前最新版本为4.1.11,解压缩后放入项目的static目录,作为js插件引用…

获取Extjs文本域中的内容

经常在Ext.select()和Ext.query()等问题上纠结,今天终于有了点新认识: 需求,假设我们的页面上有个panel ,其id为clusterstab_edit_details,这个panel的内部有个textarea,这个textarea的name为editDetails_Description,那么我们有多少方法可以…

android触摸指纹会触发按键功能,Android P新特性:利用触摸指纹识别器能阻止手机息屏...

设想你正在阅读手机上的文章,突然间显示屏变暗了一点。显然,你设置的30秒或1分钟超时息屏对于常规使用来说还可以,但对于阅读纯文本片段,还远远不够。因此,这时你会轻触屏幕,可能会上下滑动,以防…

leetcode37. 解数独(hashmap+回溯)

编写一个程序,通过已填充的空格来解决数独问题。 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。 空白格用 ‘.’ 表示。 Note: 给定的数独序…

malloc、calloc、realloc和alloca各种的区别

需要先包含头文件 #include"malloc.h"malloc是标准的在堆中开辟新的空间比如char *pt(char *)malloc(10*sizeof(char));需要free(p)才会释放空间calloc也是开辟空间,但是使用方式不一样比如char *pt(char *)calloc(100, sizeof(char));然后用calloc开辟的…

如何对第一个Vue.js组件进行单元测试

by Sarah Dayan通过莎拉达扬 In Build Your First Vue.js Component we made a star rating component. We’ve covered many fundamental concepts to help you create more complex Vue.js components.在“ 构建您的第一个Vue.js组件”中,我们制作了星级评分组件…

Asp.NetCoreWebApi - RESTful Api

REST 常用http动词 WebApi 在 Asp.NetCore 中的实现3.1. 创建WebApi项目.3.2. 集成Entity Framework Core操作Mysql 3.2.1. 安装相关的包(为Xxxx.Infrastructure项目安装)3.2.2. 建立Entity和Context3.2.3. ConfigureService中注入EF服务3.2.4. 迁移数据库3.2.5. 数据库迁移结果…

android动画影子效果,Android TV常用动画的效果,View选中变大且有阴影(手机也能用)...

因为电视屏幕比较大,而我们看电视时距离电视有一定距离,这样就需要动画效果比较明显,这个动画就是应用最广泛的,因为很酷,呵呵,你懂得,看了就知道。效果如下图:public class MainAct…

leetcode226. 翻转二叉树(dfs)

翻转一棵二叉树。示例:输入:4/ \2 7/ \ / \ 1 3 6 9 输出:4/ \7 2/ \ / \ 9 6 3 1代码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode righ…

Java BigDecimal Rounding Mode

UP        往绝对值大了取 DOWN      往绝对值小了取 CEILING     往值大了取 FLOOR      往值小了取 HALF_UP     不管正负,四舍五入 HALF_DOWN  不管正负,五舍六入 HALF_EVEN    整数部分为奇数:四舍五入…

如何成为一名有效的软件工程师

by Luis Santiago路易斯圣地亚哥(Luis Santiago) 如何成为一名有效的软件工程师 (How to become an effective software engineer) When I first started my journey as a software engineer I quickly noticed the great amount of cognitive load involved when working on …

linux 高可用----keepalived+lvs

什么是高可用? HA(high availability)即高可用性;就是在高可用集群中发生单点故障时,能够自动转移资源并切换服务,以保证服务一直在线的机制。 LVS LVS:(linux virtual server&#…

用户配置相关文件

用户配置相关文件小总结 /etc/passwd 记录用户相关的信息 /etc/shadow 密码影子文件 /etc/group 记录用户组相关的信息 /etc/gshadow 密码影子文件(组密码) /etc/passwd 文件中各段的内容 第1段:用户名 第…

华为5c android n风格,华为荣耀畅玩5C的屏幕怎么样

华为荣耀畅玩5C的屏幕怎么样屏幕方面,华为荣耀畅玩5C采用了5.2英寸1080P级别GFF贴合屏幕,塑料边框采用了弧面状的设计,握感比较舒适。华为荣耀畅玩5C采用了双主天线的设计,分别在上下的塑料区域。此外,边框以及后盖的上…

spring解析配置文件(三)

一、从XmlBeanDefinitionReader的registerBeanDefinitions(doc,resource)开始 1 protected int doLoadBeanDefinitions(InputSource inputSource, Resource resource) 2 throws BeanDefinitionStoreException { 3 try { 4 …