学习了宣雨松的两篇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交互的更多相关文章

  1. Android与Unity交互研究

    转载请注明出处:http://blog.csdn.net/crazy1235/article/details/46733221 Android与Unity交互研究 unity与android交互的由来 ...

  2. Cordova - 与iOS原生代码交互2(使用Swift开发Cordova的自定义插件)

    在前一篇文章中我介绍了如何通过 js 与原生代码进行交互(Cordova - 与iOS原生代码交互1(通过JS调用Swift方法)),当时是直接对Cordova生成的iOS工程项目进行编辑操作的(添加 ...

  3. iOS与HTML5交互方法总结(转)

    今天小编在找技术文章的时候,发现这样一个标题:iOS与HTML5交互方法总结,怎么看着这么熟悉呢?   还以为是刚哥用了别的文章,点进去一看,原来是刚哥自己写的文章,他们转载的,而且还上了Dev St ...

  4. iOS与H5交互

    H5与App原生交互,一般会是前端页面中的JavaScript与App使用的原生开发语言的交互.技术方案应能达到以下要求: 在js与原生进行交互的时候能保证正常的正向调用逻辑返回,反向可以处理异步回调 ...

  5. iOS与H5交互遇到的坑

    之前的博客写过使用<JavaScriptCore/JavaScriptCore.h>库来实现与H5的交互,但是在项目中还是遇到了一些不得不踩的坑.在这里将我遇到的问题以及参考网上几位大神的 ...

  6. WebViewJavascriptBridge详细使用 iOS与H5交互的方案

    WebViewJavascriptBridge详细使用 源网址: https://www.cnblogs.com/jiang-xiao-yan/p/5345755.html    前言 WebView ...

  7. iOS与HTML5交互方法总结(修正)

    摘要 看了不少别人写的博客或者论坛,关于iOS与HTML5交互方法大概主要有5种方式: 1. 利用WKWebView进行交互(系统API) 2. 利用UIWebView进行交互(系统API) 3. 苹 ...

  8. cordova与ios native code交互的原理

    非常早曾经写了一篇博客,总结cordova插件怎么调用到原生代码:cordova调用过程,只是写得太水.基本没有提到原理.近期加深了一点理解,又一次补充说明一下 js调用native 以下是我们产品中 ...

  9. unity 和 iOS/Android 信息交互(方法调用)

    参考文章均来源于[大神雨松momo]的文章. unity -> iOS // unity 程序 usingSystem.Runtime.InteropServices; usingUnityEn ...

随机推荐

  1. java连接ssh执行shell脚本

    在liunx上写了一个shell脚本,想通过java去调用这个shell脚本,不知道怎么去调用,在网上说使用process这个进程方式,但是我执行机和我shell脚本都不在同一台电脑,老大说java中 ...

  2. Jenkins添加项目说明,增加项目描述

    背景:往往正常Jenkins上呈现的内容,太过简短,不易直观看了解项目是干嘛的,如下面的内容: 解决方案,使用插件,Extra Columns Plugin 安装成功后配置,需要结合自定义视图使用,新 ...

  3. vuejs给组件绑定原生事件

    给组件绑定事件,该事件是自定义的事件 <div id='root'> <child @click='handleClick'></child> </div&g ...

  4. set方法的使用

    <div id='root'> <div v-for='(item,key,index) of userInfo'> {{item}}--{{key}}--{{index}} ...

  5. 重写KVC

    #import "NSObject+WQKVC.h" #import <objc/runtime.h> /** KVC 首先调用的方法顺序: |- setter: se ...

  6. 软件架构中的SOA架构有哪些特点?

    面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来.构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互. SOA是一 ...

  7. SVN知识集合

    1. 如果某个项目之前保存了A仓库的信息,无法切换到B仓库(通过AnkhSVN或者VisualSVN),可以先在本地去除版本控制(用TortoiseSVN),然后导出B仓库信息(用TortoiseSV ...

  8. vscode-tfs插件报错:TF30063

    解决方案:删除tfs凭证,然后用vs重新登陆tfs服务器,此时会在电脑上创建要一个新的tfs凭证,然后再用vscode-tfs操作tfs就没有问题了.

  9. 第一个AngularJS表达式实例

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  10. 1.vue脚手架搭建项目

    前言: 在使用Vue-cli脚手架搭建项目之前,需要安装node.js和npm以及vue-cli. 开始搭建项目: 1.打开cmd win+R 2.转到要搭建的项目路径: g: cd Webapp/v ...