﻿1
00:00:04,320 --> 00:00:05,670
‫欢迎回来

2
00:00:05,700 --> 00:00:11,280
‫在这段视频中,

3
00:00:11,280 --> 00:00:20,740
‫我们将讨论组件, 以及我们的基本兵如何使用这些组件来进行碰撞和视觉表示, 如网格, 以及我们的投射物将出现的产卵点｡

4
00:00:20,760 --> 00:00:26,070
‫我们将讨论如何使用组件､ 支持和附件,

5
00:00:26,070 --> 00:00:33,930
‫以便将各种组件彼此连接, 以及卒如何拥有根组件, 该根组件存储转换信息, 以便——｡

6
00:00:34,200 --> 00:00:42,630
‫现在我们已经创建了第一个C++类Base-—, 现在我们准备开始向Base-—中添加一些内容｡

7
00:00:42,690 --> 00:00:50,090
‫基地——将需要一些组件, 如坦克的基地和炮塔的网格｡

8
00:00:50,100 --> 00:00:55,470
‫C在我们的网格文件夹中, 我们有一个坦克基地, 我们有一个坦克炮塔, 对于塔,

9
00:00:55,470 --> 00:00:57,210
‫我们也有一个基地和炮塔｡

10
00:00:57,540 --> 00:01:00,480
‫所以我们需要几个网格组件｡

11
00:01:00,480 --> 00:01:08,000
‫我们还需要一个胶囊组件来处理碰撞, 这样我们的坦克和炮塔就不会通过对方｡

12
00:01:08,010 --> 00:01:10,890
‫现在, 我们来谈谈组件｡

13
00:01:11,040 --> 00:01:17,180
‫当我们将组件添加到类中时, 我们需要决定该组件应该是哪个类｡

14
00:01:17,190 --> 00:01:19,830
‫现在, 一个选择是场景组件｡

15
00:01:20,070 --> 00:01:28,380
‫你看到的组件类有一些属性, 比如它有一个变换, 这意味着它有一个位置, 一个旋转等等｡

16
00:01:28,440 --> 00:01:30,330
‫它还支持附件｡

17
00:01:30,330 --> 00:01:34,530
‫这意味着我们可以将其他组件附加到场景组件｡

18
00:01:34,530 --> 00:01:36,900
‫稍后我们将详细了解这是如何工作的｡

19
00:01:37,020 --> 00:01:43,410
‫场景组件没有视觉表示, 这意味着它没有网格或类似的东西｡

20
00:01:43,410 --> 00:01:45,570
‫我们在游戏里看不到｡

21
00:01:45,570 --> 00:01:52,650
‫现在, Unreal Engine中有一些其他类是从场景组件派生的, 例如一个胶囊组件｡

22
00:01:52,680 --> 00:01:59,130
‫YOU封装组件类是用来处理碰撞的, 这就是它的全部优点｡

23
00:01:59,130 --> 00:02:06,240
‫我们使用胶囊组件, 这样我们的——就不会掉到地板上或者穿过墙壁之类的东西｡

24
00:02:06,240 --> 00:02:11,850
‫现在, 静态网格组件也派生自场景组件类｡

25
00:02:12,150 --> 00:02:19,110
‫使用静态网格组件类使我们能够有一个可视化的表示, 特别是一个网格, 它将属于我们的——类,

26
00:02:19,140 --> 00:02:25,830
‫当我们移动它时, 我们可以在世界上看到｡

27
00:02:26,100 --> 00:02:32,550
‫现在, 默认情况下, 我们的类已经有了一个组件, 它被称为根组件｡

28
00:02:32,550 --> 00:02:37,440
‫让我们回到VS代码, 看看是否能找到这个根组件｡

29
00:02:37,440 --> 00:02:43,170
‫我现在在Base蓬特CP中, 我将单击构造函数中的任何位置, 比如这里, 然后输入root

30
00:02:43,170 --> 00:02:48,270
‫component, 就像这样.

31
00:02:48,450 --> 00:02:56,850
‫现在, 我将右键单击此按钮, 然后单击“转至定义”, 这样, 我们就打开了actor｡

