1
00:00:00,000 --> 00:00:04,000
游戏对象的访问主要是指在脚本中
2
00:00:04,000 --> 00:00:09,000
对自身组件以及成员变量等的访问
3
00:00:09,000 --> 00:00:13,000
在上一节中我们介绍过
4
00:00:13,000 --> 00:00:19,000
在脚本中我们可以直接引用物体的组件
5
00:00:19,000 --> 00:00:31,000
例如我们可以使用transform来直接引用物体中的Transform组件
6
00:00:31,000 --> 00:00:37,000
使用rigidbody来引用物体中的刚体组件
7
00:00:37,000 --> 00:00:46,000
但此处有必要了解的是
8
00:00:46,000 --> 00:00:51,000
unity是以面向对象的方式进行编写的
9
00:00:51,000 --> 00:00:59,000
也就是其中包含了类、类的定义以及类的继承等等面向对象的用法
10
00:00:59,000 --> 00:01:03,000
当我们在游戏物体中添加组件时
11
00:01:03,000 --> 00:01:11,000
就是把指定类型的类变成游戏物体的成员变量
12
00:01:11,000 --> 00:01:21,000
此时我们就可以直接使用成员变量的名称来访问相应的组件
13
00:01:21,000 --> 00:01:28,000
这些可以直接作为成员变量来访问的类或组件有
14
00:01:28,000 --> 00:01:33,000
transform,rigidbody,camera
15
00:01:33,000 --> 00:01:36,000
light,animation等等
16
00:01:36,000 --> 00:01:39,000
在脚本中使用时
17
00:01:39,000 --> 00:01:41,000
我们可以直接把它们访问为
18
00:01:41,000 --> 00:01:47,000
例如Transform组件我们可以直接访问为transform
19
00:01:47,000 --> 00:01:52,000
刚体组件我们可以直接使用rigidbody
20
00:01:52,000 --> 00:01:54,000
等等进行访问
21
00:01:54,000 --> 00:01:59,000
就如我们在脚本中使用的那样
22
00:01:59,000 --> 00:02:06,000
此处的transform
23
00:02:06,000 --> 00:02:09,000
由于是GameObject物体的成员变量
24
00:02:09,000 --> 00:02:23,000
此处的transform也可以写成gameObject.transform
25
00:02:23,000 --> 00:02:29,000
此时我们保存脚本回到unity中
26
00:02:29,000 --> 00:02:31,000
播放游戏场景
27
00:02:31,000 --> 00:02:38,000
可以看到在控制视窗中并没有显示任何错误
28
00:02:38,000 --> 00:02:42,000
在编译器编译时
29
00:02:42,000 --> 00:02:50,000
它也会暗含地认为此transform就是gameObject的成员变量
30
00:02:50,000 --> 00:02:59,000
因此此处的gameObject.transform与直接使用transform的效果是相同的
31
00:02:59,000 --> 00:03:07,000
同样的对于rigidbody来说也是一样的
32
00:03:07,000 --> 00:03:09,000
另外在脚本编写时
33
00:03:09,000 --> 00:03:13,000
我们可以使用this关键字
34
00:03:13,000 --> 00:03:28,000
来引用(代表)当前正在编写的脚本
35
00:03:28,000 --> 00:03:34,000
例如当前正在编写的NewBehaviourScript脚本
36
00:03:34,000 --> 00:03:38,000
this关键字就代表此脚本
37
00:03:38,000 --> 00:03:47,000
而this.gameObject则是此脚本所连接的游戏物体
38
00:03:47,000 --> 00:04:01,000
例如此transform语句我们也可以写成this.gameObject.transform
39
00:04:01,000 --> 00:04:13,000
然后我们保存脚本
40
00:04:13,000 --> 00:04:16,000
播放场景
41
00:04:16,000 --> 00:04:20,000
可以看到我们的场景仍然可以正常运行
42
00:04:20,000 --> 00:04:27,000
也就是说this.gameObject代表的就是
43
00:04:27,000 --> 00:04:29,000
此脚本所连接的cube物体
44
00:04:29,000 --> 00:04:34,000
更进一步地 对于此transform语句
45
00:04:34,000 --> 00:04:41,000
我们还可以去掉gameObject而写成this.transform
46
00:04:41,000 --> 00:04:47,000
则场景仍然可以正常地运行
47
00:04:47,000 --> 00:04:55,000
在具体使用时可以根据个人喜好来选择书写方式
48
00:04:55,000 --> 00:05:02,000
但一般地为了方便起见 一般直接写成transform 也就是成员变量的方式
49
00:05:02,000 --> 00:05:06,000
在前面的列表中
50
00:05:06,000 --> 00:05:13,000
可以看到 对于游戏物体的一些组件
51
00:05:13,000 --> 00:05:19,000
可以通过使用成员变量的方式直接访问
52
00:05:19,000 --> 00:05:24,000
但是对于一些自定义的变量
53
00:05:24,000 --> 00:05:27,000
对于一些自定义的组件
54
00:05:27,000 --> 00:05:29,000
例如脚本组件
55
00:05:29,000 --> 00:05:33,000
则不能通过成员变量的方式进行直接访问
56
00:05:33,000 --> 00:05:37,000
此时我们需要在脚本中定义变量
57
00:05:37,000 --> 00:05:43,000
并使用获取组件语句来对它们进行引用
58
00:05:43,000 --> 00:05:53,000
例如当前cube物体中使用了一个NewBehaviourScript
59
00:05:53,000 --> 00:05:56,000
也就是我们当前正在编写的脚本
60
00:05:56,000 --> 00:06:01,000
我们可以为cube物体添加另一个脚本
61
00:06:01,000 --> 00:06:11,000
脚本的名称我们可以重新命名为ScriptB
62
00:06:11,000 --> 00:06:13,000
也就是B脚本
63
00:06:13,000 --> 00:06:19,000
拖动ScriptB脚本到Cube物体中
64
00:06:19,000 --> 00:06:27,000
可以看到此脚本已经显示在立方体物体的属性编辑器中
65
00:06:27,000 --> 00:06:36,000
此时我们想在NewBehaviourScript脚本中引用ScriptB脚本
66
00:06:36,000 --> 00:06:38,000
也就是引用B脚本时
67
00:06:38,000 --> 00:06:43,000
我们需要在NewBehaviourScript脚本中创建一个新的变量
68
00:06:43,000 --> 00:06:49,000
并使用获取组件语句来对其进行引用
69
00:06:49,000 --> 00:07:05,000
首先在B脚本中定义一个公共变量 public var wide = 5.0;
70
00:07:05,000 --> 00:07:10,000
然后在NewBehaviourScript脚本中定义一个变量
71
00:07:10,000 --> 00:07:21,000
其类型为ScriptB 也就是B脚本类型
72
00:07:21,000 --> 00:07:29,000
在Start函数中可以使用获取组件语句
73
00:07:29,000 --> 00:07:33,000
来为定义的变量赋值
74
00:07:33,000 --> 00:07:41,000
other = GetComponent
75
00:07:41,000 --> 00:07:48,000
注意此处的获取组件语句也可以写成
76
00:07:48,000 --> 00:07:52,000
gameObject.GetComponent
77
00:07:52,000 --> 00:07:57,000
此处为了方便我们仍然使用GetComponent语句
78
00:07:57,000 --> 00:08:05,000
获取的类型为ScriptB 也就是B脚本的类型
79
00:08:05,000 --> 00:08:28,000
接着使用Debug语句来显示B脚本中的wide变量
80
00:08:28,000 --> 00:08:40,000
在使用时可以直接写other.wide
81
00:08:40,000 --> 00:08:47,000
为了清楚起见 我们把Update中的Debug语句注释掉
82
00:08:47,000 --> 00:08:54,000
保存脚本然后切换到unity中
83
00:08:54,000 --> 00:09:07,000
可以看到 B脚本中的wide变量值显示在控制窗口中
84
00:09:07,000 --> 00:09:12,000
也就是我们在NewBehaviourScript脚本中
85
00:09:12,000 --> 00:09:20,000
访问了B脚本并把B脚本中的wide变量值输出到控制视窗中
86
00:09:20,000 --> 00:09:24,000
在程序运行时我们也可以看到
87
00:09:24,000 --> 00:09:35,000
在NewBehaviourScript的属性编辑器中 other变量的赋值是Cube物体的ScriptB脚本
88
00:09:35,000 --> 00:09:37,000
也就是此处的ScriptB脚本
89
00:09:37,000 --> 00:09:44,000
这说明在NewBehaviourScript脚本中成功地访问了ScriptB脚本
90
00:09:44,000 --> 00:09:52,000
但在控制视窗中unity还弹出了一条警告信息
91
00:09:52,000 --> 00:10:02,000
在运行时unity将Component类型向下转换为ScriptB类型
92
00:10:02,000 --> 00:10:09,000
此时可以双击此警告信息 然后在脚本编辑器中
93
00:10:09,000 --> 00:10:13,000
可以看到已经自动定位到出现警告的语句
94
00:10:13,000 --> 00:10:19,000
这是因为语句没有明确地指定组件的类型
95
00:10:19,000 --> 00:10:26,000
此时可以去掉组件名称的双引号
96
00:10:26,000 --> 00:10:36,000
然后保存并重新运行 可以看到警告消失了
97
00:10:36,000 --> 00:10:45,000
或者也可以使用unity提供的另一种方法 也就是泛型函数
98
00:10:45,000 --> 00:10:51,000
在语句执行时明确地指定物体的类型
99
00:10:51,000 --> 00:10:59,000
回到脚本编辑器中 我们可以使用获取组件语句的泛型格式
100
00:10:59,000 --> 00:11:19,000
此时可以将语句写为 GetComponent.<ScriptB>();
101
00:11:19,000 --> 00:11:25,000
此种写法称为语句的泛型写法
102
00:11:25,000 --> 00:11:30,000
保存脚本回到unity中
103
00:11:30,000 --> 00:11:39,000
可以看到我们的场景也会正常执行
104
00:11:39,000 --> 00:11:46,000
在本节中我们介绍了物体的访问
105
00:11:46,000 --> 00:11:50,000
在下一节中我们介绍物体的操纵
00:00:00,000 --> 00:00:04,000
游戏对象的访问主要是指在脚本中
2
00:00:04,000 --> 00:00:09,000
对自身组件以及成员变量等的访问
3
00:00:09,000 --> 00:00:13,000
在上一节中我们介绍过
4
00:00:13,000 --> 00:00:19,000
在脚本中我们可以直接引用物体的组件
5
00:00:19,000 --> 00:00:31,000
例如我们可以使用transform来直接引用物体中的Transform组件
6
00:00:31,000 --> 00:00:37,000
使用rigidbody来引用物体中的刚体组件
7
00:00:37,000 --> 00:00:46,000
但此处有必要了解的是
8
00:00:46,000 --> 00:00:51,000
unity是以面向对象的方式进行编写的
9
00:00:51,000 --> 00:00:59,000
也就是其中包含了类、类的定义以及类的继承等等面向对象的用法
10
00:00:59,000 --> 00:01:03,000
当我们在游戏物体中添加组件时
11
00:01:03,000 --> 00:01:11,000
就是把指定类型的类变成游戏物体的成员变量
12
00:01:11,000 --> 00:01:21,000
此时我们就可以直接使用成员变量的名称来访问相应的组件
13
00:01:21,000 --> 00:01:28,000
这些可以直接作为成员变量来访问的类或组件有
14
00:01:28,000 --> 00:01:33,000
transform,rigidbody,camera
15
00:01:33,000 --> 00:01:36,000
light,animation等等
16
00:01:36,000 --> 00:01:39,000
在脚本中使用时
17
00:01:39,000 --> 00:01:41,000
我们可以直接把它们访问为
18
00:01:41,000 --> 00:01:47,000
例如Transform组件我们可以直接访问为transform
19
00:01:47,000 --> 00:01:52,000
刚体组件我们可以直接使用rigidbody
20
00:01:52,000 --> 00:01:54,000
等等进行访问
21
00:01:54,000 --> 00:01:59,000
就如我们在脚本中使用的那样
22
00:01:59,000 --> 00:02:06,000
此处的transform
23
00:02:06,000 --> 00:02:09,000
由于是GameObject物体的成员变量
24
00:02:09,000 --> 00:02:23,000
此处的transform也可以写成gameObject.transform
25
00:02:23,000 --> 00:02:29,000
此时我们保存脚本回到unity中
26
00:02:29,000 --> 00:02:31,000
播放游戏场景
27
00:02:31,000 --> 00:02:38,000
可以看到在控制视窗中并没有显示任何错误
28
00:02:38,000 --> 00:02:42,000
在编译器编译时
29
00:02:42,000 --> 00:02:50,000
它也会暗含地认为此transform就是gameObject的成员变量
30
00:02:50,000 --> 00:02:59,000
因此此处的gameObject.transform与直接使用transform的效果是相同的
31
00:02:59,000 --> 00:03:07,000
同样的对于rigidbody来说也是一样的
32
00:03:07,000 --> 00:03:09,000
另外在脚本编写时
33
00:03:09,000 --> 00:03:13,000
我们可以使用this关键字
34
00:03:13,000 --> 00:03:28,000
来引用(代表)当前正在编写的脚本
35
00:03:28,000 --> 00:03:34,000
例如当前正在编写的NewBehaviourScript脚本
36
00:03:34,000 --> 00:03:38,000
this关键字就代表此脚本
37
00:03:38,000 --> 00:03:47,000
而this.gameObject则是此脚本所连接的游戏物体
38
00:03:47,000 --> 00:04:01,000
例如此transform语句我们也可以写成this.gameObject.transform
39
00:04:01,000 --> 00:04:13,000
然后我们保存脚本
40
00:04:13,000 --> 00:04:16,000
播放场景
41
00:04:16,000 --> 00:04:20,000
可以看到我们的场景仍然可以正常运行
42
00:04:20,000 --> 00:04:27,000
也就是说this.gameObject代表的就是
43
00:04:27,000 --> 00:04:29,000
此脚本所连接的cube物体
44
00:04:29,000 --> 00:04:34,000
更进一步地 对于此transform语句
45
00:04:34,000 --> 00:04:41,000
我们还可以去掉gameObject而写成this.transform
46
00:04:41,000 --> 00:04:47,000
则场景仍然可以正常地运行
47
00:04:47,000 --> 00:04:55,000
在具体使用时可以根据个人喜好来选择书写方式
48
00:04:55,000 --> 00:05:02,000
但一般地为了方便起见 一般直接写成transform 也就是成员变量的方式
49
00:05:02,000 --> 00:05:06,000
在前面的列表中
50
00:05:06,000 --> 00:05:13,000
可以看到 对于游戏物体的一些组件
51
00:05:13,000 --> 00:05:19,000
可以通过使用成员变量的方式直接访问
52
00:05:19,000 --> 00:05:24,000
但是对于一些自定义的变量
53
00:05:24,000 --> 00:05:27,000
对于一些自定义的组件
54
00:05:27,000 --> 00:05:29,000
例如脚本组件
55
00:05:29,000 --> 00:05:33,000
则不能通过成员变量的方式进行直接访问
56
00:05:33,000 --> 00:05:37,000
此时我们需要在脚本中定义变量
57
00:05:37,000 --> 00:05:43,000
并使用获取组件语句来对它们进行引用
58
00:05:43,000 --> 00:05:53,000
例如当前cube物体中使用了一个NewBehaviourScript
59
00:05:53,000 --> 00:05:56,000
也就是我们当前正在编写的脚本
60
00:05:56,000 --> 00:06:01,000
我们可以为cube物体添加另一个脚本
61
00:06:01,000 --> 00:06:11,000
脚本的名称我们可以重新命名为ScriptB
62
00:06:11,000 --> 00:06:13,000
也就是B脚本
63
00:06:13,000 --> 00:06:19,000
拖动ScriptB脚本到Cube物体中
64
00:06:19,000 --> 00:06:27,000
可以看到此脚本已经显示在立方体物体的属性编辑器中
65
00:06:27,000 --> 00:06:36,000
此时我们想在NewBehaviourScript脚本中引用ScriptB脚本
66
00:06:36,000 --> 00:06:38,000
也就是引用B脚本时
67
00:06:38,000 --> 00:06:43,000
我们需要在NewBehaviourScript脚本中创建一个新的变量
68
00:06:43,000 --> 00:06:49,000
并使用获取组件语句来对其进行引用
69
00:06:49,000 --> 00:07:05,000
首先在B脚本中定义一个公共变量 public var wide = 5.0;
70
00:07:05,000 --> 00:07:10,000
然后在NewBehaviourScript脚本中定义一个变量
71
00:07:10,000 --> 00:07:21,000
其类型为ScriptB 也就是B脚本类型
72
00:07:21,000 --> 00:07:29,000
在Start函数中可以使用获取组件语句
73
00:07:29,000 --> 00:07:33,000
来为定义的变量赋值
74
00:07:33,000 --> 00:07:41,000
other = GetComponent
75
00:07:41,000 --> 00:07:48,000
注意此处的获取组件语句也可以写成
76
00:07:48,000 --> 00:07:52,000
gameObject.GetComponent
77
00:07:52,000 --> 00:07:57,000
此处为了方便我们仍然使用GetComponent语句
78
00:07:57,000 --> 00:08:05,000
获取的类型为ScriptB 也就是B脚本的类型
79
00:08:05,000 --> 00:08:28,000
接着使用Debug语句来显示B脚本中的wide变量
80
00:08:28,000 --> 00:08:40,000
在使用时可以直接写other.wide
81
00:08:40,000 --> 00:08:47,000
为了清楚起见 我们把Update中的Debug语句注释掉
82
00:08:47,000 --> 00:08:54,000
保存脚本然后切换到unity中
83
00:08:54,000 --> 00:09:07,000
可以看到 B脚本中的wide变量值显示在控制窗口中
84
00:09:07,000 --> 00:09:12,000
也就是我们在NewBehaviourScript脚本中
85
00:09:12,000 --> 00:09:20,000
访问了B脚本并把B脚本中的wide变量值输出到控制视窗中
86
00:09:20,000 --> 00:09:24,000
在程序运行时我们也可以看到
87
00:09:24,000 --> 00:09:35,000
在NewBehaviourScript的属性编辑器中 other变量的赋值是Cube物体的ScriptB脚本
88
00:09:35,000 --> 00:09:37,000
也就是此处的ScriptB脚本
89
00:09:37,000 --> 00:09:44,000
这说明在NewBehaviourScript脚本中成功地访问了ScriptB脚本
90
00:09:44,000 --> 00:09:52,000
但在控制视窗中unity还弹出了一条警告信息
91
00:09:52,000 --> 00:10:02,000
在运行时unity将Component类型向下转换为ScriptB类型
92
00:10:02,000 --> 00:10:09,000
此时可以双击此警告信息 然后在脚本编辑器中
93
00:10:09,000 --> 00:10:13,000
可以看到已经自动定位到出现警告的语句
94
00:10:13,000 --> 00:10:19,000
这是因为语句没有明确地指定组件的类型
95
00:10:19,000 --> 00:10:26,000
此时可以去掉组件名称的双引号
96
00:10:26,000 --> 00:10:36,000
然后保存并重新运行 可以看到警告消失了
97
00:10:36,000 --> 00:10:45,000
或者也可以使用unity提供的另一种方法 也就是泛型函数
98
00:10:45,000 --> 00:10:51,000
在语句执行时明确地指定物体的类型
99
00:10:51,000 --> 00:10:59,000
回到脚本编辑器中 我们可以使用获取组件语句的泛型格式
100
00:10:59,000 --> 00:11:19,000
此时可以将语句写为 GetComponent.<ScriptB>();
101
00:11:19,000 --> 00:11:25,000
此种写法称为语句的泛型写法
102
00:11:25,000 --> 00:11:30,000
保存脚本回到unity中
103
00:11:30,000 --> 00:11:39,000
可以看到我们的场景也会正常执行
104
00:11:39,000 --> 00:11:46,000
在本节中我们介绍了物体的访问
105
00:11:46,000 --> 00:11:50,000
在下一节中我们介绍物体的操纵