今天和盆友们讨论IOS的高级界面与unity3d游戏引擎的交互,这个在开发中是非常重要的,unity3d 毕竟是一个面向多平台的一个游戏引擎,它不可能全部为IOS 考虑的面面俱到,引擎中也不存在针对IOS的高级界面的控件的使用。
本例实现游戏背景是Unity3D 的游戏世界,前面添加4个IOS的高级界面的按钮,并且点击这些按钮可以将消息传递给背景的Unity3D ,让它做一些事情。
上一章介绍了触摸IOS屏幕 移动摄像机的位置,下面有盆友问我说他不想移动摄像机的位置,就想移动物体的位置,我在这里补充一下,可以把脚本绑定在箱子上,参照物选择为主摄像机,这样子更新箱子的脚本就OK啦。今天例子,我就将脚本绑定在箱子上,如下图所示,把Move脚本绑定在这个 Cube中。
先把Move脚本的代码贴出来,这里面我写了4个方法分别处理这个箱子的旋转,这4个方法是由IOS上的代码向Unity发送消息后调用的,下面我会介绍具体操作的方法。
// Create a full-screen window _window = [[UIWindow alloc] initWithFrame:rect]; EAGLView* view = [[EAGLView alloc] initWithFrame:rect]; [_window addSubview:view]; MyView * myView = [[MyView alloc] init]; [_window addSubview:myView.view]; 贴出MyView的代码,写完发现忘释放内存了,呵呵,懒得改了,本章主要的介绍的不是这个哦。 // MyView.m // Unity-iPhone // // Created by 雨松MOMO on 11-11-1. // Copyright 2011 __MyCompanyName__. All rights reserved. // #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(0, 0, 320, 40)]; //设置显示内容 label.text = @"雨松MOMO的程序世界"; //设置背景颜色 label.backgroundColor = [UIColor blueColor]; //设置文字颜色 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 addTarget:self action:@selector(LeftButtonPressed) forControlEvents:UIControlEventTouchUpInside]; //创建按钮 UIButton *button1 = [UIButton buttonWithType:1]; //设置按钮范围 button1.frame = CGRectMake(0, 100, 100, 30); //设置按钮显示内容 [button1 setTitle:@"矩形右旋转" forState:UIControlStateNormal]; //设置按钮改变后 绑定响应方法 [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 addTarget:self action:@selector(UpButtonPressed) forControlEvents:UIControlEventTouchUpInside]; //创建按钮 UIButton *button3 = [UIButton buttonWithType:1]; //设置按钮范围 button3.frame = CGRectMake(0, 220, 100, 30); //设置按钮显示内容 [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]; }
到这里盆友们可以将这个Unity工程导出成Xcode项目,不会的盆友请看我之前的文章哈,Xcode项目导出成功后,我们先添加4个高级界面的按钮用来点击响应上面脚本的这4个旋转箱子的方法。
创建一个类继承UIViewController,用来添加我们的高级界面的视图,我暂且命名为MyView.
打开Unity3D导出的AppController.mm这个类,头文件处先导入我们的这个类 #import “MyView”找到下面这个方法,来添加viewint OpenEAGL_UnityCallback(UIWindow** window, int* screenWidth, int* screenHeight, int* openglesVersion)
EAGLView 是Unity3D 背景的那个View, 下面我们添加一个我们自己写的View 覆盖在它上面。
// Create a full-screen window _window = [[UIWindow alloc] initWithFrame:rect]; EAGLView* view = [[EAGLView alloc] initWithFrame:rect]; [_window addSubview:view]; MyView * myView = [[MyView alloc] init]; [_window addSubview:myView.view]; 贴出MyView的代码,写完发现忘释放内存了,呵呵,懒得改了,本章主要的介绍的不是这个哦。 // MyView.m // Unity-iPhone // // Created by 雨松MOMO on 11-11-1. // Copyright 2011 __MyCompanyName__. All rights reserved. // #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(0, 0, 320, 40)]; //设置显示内容 label.text = @"雨松MOMO的程序世界"; //设置背景颜色 label.backgroundColor = [UIColor blueColor]; //设置文字颜色 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 addTarget:self action:@selector(LeftButtonPressed) forControlEvents:UIControlEventTouchUpInside]; //创建按钮 UIButton *button1 = [UIButton buttonWithType:1]; //设置按钮范围 button1.frame = CGRectMake(0, 100, 100, 30); //设置按钮显示内容 [button1 setTitle:@"矩形右旋转" forState:UIControlStateNormal]; //设置按钮改变后 绑定响应方法 [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 addTarget:self action:@selector(UpButtonPressed) forControlEvents:UIControlEventTouchUpInside]; //创建按钮 UIButton *button3 = [UIButton buttonWithType:1]; //设置按钮范围 button3.frame = CGRectMake(0, 220, 100, 30); //设置按钮显示内容 [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
这里我主要说一下下面这个方法,它是Unity底层帮我们写好的一个方法,意思iPhone向向Unity发送消息,
参数1:场景中的模型名称,Cube就是我们定义的一个箱子。
参数2:脚本方法名称MoveLeft就是上面脚本中的方法,
参数3:为一个char *类型的 可以向Unity中传递数据。
文章出自:http://www.unitymanual.com/thread-20376-1-1.html
Unity3D 研究院之IOS高级界面发送消息与Unity3D消息的接收