32
00:02:56,850 --> 00:03:04,740
‫在这里, 在受保护部分的参与者中, 我们可以看到一个称为根组件的组件指针｡

33
00:03:05,190 --> 00:03:10,470
‫因此, 这个名为root component的变量存在于执行元类中｡

34
00:03:10,470 --> 00:03:15,690
‫因此, 从actor派生的任何内容都将继承此根组件变量｡

35
00:03:16,260 --> 00:03:20,820
‫这意味着我们的基也有这个根组件变量｡

36
00:03:20,850 --> 00:03:27,360
‫因此, 每当我们考虑某个特定的位置时,

37
00:03:27,360 --> 00:03:33,870
‫我们实际上是在谈论存储在根组件的转换中的位置信息, 根组件是一个场景组件｡

38
00:03:33,870 --> 00:03:36,690
‫因此, 场景组件具有自己的变换｡

39
00:03:36,720 --> 00:03:43,500
‫我将继续关闭参与者H并删除添加到base的构造函数中的这一行｡

40
00:03:43,890 --> 00:03:52,770
‫我们知道我们的——有这个根组件, 它的类型是你看到的组件, 这意味着我们的——有一个转换｡

41
00:03:52,770 --> 00:03:57,210
‫但是我们也知道这个根组件没有可视化表示｡

42
00:03:57,210 --> 00:03:58,380
‫它是无形的｡

43
00:03:58,380 --> 00:04:05,820
‫然而, 我们可以用其他一些对象重新分配根组件, 这些对象的类型是从所见组件派生的｡

44
00:04:05,850 --> 00:04:07,350
‫现在我们看到, 美国｡

45
00:04:07,350 --> 00:04:10,500
‫胶囊组件类派生自场景组件｡

46
00:04:10,500 --> 00:04:17,670
‫因此, 如果我们创建一个胶囊, 我们可以将其指定为根, 而不是默认的场景组件｡

47
00:04:17,820 --> 00:04:21,360
‫现在我们提到场景组件, 支持附件｡

48
00:04:21,360 --> 00:04:26,790
‫这意味着我们可以创建其他组件并将其附加到场景组件｡

49
00:04:26,790 --> 00:04:33,510
‫因此, 如果我们创建一个静态网格组件, 例如, 称为基本网格, 我们可以将其附加到根组件｡

50
00:04:33,540 --> 00:04:40,080
‫现在, 因为静态网格组件是从场景组件类派生的, 所以它也支持附加｡

51
00:04:40,080 --> 00:04:44,760
‫所以如果我们创建另一个网格, 我们可以将其连接到第一个网格｡

52
00:04:44,760 --> 00:04:50,760
‫因此, 我们可以创建一个当前网格静态网格组件, 并将其附加到基础网格组件｡

53
00:04:50,790 --> 00:04:53,940
‫现在, 我们还可以创建新的场景组件｡

54
00:04:53,940 --> 00:05:01,890
‫例如, 如果我们想要一个场景组件, 我们可以称之为抛射体产卵点, 我们可以将其附加到炮塔网格｡

55
00:05:01,890 --> 00:05:03,750
‫我们为什么要制造一个大场面呢？

56
00:05:03,860 --> 00:05:04,510
‫组件｡

57
00:05:04,520 --> 00:05:07,020
‫我们不能给予它自己的视觉表示｡

58
00:05:07,040 --> 00:05:13,280
‫好吧, 如果我们需要一个产卵点, 一个我们想要产卵的位置, 一个场景组件是完美的, 因为它有自己的变换,

59
00:05:13,280 --> 00:05:19,100
‫自己的位置, 旋转等｡

60
00:05:19,100 --> 00:05:22,460
‫我们可以以此为点制造炮弹｡

61
00:05:22,490 --> 00:05:28,880
‫因此, 在将一个封装体指定为根组件之后, 我们的根组件现在将具有U｡

62
00:05:28,910 --> 00:05:40,460
‫胶囊组件类类型和基础网格和炮塔网格将是静态网格组件, 我们的弹丸产卵点将是一个U看到的组件｡

