Unity与ios交互

主要学习unity与ios进行交互,unity写功能,ios写界面。软件环境 Mac 10.10 ,unity 4.6.2, xcode 6.4,测试没有问题!
今天我们要实现的功能是,通过ios界面来控制unity里面所实现的功能,首先创建unity工程,创建一个cube物体,并且给物体一个灯光,如图: Unity与ios交互
上面的步骤做完了,接下来就要写脚本了,这里我们就写一个让物体旋转的脚本就好了,测试而已,当你学会以后,复杂的同样也可以做到,不废话了,上代码,新建一个Move脚本(这里我用js脚本,用c#脚本也是一样用法,只是js和c#de函数命名方式不同):
var 0.0;
var 0.0;

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);  
}
注意看这代码里面是不是没有写道任何UI,对没错我们只是在脚步里写了功能,因为接下来我们要在xcode里面写UI,好了当我们把代码写好了,就把刚刚我们写好的Move脚本拖拽到cube物体上,这样unity里面的操作就完成了,写下来我们部署到xcode里面(怎么部署xcode我就不写来这个太简单了),但部署的时候有点需要注意(因为选择它就不需要在真机上测试,在模拟器上测试也可以)如下图: Unity与ios交互
当然不选择它,它默认是Device SDK,它是需要在真机下才可以测试的。到此步骤unity里的所有步骤都操作完了,接下来我们就需要在xcode里面对项目进行重新小改造下。
现在我们打开我们刚刚部署出来的xcode项目,打开后工程目录如下: Unity与ios交互
在这里我们要重点关注下Classes这个文件件,因为我们要在这个文件里面改动一下脚本这样我们就可以现实我们所需要的功能了,好了,我们打开它(当然你们可以自己去看看里面的每个脚步这里我们就不解释来,我们简单粗暴点讲怎么实现功能),找到UnityAppController+Rendering.mm这个脚本,如图: Unity与ios交互
我们打开这个脚本,找到这个方法: extern  "C"  int  CreateContext_UnityCallback( UIWindow ** window,  int * screenWidth,  int * screenHeight,   int * openglesVersion),如图: Unity与ios交互找到这个方法有什么用呢?这里就是要放我们自己在xcode里面写的UI,这样我们才能使用ios的UI界面跟unity进行交互,这里的主要目的是用我们自己写的ViewController加载在unity的视图上,主要unity启动的时候就先调用我们自己写的视图了,既然我们知道我们自己写的视图是放在这个方法里调用的,我们就先把我们自己的视图写好。
接下来我们在 Classes文件里面创建一个我们用来存放自己写的代码的组,并且我们要新建一个 ViewController,默认创建就好了,我这里创建的是LJViewController,你也可以用其他名称都可以,不影响程序,在我们自己写的视图里面我们玩写了是个按钮,分别是控制物体左旋转,右旋转,上旋转,下旋转,代码比较简单,就不解释了,看就明白了,代码如下:

- (void)viewDidLoad {

    [super viewDidLoad];

    //创建label视图

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 40)];

    //设置显示内容

    label.text = @"程序员佳佳的字符串世界";

    //设置背景颜色

    label.backgroundColor = [UIColor grayColor];

    //设置文字颜色

    label.textColor = [UIColor whiteColor];

    //设置显示位置居中

    label.textAlignment = UITextAlignmentCenter;

    //设置字体大小

    label.font = [UIFont fontWithName:[[UIFont familyNames] objectAtIndex:10] size:20];

    

    //创建按钮

    UIButton *button0 = [UIButton buttonWithType:1];

    //设置按钮范围

    button0.frame = CGRectMake(0, 40, 100, 30);

    //设置按钮显示内容

    [button0 setTitle:@"矩形左旋转" forState:UIControlStateNormal];

    button0.tintColor = [UIColor whiteColor];

    //设置按钮改变后 绑定响应方法

    [button0 addTarget:self action:@selector(LeftButtonPressed)forControlEvents:UIControlEventTouchUpInside];

    

    //创建按钮

    UIButton *button1 = [UIButton buttonWithType:1];

    //设置按钮范围

    button1.frame = CGRectMake(0, 100, 100, 30);

    //设置按钮显示内容

    [button1 setTitle:@"矩形右旋转" forState:UIControlStateNormal];

    button1.tintColor = [UIColor whiteColor];

    //设置按钮改变后 绑定响应方法

    [button1 addTarget:self action:@selector(RightButtonPressed)forControlEvents:UIControlEventTouchUpInside];

    

    //创建按钮

    UIButton *button2 = [UIButton buttonWithType:1];

    //设置按钮范围

    button2.frame = CGRectMake(0, 160, 100, 30);

    //设置按钮显示内容

    [button2 setTitle:@"矩形上旋转" forState:UIControlStateNormal];

    button2.tintColor = [UIColor whiteColor];

    //设置按钮改变后 绑定响应方法

    [button2 addTarget:self action:@selector(UpButtonPressed)forControlEvents:UIControlEventTouchUpInside];

    

    //创建按钮

    UIButton *button3 = [UIButton buttonWithType:1];

    //设置按钮范围

    button3.frame = CGRectMake(0, 220, 100, 30);

    //设置按钮显示内容

    [button3 setTitle:@"矩形下旋转" forState:UIControlStateNormal];

    button3.tintColor = [UIColor whiteColor];

    //设置按钮改变后 绑定响应方法

    [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 {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

这里要注意的是“UnitySendMessage("Cube","MoveDown","");”这段代码,这段代码是最关键的,因为需要它来传递信息,unity才知道发生什么事了,这个方法是固定的,里面的第一个参数是脚本所在的物体,第二个参数是指调用的函数,第三个参数是传递信息到unity,这里我们不需要传递,所以我们可以为空。

接下来我们就需要unity去启动我们自己写的这个视图了,在 extern "C" int CreateContext_UnityCallback(UIWindow** window,int* screenWidth, int* screenHeight,  int* openglesVersion)方法里添加如下代码:

    LJViewController *ljView = [[LJViewController alloc]init];

 

    [UnityGetGLViewController().view addSubview:ljView.view];

如图:Unity与ios交互

到这里我们的所有操作都已经完成了!哈哈。接下来就可以运行测试看看了。运行程序如下图: Unity与ios交互

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值