最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

unity3d游戏开发之高级界面发送消息与消息的接收

来源:动视网 责编:小OO 时间:2025-10-01 10:35:04
文档

unity3d游戏开发之高级界面发送消息与消息的接收

今天和盆友们讨论IOS的高级界面与unity3D游戏引擎的交互,这个在开发中是非常重要的,unity3d 毕竟是一个面向多平台的一个游戏引擎,它不可能全部为IOS考虑的面面俱到,引擎中也不存在针对IOS的高级界面的控件的使用。  出自狗这篇文章来自狗刨学习网          本例实现游戏背景是Unity3D的游戏世界,前面添加4个IOS的高级界面的按钮,并且点击这些按钮可以将消息传递给背景的Unity3D,让它做一些事情。    上一章介绍了触摸IOS屏幕移动摄像机的位置,下面有盆友问我说他
推荐度:
导读今天和盆友们讨论IOS的高级界面与unity3D游戏引擎的交互,这个在开发中是非常重要的,unity3d 毕竟是一个面向多平台的一个游戏引擎,它不可能全部为IOS考虑的面面俱到,引擎中也不存在针对IOS的高级界面的控件的使用。  出自狗这篇文章来自狗刨学习网          本例实现游戏背景是Unity3D的游戏世界,前面添加4个IOS的高级界面的按钮,并且点击这些按钮可以将消息传递给背景的Unity3D,让它做一些事情。    上一章介绍了触摸IOS屏幕移动摄像机的位置,下面有盆友问我说他
今天和盆友们讨论IOS的高级界面与unity3D游戏引擎的交互,这个在开发中是非常重要的,unity3d 毕竟是一个面向多平台的一个游戏引擎,它不可能全部为IOS 考虑的面面俱到,引擎中也不存在针对IOS的高级界面的控件的使用。   出自狗这篇文章来自狗刨学习网

                本例实现游戏背景是Unity3D 的游戏世界,前面添加4个IOS的高级界面的按钮,并且点击这些按钮可以将消息传递给背景的Unity3D ,让它做一些事情。

       上一章介绍了触摸IOS屏幕 移动摄像机的位置,下面有盆友问我说他不想移动摄像机的位置,就想移动物体的位置,我在这里补充一下,可以把脚本绑定在箱子上,参照物选择为主摄像机,这样子更新箱子的脚本就OK啦。今天例子,我就将脚本绑定在箱子上,如下图所示,把Move脚本绑定在这个 Cube中。

                                

       先把Move脚本的代码贴出来,这里面我写了4个方法分别处理这个箱子的旋转,这4个方法是由IOS上的代码向Unity发送消息后调用的,下面我会介绍具体操作的方法。

1.var vrotate : Vector3;

2.  

3.//向左旋转

4.function MoveLeft()

5.{

6.    var rotate : float = Time.deltaTime * 100;

7.    vrotate = Vector3.up * rotate;

8.    transform.Rotate(vrotate, Space.World);

9.}

10.  

11.//向右旋转

12.function MoveRight()

13.{

14.    var rotate : float = Time.deltaTime * 100;

15.    vrotate = Vector3.down* rotate;

16.    transform.Rotate(vrotate, Space.World);

17.}

18.  

19.//向上旋转

20.function MoveUp(){

21.     var rotate : float = Time.deltaTime * 100;

22.    vrotate = Vector3.right* rotate;

23.    transform.Rotate(vrotate, Space.World);

24.}

25.  

26.//向下旋转

27.function MoveDown(){

28.    var rotate : float = Time.deltaTime * 100;

29.    vrotate = Vector3.left* rotate;

30.    transform.Rotate(vrotate, Space.World);

31.}

复制代码

       到这里盆友们可以将这个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 覆盖在它上面。

1.// Create a full-screen window

2.    _window = [[UIWindow alloc] initWithFrame:rect];

3.    EAGLView* view = [[EAGLView alloc] initWithFrame:rect];

4.    [_window addSubview:view];

5.  

6.    MyView * myView =  [[MyView alloc] init];

7.    [_window addSubview:myView.view];

8.贴出MyView的代码,写完发现忘释放内存了,呵呵,懒得改了,本章主要的介绍的不是这个哦。

9.

10.  

11.//  MyView.m

12.//  Unity-iPhone

13.//

14.//  Created by 雨松MOMO on 11-11-1.

15.//  Copyright 2011 __MyCompanyName__. All rights reserved.

16.//

17.  

18.#import "MyView.h"

19.  

20.@implementation MyView

21.  

22.// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.