63
00:05:40,880 --> 00:05:46,670
‫现在让我们来谈谈这个连接的事情, 因为这些东西都是相互连接的｡

64
00:05:46,700 --> 00:05:54,350
‫这意味着当根组件在空间中移动时, 连接到它的所有对象都将沿着之移动｡

65
00:05:54,740 --> 00:05:59,640
‫但是基础网格本身可以相对于根移动｡

66
00:05:59,660 --> 00:06:06,260
‫例如, 它可以旋转, 并且附加到基础网格的所有对象都将沿着之旋转｡

67
00:06:06,680 --> 00:06:15,020
‫同样, 我们将此炮塔网格附加到基础网格, 并且它本身可以独立于基础网格移动｡

68
00:06:15,050 --> 00:06:21,320
‫例如, 如果我们旋转炮塔网格, 它将旋转, 任何附加到它的东西,

69
00:06:21,320 --> 00:06:25,270
‫如场景组件将沿着炮塔网格｡

70
00:06:25,280 --> 00:06:30,560
‫因此, 场景组件将在旋转塔网格时沿着移动｡

71
00:06:30,560 --> 00:06:35,450
‫当然, 如果我们愿意, 我们可以相对于炮塔网格移动场景组件｡

72
00:06:35,630 --> 00:06:40,550
‫由于没有任何内容附加到场景组件, 因此, 没有任何内容可以沿着它｡

73
00:06:40,580 --> 00:06:46,330
‫现在, 我们来了解一下组件在蓝本中的工作方式以及内容文件夹所选择的内容｡

74
00:06:46,340 --> 00:06:50,930
‫我将右键单击并选择“Blueprint Class”以创建一个新蓝图｡

75
00:06:50,960 --> 00:06:59,000
‫让我们选择actor并调用此Components Actor, 现在双击components Actor,

76
00:06:59,000 --> 00:07:01,020
‫注意我们有默认的场景根｡

77
00:07:01,040 --> 00:07:05,040
‫这表示我们在C++中看到的根组件变量｡

78
00:07:05,060 --> 00:07:12,770
‫现在, 如果需要, 我们可以通过单击“添加”按钮并选择要添加的组件类型来添加新组件｡

79
00:07:12,770 --> 00:07:15,790
‫搜索胶囊并选择胶囊碰撞｡

80
00:07:15,800 --> 00:07:17,900
‫这是一个胶囊组件｡

81
00:07:17,900 --> 00:07:20,320
‫它的C++版本是U.

82
00:07:20,330 --> 00:07:21,780
‫胶囊组件类｡

83
00:07:21,800 --> 00:07:24,260
‫请注意, 它就在默认场景下｡

84
00:07:24,260 --> 00:07:27,440
‫根这表示它附加到该场景｡

85
00:07:27,440 --> 00:07:30,350
‫Root我们可以继续添加更多组件｡

86
00:07:30,350 --> 00:07:36,620
‫例如, 如果选择“Kub”, 则将添加一个静态网格组件,

87
00:07:36,620 --> 00:07:40,430
‫并且其在细节面板中的静态网格属性将自动设置为立方体｡

88
00:07:40,430 --> 00:07:41,460
‫静态网格｡

89
00:07:41,480 --> 00:07:46,420
‫现在请注意, 在组件面板中, 立方体就在胶囊下面｡

90
00:07:46,430 --> 00:07:52,280
‫如果我们单击它旁边的下拉菜单, 我们将不再在此处看到多维数据集,

91
00:07:52,280 --> 00:07:55,490
‫因此我们可以折叠它以隐藏附加到给定组件的任何对象｡

92
00:07:55,490 --> 00:08:01,970
‫现在, 我们可以通过单击并将其中一个组件拖动到默认的场景根上来重新分配根组件｡

93
00:08:01,970 --> 00:08:08,210
‫例如, 如果我单击胶囊并将其拖动到默认场景根上, 它现在将成为根组件｡

94
00:08:08,210 --> 00:08:11,870
‫因此, 我们已将根组件重新分配给此封装组件｡

95
00:08:11,870 --> 00:08:14,180
‫我们也可以指定附件｡

