Unity3D 研究院之IOS高级界面发送消息与Unity3D消息的接收(九)
雨松MOMO 【Unity3D研究院之游戏开发】 围观14215次 74条评论 编辑日期:2013-02-25 字体:大 中 小
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
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
)
;
}
|
打开Unity3D导出的AppController.mm这个类,头文件处先导入我们的这个类 #import “MyView”找到下面这个方法,来添加viewint OpenEAGL_UnityCallback(UIWindow** window, int* screenWidth, int* screenHeight, int* openglesVersion)
EAGLView 是Unity3D 背景的那个View, 下面我们添加一个我们自己写的View 覆盖在它上面。
1
2
3
4
5
6
7
|
// 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的代码,写完发现忘释放内存了,呵呵,懒得改了,本章主要的介绍的不是这个哦。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
//
// 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中传递数据。
UnitySendMessage(“Cube”,”MoveLeft”,””);
我们可以向Unity3D中任意模型发送消息调用它绑定的脚本中的方法,当前前提是模型名称、方法名称、 参数都填写正确。
这里4个按钮都是以这种方式传递消息,下面是iPhone 真机的效果图,我们触摸点击4个高级界面的按钮可以实现Unity3D世界中的模型旋转, 所以大家一定要切记这个方法,很重要噢,哇咔咔~
1
2
3
|
MyViewController
*
myView
=
[
[
MyViewController
alloc
]
init
]
;
[
sGLViewController
.
view
addSubview
:
myView
.
view
]
;
|
MyViewController是我们新定义的,
也就是说把我们的写的视图添加至
sGLViewController当中,这样就完事OK啦。 Unity每次升级都会小改动一下,所以我们也需要小改动一下,哈哈!
2013年2月25日补充
在Unity4中 把之前的sGLViewController 替代成了 UnityGetGLViewController() 那么在Unity4中简单的修改一下上面的代码即可。
1
2
3
|
MyViewController
*
myView
=
[
[
MyViewController
alloc
]
init
]
;
[
UnityGetGLViewController
(
)
.
view
addSubview
:
myView
.
view
]
;
|