上面的步骤做完了,接下来就要写脚本了,这里我们就写一个让物体旋转的脚本就好了,测试而已,当你学会以后,复杂的同样也可以做到,不废话了,上代码,新建一个Move脚本(这里我用js脚本,用c#脚本也是一样用法,只是js和c#de函数命名方式不同):
varx = 0.0;
vary = 0.0;
varvrotate : Vector3;
functionMoveLeft()
{
varrotate : float = Time.deltaTime * 100;
vrotate = Vector3.up * rotate;
transform.Rotate(vrotate, Space.World);
}
functionMoveRight()
{
varrotate : float = Time.deltaTime * 100;
vrotate = Vector3.down* rotate;
transform.Rotate(vrotate, Space.World);
}
functionMoveUp(){
varrotate : float = Time.deltaTime * 100;
vrotate = Vector3.right* rotate;
transform.Rotate(vrotate, Space.World);
}
functionMoveDown(){
varrotate : float = Time.deltaTime * 100;
vrotate = Vector3.left* rotate;
transform.Rotate(vrotate, Space.World);
}
注意看这代码里面是不是没有写道任何UI,对没错我们只是在脚步里写了功能,因为接下来我们要在xcode里面写UI,好了当我们把代码写好了,就把刚刚我们写好的Move脚本拖拽到cube物体上,这样unity里面的操作就完成了,写下来我们部署到xcode里面(怎么部署xcode我就不写来这个太简单了),但部署的时候有点需要注意(因为选择它就不需要在真机上测试,在模拟器上测试也可以)如下图:
当然不选择它,它默认是Device SDK,它是需要在真机下才可以测试的。到此步骤unity里的所有步骤都操作完了,接下来我们就需要在xcode里面对项目进行重新小改造下。
现在我们打开我们刚刚部署出来的xcode项目,打开后工程目录如下:
在这里我们要重点关注下Classes这个文件件,因为我们要在这个文件里面改动一下脚本这样我们就可以现实我们所需要的功能了,好了,我们打开它(当然你们可以自己去看看里面的每个脚步这里我们就不解释来,我们简单粗暴点讲怎么实现功能),找到UnityAppController+Rendering.mm这个脚本,如图:
extern "C" int CreateContext_UnityCallback( UIWindow ** window, int * screenWidth, int * screenHeight, int * openglesVersion),如图: 找到这个方法有什么用呢?这里就是要放我们自己在xcode里面写的UI,这样我们才能使用ios的UI界面跟unity进行交互,这里的主要目的是用我们自己写的ViewController加载在unity的视图上,主要unity启动的时候就先调用我们自己写的视图了,既然我们知道我们自己写的视图是放在这个方法里调用的,我们就先把我们自己的视图写好。
ViewController,默认创建就好了,我这里创建的是LJViewController,你也可以用其他名称都可以,不影响程序,在我们自己写的视图里面我们玩写了是个按钮,分别是控制物体左旋转,右旋转,上旋转,下旋转,代码比较简单,就不解释了,看就明白了,代码如下:
- (void)viewDidLoad {
super viewDidLoad];
//创建label视图
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 40)];
//设置显示内容
text = @"程序员佳佳的字符串世界";
//设置背景颜色
backgroundColor = [UIColor grayColor];
//设置文字颜色
textColor = [UIColor whiteColor];
//设置显示位置居中
textAlignment = UITextAlignmentCenter;
//设置字体大小
font = [UIFont fontWithName:[[UIFont familyNames] objectAtIndex:10] size:20];
//创建按钮
UIButton *button0 = [UIButton buttonWithType:1];
//设置按钮范围
frame = CGRectMake(0, 40, 100, 30);
//设置按钮显示内容
setTitle:@"矩形左旋转" forState:UIControlStateNormal];
tintColor = [UIColor whiteColor];
//设置按钮改变后 绑定响应方法
addTarget:self action:@selector(LeftButtonPressed)forControlEvents:UIControlEventTouchUpInside];
//创建按钮
UIButton *button1 = [UIButton buttonWithType:1];
//设置按钮范围
frame = CGRectMake(0, 100, 100, 30);
//设置按钮显示内容
setTitle:@"矩形右旋转" forState:UIControlStateNormal];
tintColor = [UIColor whiteColor];
//设置按钮改变后 绑定响应方法
addTarget:self action:@selector(RightButtonPressed)forControlEvents:UIControlEventTouchUpInside];
//创建按钮
UIButton *button2 = [UIButton buttonWithType:1];
//设置按钮范围
frame = CGRectMake(0, 160, 100, 30);
//设置按钮显示内容
setTitle:@"矩形上旋转" forState:UIControlStateNormal];
tintColor = [UIColor whiteColor];
//设置按钮改变后 绑定响应方法
addTarget:self action:@selector(UpButtonPressed)forControlEvents:UIControlEventTouchUpInside];
//创建按钮
UIButton *button3 = [UIButton buttonWithType:1];
//设置按钮范围
frame = CGRectMake(0, 220, 100, 30);
//设置按钮显示内容
setTitle:@"矩形下旋转" forState:UIControlStateNormal];
tintColor = [UIColor whiteColor];
//设置按钮改变后 绑定响应方法
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,这里我们不需要传递,所以我们可以为空。
extern"C"intCreateContext_UnityCallback(UIWindow** window,int* screenWidth, int* screenHeight, int* openglesVersion)方法里添加如下代码:
LJViewController *ljView = [[LJViewController alloc]init];
[UnityGetGLViewController().view addSubview:ljView.view];
到这里我们的所有操作都已经完成了!哈哈。接下来就可以运行测试看看了。运行程序如下图: