1
00:00:00,000 --> 00:00:02,000
创建游戏的过程
2
00:00:02,000 --> 00:00:10,000
也是定义游戏物体与环境或与其他游戏物体交互的过程
3
00:00:10,000 --> 00:00:16,000
这就离不开在一个游戏物体中选择或引用其他的游戏物体
4
00:00:16,000 --> 00:00:22,000
甚至是使用其他游戏物体中的组件或脚本等
5
00:00:22,000 --> 00:00:32,000
unity的脚本接口提供了多种方式来查找或访问其游戏物体
6
00:00:32,000 --> 00:00:35,000
或其中所包含的组件
7
00:00:35,000 --> 00:00:41,000
接下来我们就来看一下如何来访问其他的游戏物体
8
00:00:41,000 --> 00:00:46,000
首先在场景中创建一个球体
9
00:00:46,000 --> 00:00:56,000
然后为球体添加一个名称为SphereScript的脚本
10
00:00:56,000 --> 00:00:59,000
也就是球体脚本
11
00:00:59,000 --> 00:01:06,000
在球体脚本中添加了一个公共变量也就是球体半径
12
00:01:06,000 --> 00:01:12,000
并且添加了一个自定义的函数DoSomething
13
00:01:12,000 --> 00:01:16,000
在函数中把一个单词打印出来
14
00:01:16,000 --> 00:01:21,000
接下来看一下物体访问的第一种方式
15
00:01:21,000 --> 00:01:28,000
即定义变量然后在属性编辑器中来引用其他的物体
16
00:01:28,000 --> 00:01:36,000
我们可以在Cube物体的属性编辑器中通过定义变量的方式
17
00:01:36,000 --> 00:01:38,000
来引用球体对象
18
00:01:38,000 --> 00:01:45,000
此时我们可以看一下Cube物体的脚本定义
19
00:01:45,000 --> 00:01:53,000
在脚本中我们定义了一个变量 其类型为Transform
20
00:01:53,000 --> 00:02:00,000
由于此变量是公共变量因此它会显示在Cube物体的属性编辑器中
21
00:02:00,000 --> 00:02:07,000
然后我们可以使用拖动的方式来为此变量赋值
22
00:02:07,000 --> 00:02:10,000
来引用其他的物体
23
00:02:10,000 --> 00:02:17,000
在Update函数中我们重新设置引用物体的颜色为红色
24
00:02:17,000 --> 00:02:22,000
回到unity然后选择Cube物体
25
00:02:22,000 --> 00:02:29,000
在其属性编辑器中可以看到脚本中定义的变量显示在其中
26
00:02:29,000 --> 00:02:36,000
此时可以通过拖动的方式来选择需要引用的物体
27
00:02:36,000 --> 00:02:44,000
此处引用了Sphere物体 也可以通过单击选择框来选择其他物体
28
00:02:44,000 --> 00:02:53,000
单击播放按钮播放场景 可以看到在播放场景后
29
00:02:53,000 --> 00:02:58,000
球体的颜色由白色变为红色
30
00:02:58,000 --> 00:03:02,000
这说明成功地在一个物体中引用了另一个物体
31
00:03:02,000 --> 00:03:07,000
除了可以直接引用物体类型
32
00:03:07,000 --> 00:03:10,000
也可以通过定义变量的方式
33
00:03:10,000 --> 00:03:14,000
来引用或访问其他物体中的脚本
34
00:03:14,000 --> 00:03:18,000
例如在NewBehaviourScript脚本中
35
00:03:18,000 --> 00:03:22,000
我们可以重新定义target变量的类型
36
00:03:22,000 --> 00:03:25,000
为球体物体中所包含的脚本
37
00:03:25,000 --> 00:03:28,000
也就是SphereScript类型
38
00:03:28,000 --> 00:03:43,000
在Start函数中调用了SphereScript中的DoSomething
39
00:03:43,000 --> 00:03:48,000
也就是自定义函数DoSomething
40
00:03:48,000 --> 00:03:54,000
它会在控制台中输出单词 hello
41
00:03:54,000 --> 00:03:59,000
保存脚本然后切换到unity中
42
00:03:59,000 --> 00:04:03,000
在Cube物体的属性编辑器中
43
00:04:03,000 --> 00:04:10,000
target变量的类型已经变成为SphereScript
44
00:04:10,000 --> 00:04:16,000
也就是为此变量赋值的类型必须为SphereScript
45
00:04:16,000 --> 00:04:21,000
此时仍然可以拖动球体对象为此变量赋值
46
00:04:21,000 --> 00:04:27,000
因为在球体对象中包含有SphereScript脚本
47
00:04:27,000 --> 00:04:29,000
单击play按钮播放场景
48
00:04:29,000 --> 00:04:33,000
可以看到在球体改变颜色的同时
49
00:04:33,000 --> 00:04:38,000
在控制台中也输出了球体脚本中自定义函数
50
00:04:38,000 --> 00:04:41,000
DoSomething的执行结果
51
00:04:41,000 --> 00:04:45,000
接下来我们看一下第二种访问物体的方式
52
00:04:45,000 --> 00:04:51,000
即通过GameObject.Find函数来定位场景中的物体
53
00:04:51,000 --> 00:04:55,000
通过Find函数我们可以根据物体的名称
54
00:04:55,000 --> 00:05:00,000
或路径来查找定位场景中的物体
55
00:05:00,000 --> 00:05:10,000
例如我们在Cube物体的脚本中重新定义target变量的访问方式
56
00:05:10,000 --> 00:05:16,000
也就是使用Find函数来访问球体对象
57
00:05:16,000 --> 00:05:24,000
此时可以重新定义target的类型为GameObject
58
00:05:24,000 --> 00:05:30,000
然后在Start函数中通过Find函数
59
00:05:30,000 --> 00:05:33,000
通过物体的名称来访问物体
60
00:05:33,000 --> 00:05:58,000
target=GameObject.Find("Sphere");
61
00:05:58,000 --> 00:06:03,000
保存脚本然后切换回unity
62
00:06:03,000 --> 00:06:10,000
可以看到target变量类型已经变为GameObject
63
00:06:10,000 --> 00:06:16,000
播放场景可以看到球体颜色变为红色
64
00:06:16,000 --> 00:06:23,000
说明在Cube物体中成功地使用Find函数找到了球体对象
65
00:06:23,000 --> 00:06:31,000
除此之外在Find函数中还可以通过层次路径来查找物体
66
00:06:31,000 --> 00:06:38,000
例如使Sphere成为主摄像机的子物体
67
00:06:38,000 --> 00:06:53,000
脚本中即改为"/Main Camera/Sphere"这种层次路径
68
00:06:53,000 --> 00:07:00,000
重新保存脚本切换到unity中
69
00:07:00,000 --> 00:07:08,000
再次执行 可以看到仍然可以成功定位到球体对象
70
00:07:08,000 --> 00:07:17,000
使用Find函数时尽量将其放在Start函数中
71
00:07:17,000 --> 00:07:21,000
来避免在每一帧中都执行Find操作
72
00:07:21,000 --> 00:07:26,000
这样可以提高程序的运行效率
73
00:07:26,000 --> 00:07:32,000
接下来看一下第三种定位物体的方式
74
00:07:32,000 --> 00:07:34,000
即通过标签的方式
75
00:07:34,000 --> 00:07:38,000
在unity中可以为物体添加一个标签
76
00:07:38,000 --> 00:07:43,000
就相当于为物体添加一个别名一样
77
00:07:43,000 --> 00:07:48,000
这样可以快速定位物体或快速分类物体
78
00:07:48,000 --> 00:07:54,000
要想为物体添加标签 先选中物体
79
00:07:54,000 --> 00:08:01,000
然后在属性编辑器中使用标签菜单来为其添加标签
80
00:08:01,000 --> 00:08:07,000
在标签菜单中含有一些预定义的标签
81
00:08:07,000 --> 00:08:14,000
如Respawn Finish EditorOnly MainCamera Player GameController
82
00:08:14,000 --> 00:08:21,000
可以为此物体选择其中一个预定义标签
83
00:08:21,000 --> 00:08:26,000
在选择后该物体就具有了相应的标签
84
00:08:26,000 --> 00:08:33,000
但也可以为物体添加自定义的标签
85
00:08:33,000 --> 00:08:38,000
此时选择Add Tag选项
86
00:08:38,000 --> 00:08:42,000
在标签管理器中可以创建新的标签
87
00:08:42,000 --> 00:08:45,000
扩展Tags
88
00:08:45,000 --> 00:08:55,000
可以在Element 0中输入新的标签 SphereTag
89
00:08:55,000 --> 00:09:04,000
在输入新的标签后其Size会自动增加
90
00:09:04,000 --> 00:09:08,000
回到属性编辑器中
91
00:09:08,000 --> 00:09:14,000
可以看到新添加的标签已经显示在标签菜单中
92
00:09:14,000 --> 00:09:23,000
此时可以为球体物体应用此新的标签
93
00:09:23,000 --> 00:09:27,000
这样球体物体就具有了SphereTag标签
94
00:09:27,000 --> 00:09:33,000
这时在Cube物体的脚本中
95
00:09:33,000 --> 00:09:38,000
我们可以重新定义球体对象的访问方式
96
00:09:38,000 --> 00:09:46,000
即使用FindGameObjectWithTag函数
97
00:09:46,000 --> 00:09:56,000
在其中使用新添加的SphereTag
98
00:09:56,000 --> 00:10:06,000
保存脚本回到unity中
99
00:10:06,000 --> 00:10:12,000
运行场景可以看到球体变为红色
100
00:10:12,000 --> 00:10:17,000
说明在Cube物体中成功地定位到了球体对象
101
00:10:17,000 --> 00:10:22,000
在使用标签方式时还可以使用函数的另一个方式
102
00:10:22,000 --> 00:10:30,000
FindGameObjectsWithTag 此函数返回的是GameObject数组
103
00:10:30,000 --> 00:10:36,000
在数组中包含有所有使用此标签的GameObject
104
00:10:36,000 --> 00:10:43,000
此时可以使用循环语句对数组中的对象进行处理
105
00:10:43,000 --> 00:10:47,000
在本节中主要介绍了物体的访问方式
106
00:10:47,000 --> 00:10:53,000
在下一节中我们看一下unity中对时间的控制
00:00:00,000 --> 00:00:02,000
创建游戏的过程
2
00:00:02,000 --> 00:00:10,000
也是定义游戏物体与环境或与其他游戏物体交互的过程
3
00:00:10,000 --> 00:00:16,000
这就离不开在一个游戏物体中选择或引用其他的游戏物体
4
00:00:16,000 --> 00:00:22,000
甚至是使用其他游戏物体中的组件或脚本等
5
00:00:22,000 --> 00:00:32,000
unity的脚本接口提供了多种方式来查找或访问其游戏物体
6
00:00:32,000 --> 00:00:35,000
或其中所包含的组件
7
00:00:35,000 --> 00:00:41,000
接下来我们就来看一下如何来访问其他的游戏物体
8
00:00:41,000 --> 00:00:46,000
首先在场景中创建一个球体
9
00:00:46,000 --> 00:00:56,000
然后为球体添加一个名称为SphereScript的脚本
10
00:00:56,000 --> 00:00:59,000
也就是球体脚本
11
00:00:59,000 --> 00:01:06,000
在球体脚本中添加了一个公共变量也就是球体半径
12
00:01:06,000 --> 00:01:12,000
并且添加了一个自定义的函数DoSomething
13
00:01:12,000 --> 00:01:16,000
在函数中把一个单词打印出来
14
00:01:16,000 --> 00:01:21,000
接下来看一下物体访问的第一种方式
15
00:01:21,000 --> 00:01:28,000
即定义变量然后在属性编辑器中来引用其他的物体
16
00:01:28,000 --> 00:01:36,000
我们可以在Cube物体的属性编辑器中通过定义变量的方式
17
00:01:36,000 --> 00:01:38,000
来引用球体对象
18
00:01:38,000 --> 00:01:45,000
此时我们可以看一下Cube物体的脚本定义
19
00:01:45,000 --> 00:01:53,000
在脚本中我们定义了一个变量 其类型为Transform
20
00:01:53,000 --> 00:02:00,000
由于此变量是公共变量因此它会显示在Cube物体的属性编辑器中
21
00:02:00,000 --> 00:02:07,000
然后我们可以使用拖动的方式来为此变量赋值
22
00:02:07,000 --> 00:02:10,000
来引用其他的物体
23
00:02:10,000 --> 00:02:17,000
在Update函数中我们重新设置引用物体的颜色为红色
24
00:02:17,000 --> 00:02:22,000
回到unity然后选择Cube物体
25
00:02:22,000 --> 00:02:29,000
在其属性编辑器中可以看到脚本中定义的变量显示在其中
26
00:02:29,000 --> 00:02:36,000
此时可以通过拖动的方式来选择需要引用的物体
27
00:02:36,000 --> 00:02:44,000
此处引用了Sphere物体 也可以通过单击选择框来选择其他物体
28
00:02:44,000 --> 00:02:53,000
单击播放按钮播放场景 可以看到在播放场景后
29
00:02:53,000 --> 00:02:58,000
球体的颜色由白色变为红色
30
00:02:58,000 --> 00:03:02,000
这说明成功地在一个物体中引用了另一个物体
31
00:03:02,000 --> 00:03:07,000
除了可以直接引用物体类型
32
00:03:07,000 --> 00:03:10,000
也可以通过定义变量的方式
33
00:03:10,000 --> 00:03:14,000
来引用或访问其他物体中的脚本
34
00:03:14,000 --> 00:03:18,000
例如在NewBehaviourScript脚本中
35
00:03:18,000 --> 00:03:22,000
我们可以重新定义target变量的类型
36
00:03:22,000 --> 00:03:25,000
为球体物体中所包含的脚本
37
00:03:25,000 --> 00:03:28,000
也就是SphereScript类型
38
00:03:28,000 --> 00:03:43,000
在Start函数中调用了SphereScript中的DoSomething
39
00:03:43,000 --> 00:03:48,000
也就是自定义函数DoSomething
40
00:03:48,000 --> 00:03:54,000
它会在控制台中输出单词 hello
41
00:03:54,000 --> 00:03:59,000
保存脚本然后切换到unity中
42
00:03:59,000 --> 00:04:03,000
在Cube物体的属性编辑器中
43
00:04:03,000 --> 00:04:10,000
target变量的类型已经变成为SphereScript
44
00:04:10,000 --> 00:04:16,000
也就是为此变量赋值的类型必须为SphereScript
45
00:04:16,000 --> 00:04:21,000
此时仍然可以拖动球体对象为此变量赋值
46
00:04:21,000 --> 00:04:27,000
因为在球体对象中包含有SphereScript脚本
47
00:04:27,000 --> 00:04:29,000
单击play按钮播放场景
48
00:04:29,000 --> 00:04:33,000
可以看到在球体改变颜色的同时
49
00:04:33,000 --> 00:04:38,000
在控制台中也输出了球体脚本中自定义函数
50
00:04:38,000 --> 00:04:41,000
DoSomething的执行结果
51
00:04:41,000 --> 00:04:45,000
接下来我们看一下第二种访问物体的方式
52
00:04:45,000 --> 00:04:51,000
即通过GameObject.Find函数来定位场景中的物体
53
00:04:51,000 --> 00:04:55,000
通过Find函数我们可以根据物体的名称
54
00:04:55,000 --> 00:05:00,000
或路径来查找定位场景中的物体
55
00:05:00,000 --> 00:05:10,000
例如我们在Cube物体的脚本中重新定义target变量的访问方式
56
00:05:10,000 --> 00:05:16,000
也就是使用Find函数来访问球体对象
57
00:05:16,000 --> 00:05:24,000
此时可以重新定义target的类型为GameObject
58
00:05:24,000 --> 00:05:30,000
然后在Start函数中通过Find函数
59
00:05:30,000 --> 00:05:33,000
通过物体的名称来访问物体
60
00:05:33,000 --> 00:05:58,000
target=GameObject.Find("Sphere");
61
00:05:58,000 --> 00:06:03,000
保存脚本然后切换回unity
62
00:06:03,000 --> 00:06:10,000
可以看到target变量类型已经变为GameObject
63
00:06:10,000 --> 00:06:16,000
播放场景可以看到球体颜色变为红色
64
00:06:16,000 --> 00:06:23,000
说明在Cube物体中成功地使用Find函数找到了球体对象
65
00:06:23,000 --> 00:06:31,000
除此之外在Find函数中还可以通过层次路径来查找物体
66
00:06:31,000 --> 00:06:38,000
例如使Sphere成为主摄像机的子物体
67
00:06:38,000 --> 00:06:53,000
脚本中即改为"/Main Camera/Sphere"这种层次路径
68
00:06:53,000 --> 00:07:00,000
重新保存脚本切换到unity中
69
00:07:00,000 --> 00:07:08,000
再次执行 可以看到仍然可以成功定位到球体对象
70
00:07:08,000 --> 00:07:17,000
使用Find函数时尽量将其放在Start函数中
71
00:07:17,000 --> 00:07:21,000
来避免在每一帧中都执行Find操作
72
00:07:21,000 --> 00:07:26,000
这样可以提高程序的运行效率
73
00:07:26,000 --> 00:07:32,000
接下来看一下第三种定位物体的方式
74
00:07:32,000 --> 00:07:34,000
即通过标签的方式
75
00:07:34,000 --> 00:07:38,000
在unity中可以为物体添加一个标签
76
00:07:38,000 --> 00:07:43,000
就相当于为物体添加一个别名一样
77
00:07:43,000 --> 00:07:48,000
这样可以快速定位物体或快速分类物体
78
00:07:48,000 --> 00:07:54,000
要想为物体添加标签 先选中物体
79
00:07:54,000 --> 00:08:01,000
然后在属性编辑器中使用标签菜单来为其添加标签
80
00:08:01,000 --> 00:08:07,000
在标签菜单中含有一些预定义的标签
81
00:08:07,000 --> 00:08:14,000
如Respawn Finish EditorOnly MainCamera Player GameController
82
00:08:14,000 --> 00:08:21,000
可以为此物体选择其中一个预定义标签
83
00:08:21,000 --> 00:08:26,000
在选择后该物体就具有了相应的标签
84
00:08:26,000 --> 00:08:33,000
但也可以为物体添加自定义的标签
85
00:08:33,000 --> 00:08:38,000
此时选择Add Tag选项
86
00:08:38,000 --> 00:08:42,000
在标签管理器中可以创建新的标签
87
00:08:42,000 --> 00:08:45,000
扩展Tags
88
00:08:45,000 --> 00:08:55,000
可以在Element 0中输入新的标签 SphereTag
89
00:08:55,000 --> 00:09:04,000
在输入新的标签后其Size会自动增加
90
00:09:04,000 --> 00:09:08,000
回到属性编辑器中
91
00:09:08,000 --> 00:09:14,000
可以看到新添加的标签已经显示在标签菜单中
92
00:09:14,000 --> 00:09:23,000
此时可以为球体物体应用此新的标签
93
00:09:23,000 --> 00:09:27,000
这样球体物体就具有了SphereTag标签
94
00:09:27,000 --> 00:09:33,000
这时在Cube物体的脚本中
95
00:09:33,000 --> 00:09:38,000
我们可以重新定义球体对象的访问方式
96
00:09:38,000 --> 00:09:46,000
即使用FindGameObjectWithTag函数
97
00:09:46,000 --> 00:09:56,000
在其中使用新添加的SphereTag
98
00:09:56,000 --> 00:10:06,000
保存脚本回到unity中
99
00:10:06,000 --> 00:10:12,000
运行场景可以看到球体变为红色
100
00:10:12,000 --> 00:10:17,000
说明在Cube物体中成功地定位到了球体对象
101
00:10:17,000 --> 00:10:22,000
在使用标签方式时还可以使用函数的另一个方式
102
00:10:22,000 --> 00:10:30,000
FindGameObjectsWithTag 此函数返回的是GameObject数组
103
00:10:30,000 --> 00:10:36,000
在数组中包含有所有使用此标签的GameObject
104
00:10:36,000 --> 00:10:43,000
此时可以使用循环语句对数组中的对象进行处理
105
00:10:43,000 --> 00:10:47,000
在本节中主要介绍了物体的访问方式
106
00:10:47,000 --> 00:10:53,000
在下一节中我们看一下unity中对时间的控制