IOS与Unity交互
学习了宣雨松的两篇Unity和IOS交互的文章,自己动手做了下,遇到了些问题,在此记录
先说IOS发送消息给Unity:(文章地址:http://www.xuanyusong.com/archives/517)
先在unity写好脚本,并拖到cube上,代码是给IOS来调用的,代码如下:
var vrotate : Vector3; //向左旋转
function MoveLeft()
{
var rotate : float = Time.deltaTime * 100;
vrotate = Vector3.up * rotate;
transform.Rotate(vrotate, Space.World);
} //向右旋转
function MoveRight()
{
var rotate : float = Time.deltaTime * 100;
vrotate = Vector3.down* rotate;
transform.Rotate(vrotate, Space.World);
} //向上旋转
function MoveUp(){
var rotate : float = Time.deltaTime * 100;
vrotate = Vector3.right* rotate;
transform.Rotate(vrotate, Space.World);
} //向下旋转
function MoveDown(){
var rotate : float = Time.deltaTime * 100;
vrotate = Vector3.left* rotate;
transform.Rotate(vrotate, Space.World);
}
接下来将这个Unity工程导出成Xcode项目,双击xcodeproj后缀的工程文件,默认是xcode打开此文件,
右键Classws文件夹 → New File... → Objective-C File 取名MyView,那么会添加MyView.m的文件,此时把后缀m改成mm
同样在新建个Header File,名也为MyView,那么会添加MyView.h的文件
MyView.h的代码如下:
#ifndef Unity_iPhone_MyView_h
#define Uni #import <UIKit/UIKit.h> @interface MyView : UIViewController @end #endif
MyView.mm的代码如下:
#import "MyView.h"
@implementation MyView // Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
-(void)viewDidLoad{
[super viewDidLoad];
//创建label视图
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(, , , )];
//设置显示内容
label.text = @"IOS调用Unity";
//设置背景颜色
label.backgroundColor = [UIColor blueColor];
//设置文字颜色
label.textColor = [UIColor whiteColor];
//设置显示位置居中
label.textAlignment = UITextAlignmentCenter;
//设置字体大小
label.font = [UIFont fontWithName:[[UIFont familyNames] objectAtIndex:] size:]; //创建按钮
UIButton *button0 = [UIButton buttonWithType:];
//设置按钮范围
button0.frame = CGRectMake(, , , );
//设置按钮显示内容
[button0 setTitle:@"矩形左旋转" forState:UIControlStateNormal];
//设置按钮改变后 绑定响应方法
[button0 addTarget:self action:@selector(LeftButtonPressed) forControlEvents:UIControlEventTouchUpInside]; //创建按钮
UIButton *button1 = [UIButton buttonWithType:];
//设置按钮范围
button1.frame = CGRectMake(, , , );
//设置按钮显示内容
[button1 setTitle:@"矩形右旋转" forState:UIControlStateNormal];
//设置按钮改变后 绑定响应方法
[button1 addTarget:self action:@selector(RightButtonPressed) forControlEvents:UIControlEventTouchUpInside]; //创建按钮
UIButton *button2 = [UIButton buttonWithType:];
//设置按钮范围
button2.frame = CGRectMake(, , , );
//设置按钮显示内容
[button2 setTitle:@"矩形上旋转" forState:UIControlStateNormal];
//设置按钮改变后 绑定响应方法
[button2 addTarget:self action:@selector(UpButtonPressed) forControlEvents:UIControlEventTouchUpInside]; //创建按钮
UIButton *button3 = [UIButton buttonWithType:];
//设置按钮范围
button3.frame = CGRectMake(, , , );
//设置按钮显示内容
[button3 setTitle:@"矩形下旋转" forState:UIControlStateNormal];
//设置按钮改变后 绑定响应方法
[button3 addTarget:self action:@selector(DownButtonPressed) forControlEvents:UIControlEventTouchUpInside]; //向view添加
[self.view addSubview:label];
[self.view addSubview:button0];
[self.view addSubview:button1];
[self.view addSubview:button2];
[self.view addSubview:button3];
} //向左按钮
-(void)LeftButtonPressed{
UnitySendMessage("Cube","MoveLeft","");
} //向右按钮
-(void)RightButtonPressed{
UnitySendMessage("Cube","MoveRight","");
}
//向上按钮
-(void)UpButtonPressed{
UnitySendMessage("Cube","MoveUp","");
} //向下按钮
-(void)DownButtonPressed{
UnitySendMessage("Cube","MoveDown","");
} - (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning]; // Release any cached data, images, etc. that aren't in use.
} - (void)viewDidUnload {
[super viewDidUnload];
} - (void)dealloc {
[super dealloc];
} @end
找到UnityAppController.mm此文件:
导入#include “MyView.h”
在UnityAppController.mm文件下的这个方法(didFinishLaunchingWithOptions)里面
加入如下代码:
MyView * myView = [[MyView alloc] init];
[UnityGetGLView() addSubview:myView.view];
return YES;
大功告成!
Unity发送消息给IOS:(文章地址:http://www.xuanyusong.com/archives/521)
新建一个Unity脚本,名为SDK
using UnityEngine;
using System.Runtime.InteropServices; public class SDK
{
//导出按钮以后将在xcode项目中生成这个按钮的注册,
//这样就可以在xocde代码中实现这个按钮点击后的事件。
[DllImport("__Internal")]
private static extern void _PressButton0 (); public static void ActivateButton0 ()
{ if (Application.platform != RuntimePlatform.OSXEditor)
{
//点击按钮后调用xcode中的 _PressButton0 ()方法,
//方法中的内容须要我们自己来添加
_PressButton0 ();
}
} //和上面一样
[DllImport("__Internal")]
private static extern void _PressButton1 (); public static void ActivateButton1 ()
{
if (Application.platform != RuntimePlatform.OSXEditor)
{
_PressButton1 ();
}
}
}
再新建一个脚本Main.cs
using UnityEngine;
using System.Collections; public class Main : MonoBehaviour { //声明两个Texture变量,图片资源在外面连线赋值
public Texture Button0;
public Texture Button1; // Use this for initialization
void Start () { } // Update is called once per frame
void Update () { } //这个方法用于绘制
void OnGUI() {
//绘制两个按钮
if(GUI.Button(new Rect(,,,),Button0))
{
//返回值为ture说明这个按钮被点击
SDK.ActivateButton0();
} //绘制两个按钮
if(GUI.Button(new Rect(,,,),Button1))
{
//返回值为ture说明这个按钮被点击
SDK.ActivateButton1();
}
}
}
将Untiy3D项目导出成Xcode项目,我们用Xcode打开它。添加Unit3D中GUI按钮点击后的响应事件。创建一个类命名为MyView.h 、MyView.mm,用它来接收Unity3D 回馈回来的消息,_PressButton0 与 _PressButton1 这两个方法在Unity3D中已经注册过,所以在这个类中我们须要对它进行Xcode中的实现。
MyView.h代码如下:
#ifndef Unity_iPhone_MyView_h
#define Unity_iPhone_MyView_h @interface MyView : UIViewController void _PressButton0(); void _PressButton1(); @end
#endif
MyView.mm代码如下:
关键点:unity调用Xcode封装的函数,声明时需要在自己写的MyView类的头部引用extern "C"
extern "C"
#import "MyView.h" @implementation MyView //接收Unity3D 传递过来的信息 void _PressButton0()
{
UIAlertView *alert = [[UIAlertView alloc] init];
[alert setTitle:@"测试Unity向IOS发送消息"];
[alert setMessage:@"点击了第一个按钮"];
[alert addButtonWithTitle:@"确定"];
[alert show];
[alert release];
} void _PressButton1()
{ UIAlertView *alert = [[UIAlertView alloc] init];
[alert setTitle:@"测试Unity向IOS发送消息"];
[alert setMessage:@"点击了第二个按钮"];
[alert addButtonWithTitle:@"确定"];
[alert show];
[alert release];
} @end
IOS与Unity交互的更多相关文章
- Android与Unity交互研究
转载请注明出处:http://blog.csdn.net/crazy1235/article/details/46733221 Android与Unity交互研究 unity与android交互的由来 ...
- Cordova - 与iOS原生代码交互2(使用Swift开发Cordova的自定义插件)
在前一篇文章中我介绍了如何通过 js 与原生代码进行交互(Cordova - 与iOS原生代码交互1(通过JS调用Swift方法)),当时是直接对Cordova生成的iOS工程项目进行编辑操作的(添加 ...
- iOS与HTML5交互方法总结(转)
今天小编在找技术文章的时候,发现这样一个标题:iOS与HTML5交互方法总结,怎么看着这么熟悉呢? 还以为是刚哥用了别的文章,点进去一看,原来是刚哥自己写的文章,他们转载的,而且还上了Dev St ...
- iOS与H5交互
H5与App原生交互,一般会是前端页面中的JavaScript与App使用的原生开发语言的交互.技术方案应能达到以下要求: 在js与原生进行交互的时候能保证正常的正向调用逻辑返回,反向可以处理异步回调 ...
- iOS与H5交互遇到的坑
之前的博客写过使用<JavaScriptCore/JavaScriptCore.h>库来实现与H5的交互,但是在项目中还是遇到了一些不得不踩的坑.在这里将我遇到的问题以及参考网上几位大神的 ...
- WebViewJavascriptBridge详细使用 iOS与H5交互的方案
WebViewJavascriptBridge详细使用 源网址: https://www.cnblogs.com/jiang-xiao-yan/p/5345755.html 前言 WebView ...
- iOS与HTML5交互方法总结(修正)
摘要 看了不少别人写的博客或者论坛,关于iOS与HTML5交互方法大概主要有5种方式: 1. 利用WKWebView进行交互(系统API) 2. 利用UIWebView进行交互(系统API) 3. 苹 ...
- cordova与ios native code交互的原理
非常早曾经写了一篇博客,总结cordova插件怎么调用到原生代码:cordova调用过程,只是写得太水.基本没有提到原理.近期加深了一点理解,又一次补充说明一下 js调用native 以下是我们产品中 ...
- unity 和 iOS/Android 信息交互(方法调用)
参考文章均来源于[大神雨松momo]的文章. unity -> iOS // unity 程序 usingSystem.Runtime.InteropServices; usingUnityEn ...
随机推荐
- 2018.8.1 Java中的反射和同步详解
为何要使用同步? java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查), 将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他 ...
- 在控制台中 使用memcache
控制台的代码 在memcache 中查询 hans,结果显示如下 :
- 在VS中使用Boost库出现Macro redefinition错误的解决方法(warning C4005)
最近使用Boost库做多线程开发,可视在vs中编译工程师总是遇到Macro redefinition错误,类似下面的错误描述 1>c:\program files (x86)\microsoft ...
- skimage.io.imread vs caffe.io.load_image
这两周在跑一个模型,我真的是被折腾的要崩溃了. 最后原因就是数据类型的问题,你说是不是应该管小黑屋啊. skimage.io.imread得到的是uint8的数据,而caffe.io.load_ima ...
- c/c++基础
如果有你认为重要的知识点,而我这却没有记录下来的,那么期待你分享给我(^U^)ノ~YO. 1.在结构体中,符号->的前面是指针变量,符号.的前面是普通变量. 程序中a->b等价于(*a ...
- rest_framwork组件
rest framework介绍 (CBV(class base views)) 在开发REST API的视图中,虽然每个视图具体操作的数据不同,但增.删.改.查的实现流程基本套路化,所以这部分代码也 ...
- linux中安装JDK linux中安装Tomcat linux中安装Mysql 及故障解析 linux系统安装redis
Linux 安装JDK 配置完环境变量后无法使用 java -version 无法打开 通过下面语句 将32位文件与当前系统64位兼容 (有待补充32位查法)sudo yum install glib ...
- Docker学习之镜像操作
使用Docker镜像 以下都是Docker镜像的一系列重要名操作,包括获取.查看.搜索.删除.创建.存出或载入.上传等.可使用docker image help命令查看帮助. 1.获取镜像(pull) ...
- 开发工具cfree安装报错解决
报错如下: [ --------------------配置: mingw5 - CUI Debug, 编译器类型: MinGW-------------------- 检查文件依赖性... 正在编译 ...
- PLC状态机编程第一篇-状态机介绍
状态机的一般概念 过去我在学习PLC编程时,看的大部分书仅仅停留在软件的操作上,没有真正讲述如何组织程序,这里我们讲一个通用的描述控制算法的方法,就是状态机,和SFC很类似,其实SFC也是源于状态机啦 ...