23.- (void)viewDidLoad {

24.    [super viewDidLoad];

25.    //创建label视图

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

27.    //设置显示内容

28.    label.text = @"雨松MOMO的程序世界";

29.    //设置背景颜色

30.    label.backgroundColor = [UIColor blueColor];

31.    //设置文字颜色

32.    label.textColor = [UIColor whiteColor];

33.    //设置显示位置居中

34.    label.textAlignment = UITextAlignmentCenter;

35.    //设置字体大小

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

37.  

38.    //创建按钮

39.    UIButton *button0 = [UIButton buttonWithType:1];

40.    //设置按钮范围

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

42.    //设置按钮显示内容

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

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

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

46.  

47.    //创建按钮

48.    UIButton *button1 = [UIButton buttonWithType:1];

49.    //设置按钮范围

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

51.    //设置按钮显示内容

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

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

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

55.  

56.    //创建按钮

57.    UIButton *button2 = [UIButton buttonWithType:1];

58.    //设置按钮范围

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

60.    //设置按钮显示内容

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

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

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

.  

65.    //创建按钮

66.    UIButton *button3 = [UIButton buttonWithType:1];

67.    //设置按钮范围

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

69.    //设置按钮显示内容

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

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

72.    [button3 addTarget:self action:@selector(DownButtonPressed) forControlEvents:UIControlEventTouchUpInside];  

73.  

74.    //向view添加

75.    [self.view addSubview:label];

76.    [self.view addSubview:button0];

77.    [self.view addSubview:button1];

78.    [self.view addSubview:button2];

79.    [self.view addSubview:button3];

80.}

81.  

82.//向左按钮

83.-(void)LeftButtonPressed{

84.    UnitySendMessage("Cube

85.}

86.  

87.//向右按钮

88.-(void)RightButtonPressed{

.    UnitySendMessage("Cube

90.}

91.//向上按钮

92.-(void)UpButtonPressed{

93.    UnitySendMessage("Cube

94.}

95.  

96.//向下按钮

97.-(void)DownButtonPressed{

98.    UnitySendMessage("Cube

99.}

100.  

101.- (void)didReceiveMemoryWarning {

102.    // Releases the view if it doesn't have a superview.

103.    [super didReceiveMemoryWarning];

104.  

105.    // Release any cached data, images, etc. that aren't in use.

106.}

107.  

108.- (void)viewDidUnload {

109.    [super viewDidUnload];

110.}

111.  

112.- (void)dealloc {

113.    [super dealloc];

114.}

复制代码

       @end

       这里我主要说一下下面这个方法,它是Unity底层帮我们写好的一个方法,意思iPhone向向Unity发送消息,

       参数1:场景中的模型名称,Cube就是我们定义的一个箱子。

       参数2:脚本方法名称MoveLeft就是上面脚本中的方法,

       参数3:为一个char *类型的 可以向Unity中传递数据。

1.UnitySendMessage(“Cube”,”MoveLeft”,””);

复制代码

       我们可以向Unity3D中任意模型发送消息调用它绑定的脚本中的方法,当前前提是模型名称、方法名称、 参数都填写正确。

       这里4个按钮都是以这种方式传递消息,下面是iPhone 真机的效果图,我们触摸点击4个高级界面的按钮可以实现Unity3D世界中的模型旋转,  所以大家一定要切记这个方法,很重要噢,哇咔咔~

                                

       最后欢迎各位盆友可以和MOMO一起讨论unity3d游戏开发,哇咔咔~~~ 附上Unity3D工程的下载地址,Xcode项目我就不上传了,不早了,大家晚安,哇咔咔~

       补充: 由于Unity3.5在渲染3D的时候添加了 sGLViewController,所以按照以前的方法添加的视图是无法接收旋转事件的。对应3.5的版本大家需要修改一下代码。

       还是在 OpenEAGL_UnityCallback方法中,在此方法的末尾添加代码:

1.MyViewController * myView =  [[MyViewController alloc] init];

2.  

3.[sGLViewController.view addSubview:myView.view];

复制代码

       MyViewController是我们新定义的,

       也就是说把我们的写的视图添加至 

       sGLViewController当中,这样就完事OK啦。  Unity每次升级都会小改动一下,所以我们也需要小改动一下,哈哈!

文档

unity3d游戏开发之高级界面发送消息与消息的接收

今天和盆友们讨论IOS的高级界面与unity3D游戏引擎的交互,这个在开发中是非常重要的,unity3d 毕竟是一个面向多平台的一个游戏引擎,它不可能全部为IOS考虑的面面俱到,引擎中也不存在针对IOS的高级界面的控件的使用。  出自狗这篇文章来自狗刨学习网          本例实现游戏背景是Unity3D的游戏世界,前面添加4个IOS的高级界面的按钮,并且点击这些按钮可以将消息传递给背景的Unity3D,让它做一些事情。    上一章介绍了触摸IOS屏幕移动摄像机的位置,下面有盆友问我说他
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top