关闭

017-游戏对象组件访问 srt字幕文件

244人阅读 评论(0) 收藏 举报
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
在下一节中我们介绍物体的操纵

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:57729次
    • 积分:1845
    • 等级:
    • 排名:千里之外
    • 原创:74篇
    • 转载:27篇
    • 译文:56篇
    • 评论:2条
    最新评论