96
00:08:14,180 --> 00:08:16,430
‫让我们单击“添加”（add）并选择球体｡

97
00:08:16,430 --> 00:08:21,200
‫现在, 默认情况下, 球体附加到胶囊, 就像立方体静态网格一样｡

98
00:08:21,200 --> 00:08:27,560
‫但如果我单击并拖动球体到立方体上, 球体现在直接附加到立方体上｡

99
00:08:27,560 --> 00:08:34,340
‫如果我们单击球体并将其拖动到胶囊上, 则可以选择创建新根或附加｡

100
00:08:34,700 --> 00:08:39,680
‫如果我们选择附加, 球体将再次附加到胶囊｡

101
00:08:39,950 --> 00:08:46,010
‫但如果选择“生成新根”（make new root）, 则球体将成为根组件｡

102
00:08:46,550 --> 00:08:54,770
‫因此, 我们不仅可以控制新组件的创建及其附加方式, 还可以重新分配根组件｡

103
00:08:55,130 --> 00:09:00,410
‫让我们继续并通过左键单击选择球体, 按住Shift键并左键单击立方体以选择它,

104
00:09:00,410 --> 00:09:04,850
‫然后单击删除以删除这些组件｡

105
00:09:05,180 --> 00:09:10,520
‫现在, 作为您的挑战, 我希望您能够更加熟悉蓝图中的组件｡

106
00:09:10,520 --> 00:09:12,980
‫为我们的角色添加几个组件｡

107
00:09:12,980 --> 00:09:17,510
‫我们已经有了一个胶囊组件, 它目前是根组件｡

108
00:09:17,510 --> 00:09:23,960
‫添加一个静态网格组件, 并为其静态网格指定坦克底部, 然后添加第二个静态网格组件,

109
00:09:23,960 --> 00:09:27,950
‫并将坦克炮塔指定为其静态网格｡

110
00:09:27,980 --> 00:09:34,040
‫确保将基础补片连接到瓣膜鞘, 并将转台补片连接到基础补片｡

111
00:09:34,040 --> 00:09:40,640
‫现在, 完成此操作后, 移动并缩放基础网格, 并观察附加的炮塔网格的行为,

112
00:09:40,640 --> 00:09:42,800
‫暂停视频并尝试给予｡

113
00:09:45,720 --> 00:09:46,080
‫好吧, 我会的

114
00:09:46,080 --> 00:09:48,780
‫因此, 我将单击“添加”并选择静态网格｡

115
00:09:48,780 --> 00:09:53,550
‫现在, 在细节面板中, 我将静态网格设置为水箱底部网格｡

116
00:09:53,550 --> 00:09:57,150
‫接下来, 我将单击“添加”并再次选择静态网格｡

117
00:09:57,150 --> 00:10:03,840
‫请注意, 它会自动附加到第一个静态网格, 因为这是我在细节面板中选择的内容｡

118
00:10:03,840 --> 00:10:06,840
‫我将把静态网格设置到坦克炮塔上｡

119
00:10:06,870 --> 00:10:12,330
‫现在, 选择了第一个静态网格后, 我将移动它,

120
00:10:12,330 --> 00:10:15,330
‫并注意到附加到它的第二个静态网格也沿着之移动｡

121
00:10:15,330 --> 00:10:18,750
‫旋转和缩放也是如此｡

122
00:10:18,750 --> 00:10:22,770
‫当我放大它时, 附加的网格也会变大｡

123
00:10:23,130 --> 00:10:30,480
‫我们已经讨论了组件, 并看到了如何将组件连接到其他组件以及如何移动和扩展｡

124
00:10:30,480 --> 00:10:34,290
‫一个元件会影响贴附至该元件的其他元件｡

125
00:10:34,290 --> 00:10:43,650
‫我们还看到脑桥从actor类继承了一个根组件, 这个对象存储了兵的转换信息｡

126
00:10:43,980 --> 00:10:48,270
‫我们将学习如何用C++创建组件, 并在后面的课程中学习｡

127
00:10:48,840 --> 00:10:50,250
‫下一个视频里见｡

