﻿1
00:00:04,610 --> 00:00:05,660
‫你好, 欢迎｡

2
00:00:05,660 --> 00:00:12,290
‫在这节课中, 我们将用C++创建一个新的组件, 这个触发框,

3
00:00:12,290 --> 00:00:16,880
‫当我们进入凹室或者在凹室中放置任何物体时, 它会向我们报告｡

4
00:00:16,880 --> 00:00:20,930
‫您可以看到, 我们在左手看到了一个小蓝图消息｡

5
00:00:21,110 --> 00:00:29,930
‫要做到这一点, 我们必须了解重叠和阻塞以及不同的碰撞反应在虚幻中的表现｡

6
00:00:29,930 --> 00:00:31,730
‫让我们深入了解一下｡

7
00:00:32,510 --> 00:00:36,510
‫现在, 我们已经熟悉了跟踪通道的工作原理｡

8
00:00:36,530 --> 00:00:42,650
‫我们知道, 您可以对场景中的不同对象进行轨迹响应, 例如这棵灌木｡

9
00:00:42,650 --> 00:00:51,620
‫在这里, 您可以看到它对武器痕迹有一个忽略响应, 但它确实阻止了可见性痕迹｡

10
00:00:52,370 --> 00:00:54,890
‫还有一个防弹玻璃的例子｡

11
00:00:54,890 --> 00:01:00,250
‫它可以阻挡武器, 但允许通过和砖墙, 阻止两者的能见度｡

12
00:01:00,260 --> 00:01:03,790
‫因此, 您可以看到该系统如何与跟踪通道配合使用｡

13
00:01:03,800 --> 00:01:10,100
‫现在, 如果我们试图决定哪些物体可以互相重叠, 哪些可以通过, 哪些可以互相阻挡,

14
00:01:10,100 --> 00:01:12,230
‫会发生什么？

15
00:01:12,230 --> 00:01:14,600
‫这可能会变得有点复杂｡

16
00:01:14,630 --> 00:01:21,600
‫我们已经看到了这一点, 当我们试图让石像鬼与我们的兵重叠｡

17
00:01:21,620 --> 00:01:23,540
‫这就是它的工作原理｡

18
00:01:23,540 --> 00:01:25,940
‫本质上, 我们使用这些对象类型｡

19
00:01:26,480 --> 00:01:31,190
‫每个对象可以属于可以是特定对象的类型｡

20
00:01:31,190 --> 00:01:34,390
‫这与C++中的类型系统不同｡

21
00:01:34,400 --> 00:01:36,740
‫这些是碰撞类型｡

22
00:01:36,740 --> 00:01:43,640
‫你可能有物体A和物体B, 在它们的设置中, 如果我们去看看我们的石像鬼的设置,

23
00:01:43,640 --> 00:01:48,820
‫比如, 你可以看到它们有自己的物体类型｡

24
00:01:48,830 --> 00:01:56,300
‫这是一个世界静态对象, 但再往下, 它们也有对其他类型对象的响应｡

25
00:01:56,300 --> 00:02:02,930
‫所以你可以看到这个物体会阻挡其他的世界静力学, 它会阻挡其他的世界动力学, 它会覆盖棋子类型,

26
00:02:02,930 --> 00:02:09,530
‫它会阻挡物理物体, 几乎阻挡所有其他类型｡

27
00:02:10,040 --> 00:02:16,310
‫显然, 如果我们去找我们的BP球员, 棋子本身｡

28
00:02:17,040 --> 00:02:24,300
‫看看它的胶囊组件, 看看细节, 向下滚动到它有一个碰撞预设｡

29
00:02:24,300 --> 00:02:29,980
‫如果我们可以展开“兵碰撞”预设, 我们就不能编辑它, 但我们可以看到它在做什么｡

30
00:02:30,000 --> 00:02:34,440
‫您可以看到它对世界静态有自己反应

31
00:02:34,440 --> 00:02:38,250
‫所以它对世界静电的反应是屏蔽它｡

32
00:02:38,250 --> 00:02:41,070
‫所以我们实际上有两个不同的选择｡

33
00:02:41,070 --> 00:02:49,320
‫兵说我挡住了世界静态, 但石像鬼说我重叠了兵｡

34
00:02:49,320 --> 00:02:50,670
‫那么应该怎么办呢？

35
00:02:50,670 --> 00:02:54,960
‫这就是这个表格的用处, 如果你想在课堂参考资料中阅读全文,

36
00:02:54,960 --> 00:02:57,780
‫我这里有这篇博文的链接｡

37
00:02:57,780 --> 00:03:02,100
‫因此, 您可以看到, 它在两者之间的阻塞交互作用最小｡

38
00:03:02,100 --> 00:03:08,940
‫如果物体A是兵, 我们会说, 嘿, 我应该挡住那个石像鬼, 但是石像鬼物体B, 它会说,

39
00:03:08,940 --> 00:03:11,790
‫嘿, 我应该覆盖那个兵.

40
00:03:11,790 --> 00:03:15,960
‫因此, 这两个函数中的阻塞最少, 并且它们会重叠｡

41
00:03:16,230 --> 00:03:23,280
‫所以这确实意味着如果你想让两个东西互相阻碍, 他们都需要同意这是他们想做的｡

42
00:03:23,280 --> 00:03:25,410
‫让我们看另一个例子｡

43
00:03:25,410 --> 00:03:31,410
‫我们有一个对象类型的棋子, 它对其他棋子的对象反应是阻止它们,

44
00:03:31,410 --> 00:03:34,800
‫而世界静态对象是阻止它们.

45
00:03:34,980 --> 00:03:37,800
‫砖墙是一个世界静止的物体｡

46
00:03:37,800 --> 00:03:40,350
‫它可以阻挡兵和阻挡世界静电｡

47
00:03:40,350 --> 00:03:42,350
‫所以这两个观点是一致的｡

48
00:03:42,360 --> 00:03:46,220
‫现在灌木也是世界静止的, 但它与棋子重叠｡

49
00:03:46,230 --> 00:03:50,310
‫它很像我们的石像鬼, 但它阻挡了世界静力学｡

50
00:03:50,310 --> 00:03:56,760
‫如果你往下看会发生什么, 兵会尝试穿过灌木丛, 它可以,

51
00:03:56,760 --> 00:04:02,310
‫因为它采用了最少的阻碍选项,

52
00:04:02,310 --> 00:04:08,430
‫即重叠, 它会生成一个重叠事件, 我们可以在代码或蓝图中连接到它,

53
00:04:08,430 --> 00:04:14,910
‫而它不能穿过砖墙, 它会再次生成一个击中事件, 我们可以在蓝图或C++中连接到它｡

54
00:04:14,910 --> 00:04:17,820
‫那么我为什么要深入研究呢？

55
00:04:17,820 --> 00:04:25,830
‫因为我想做的是把一个我们基本上看不见的物体放进这堵墙里, 这样我们就可以把石像鬼放进去, 当它发生的时候,

56
00:04:25,830 --> 00:04:30,630
‫我们就得到一个事件｡

57
00:04:30,630 --> 00:04:36,390
‫因此, 石像鬼会支撑一个事件, 并说, 嘿, 我有一些与我重叠｡

58
00:04:36,390 --> 00:04:37,860
‫那么, 为什么所有这些都很重要呢？

59
00:04:37,860 --> 00:04:45,540
‫因为我想放一个看不见的物体, 但会和石像鬼重叠, 让我们知道这个事实｡

60
00:04:45,540 --> 00:04:50,460
‫然后我们可以从C++中查询它, 或者我们可以在Blueprint中获取事件｡

61
00:04:50,460 --> 00:04:55,920
‫我们要做的是, 首先, 从这面地牢的墙壁上创建一个蓝图｡

62
00:04:55,920 --> 00:05:01,290
‫我将单击详细信息窗格中的蓝图按钮, 创建一个新子类,

63
00:05:01,290 --> 00:05:11,970
‫并将其命名为“哔”, 在“secret wall”下加下划线, 然后单击“选择”创建它, 并在主窗口中创建一个摘要,

64
00:05:11,970 --> 00:05:15,300
‫其中包含一个mover｡

65
00:05:15,300 --> 00:05:23,070
‫我还想在这里添加一个基本的组件, 叫做长方体碰撞｡

66
00:05:23,340 --> 00:05:27,930
‫所以如果我们点击一个长方体碰撞, 你可以看到它是完全不可见的｡

67
00:05:27,930 --> 00:05:35,100
‫它只是给你一些我们可以改变的盒子范围, 我们可以把它们变大, 这样我们把石像鬼放在盒子里的任何地方,

68
00:05:35,100 --> 00:05:39,600
‫它都会接受它｡

69
00:05:40,230 --> 00:05:44,880
‫我们可以看到这里有碰撞选项｡

70
00:05:44,880 --> 00:05:49,200
‫我们有一个重叠所有动态作为默认, 但作为默认预设｡

71
00:05:49,200 --> 00:05:54,810
‫但是, 如果单击“自定义”, 您可以看到, 我们可以更改对象类型,

72
00:05:54,810 --> 00:05:56,520
‫也可以更改它对不同内容的响应方式｡

73
00:05:56,520 --> 00:06:04,170
‫我认为最重要的是, 正如你所看到的, 它被设置为与大多数对象类型重叠,

74
00:06:04,170 --> 00:06:09,840
‫这意味着即使它们没有被设置为与世界动力学重叠, 它也会重叠｡

75
00:06:09,840 --> 00:06:11,130
‫它不会阻挡任何东西｡

76
00:06:11,130 --> 00:06:14,250
‫我们可以把石像鬼放在这里｡

77
00:06:14,250 --> 00:06:19,530
‫我将从场景中删除该组件, 因为我想在C++中创建一个新的组件,

78
00:06:19,530 --> 00:06:24,780
‫该组件基于长方体碰撞｡

79
00:06:24,780 --> 00:06:31,080
‫现在, 我想向大家展示一下,

80
00:06:31,080 --> 00:06:40,470
‫如果我们将此框设置回默认预设, 即重叠所有动态, 我相信我们已经选中, 或者实际上已经选中生成重叠事件｡

81
00:06:40,470 --> 00:06:48,840
‫然后, 我们可以进入事件图, 右键单击此处并查找重叠｡

82
00:06:48,840 --> 00:06:56,400
‫在顶部右侧, 您可以看到一个附加组件开始与盒子重叠｡

83
00:06:56,400 --> 00:07:05,760
‫如果我们单击该按钮, 实际上, 我们可以将box组件重命名为trigger area, 例如｡

84
00:07:05,760 --> 00:07:16,410
‫所以基本上如果我们和触发区域重叠, 我们会得到一个和我们重叠的东西的属性列表, 这样我们就可以取｡

85
00:07:16,850 --> 00:07:17,450
‫是重叠的｡

86
00:07:17,450 --> 00:07:19,700
‫我们可以知道它的名字｡

87
00:07:19,700 --> 00:07:22,850
‫所以get的显示名称就是节点的名称｡

88
00:07:22,850 --> 00:07:32,570
‫然后我们可以打印结果字符串, 并将其连接到执行引脚, 然后我们可以继续单击“播放”｡

89
00:07:32,570 --> 00:07:40,190
‫如果我们走到这个区域, 你可以看到它说哔哔声播放器是重叠的东西｡

90
00:07:40,190 --> 00:07:42,080
‫现在我看不到那个区域, 因为太黑了｡

91
00:07:42,080 --> 00:07:50,930
‫我现在要再次来到秘密墙, 发出哔哔声, 然后我会加入一个聚光灯组件, 我会把它放在这个小凹室里,

92
00:07:51,290 --> 00:07:59,660
‫旋转它, 使其面朝下, 照亮我们想要放置物体的空间｡

93
00:07:59,690 --> 00:08:01,940
‫现在在现场, 我们可以看得很清楚｡

94
00:08:01,940 --> 00:08:06,560
‫现在我们按播放键, 然后走到那个凹室｡

95
00:08:06,560 --> 00:08:14,300
‫如果我们把它重叠起来,

96
00:08:14,300 --> 00:08:24,020
‫它会说哔哔声播放器重叠了, 我们可以用我们新制造的抓取器从这个单元格中抓取我们的石像鬼, 我们可以把石像鬼放在这个区域｡

97
00:08:24,230 --> 00:08:35,510
‫然而, 它似乎并没有产生任何重叠事件, 这是因为正如我们所需要的, 有两个方面的碰撞｡

98
00:08:35,510 --> 00:08:38,510
‫也有两个方面产生重叠事件｡

99
00:08:38,510 --> 00:08:48,830
‫因此, 仅仅因为我们在盒子组件上启用了它, 并不意味着移动到它里面的滴水嘴实际上会提醒我们任何重叠事件｡

100
00:08:48,830 --> 00:08:55,220
‫所以我们要做的就是去到石像鬼那里检查一下, 生成重叠事件｡

101
00:08:55,310 --> 00:08:58,520
‫那么重叠事件就应该发生了｡

102
00:08:58,520 --> 00:09:06,530
‫我们去把石像鬼抬起来, 带他到壁龛里, 把他插进去｡

103
00:09:06,530 --> 00:09:09,440
‫现在我们有一个活动即将举行｡

104
00:09:09,440 --> 00:09:14,330
‫当这种情况发生时, 石像鬼雕像确实被注册｡

105
00:09:14,330 --> 00:09:19,340
‫现在, 我不想在这个特定的例子中使用蓝图事件｡

106
00:09:19,340 --> 00:09:32,840
‫我想做的是把我们的触发区域组件转化成一个C++组件, 它可以计算石像鬼雕像是否已经存在了.

107
00:09:33,200 --> 00:09:38,150
‫我们要做的是, 我们要去添加组件, 创建一个新的C++组件｡

108
00:09:38,150 --> 00:09:44,540
‫作为父类,

109
00:09:44,540 --> 00:09:50,990
‫我们将转到所有类并搜索框组件, 而不是选择活动组件或场景组件｡

110
00:09:50,990 --> 00:09:56,090
‫你可以看到形状组件, 盒子组件, 我们想要的, 我们可以继续, 点击下一个｡

111
00:09:56,090 --> 00:10:01,040
‫既然我已经向您展示了如何设置父类, 那么我想请您创建这个组件｡

112
00:10:01,040 --> 00:10:07,040
‫因此, 您要将其命名为触发器组件, 并且您必须从我们创建的其他组件中复制一些内容,

113
00:10:07,040 --> 00:10:10,220
‫因为它的设置方式不同｡

114
00:10:10,220 --> 00:10:15,230
‫因为我们是从不同的父类派生的, 所以你必须复制你的类行｡

115
00:10:15,230 --> 00:10:20,600
‫在创建触发器组件时, 该行基本上是空的｡

116
00:10:20,600 --> 00:10:30,170
‫因此, 从您的抓取器或移动器中复制, 否则您将无法将组件添加到蓝图中｡

117
00:10:30,170 --> 00:10:40,280
‫因此, 您应该使用这个新的触发器组件来替换我们当前的box组件, 并从开始Play中打印一些内容｡

118
00:10:40,280 --> 00:10:45,650
‫同样, 它的big in play不会自动为您设置,

119
00:10:45,650 --> 00:10:50,410
‫因此您必须从我们其他组件的头文件和C++文件中复制, 以便设置它｡

120
00:10:50,420 --> 00:10:52,400
‫暂停视频, 开始体验｡

121
00:10:55,580 --> 00:10:56,060
‫好吧, 我会的

122
00:10:56,060 --> 00:10:57,050
‫欢迎回来｡

123
00:10:57,050 --> 00:10:59,930
‫所以我把它叫做触发器组件｡

124
00:10:59,930 --> 00:11:02,300
‫所有一个字和点击创建类｡

125
00:11:02,300 --> 00:11:10,940
‫正如预测的那样, 类行括号内没有任何内容, 如果我们查看编辑器并转到BP秘密墙,

126
00:11:11,540 --> 00:11:19,340
‫尝试添加此组件并搜索触发器, 您将看到没有任何内容出现｡

127
00:11:19,340 --> 00:11:25,370
‫这样做的原因是, 如果我们继续抓一个点H, 看看它的use class行, 你会看到这里有一个写着bluepire

128
00:11:25,550 --> 00:11:30,350
‫spawn able component的地方.

129
00:11:30,350 --> 00:11:33,140
‫所以至关重要的是, 我们需要复制这个｡

130
00:11:33,140 --> 00:11:34,340
‫它也有一个类组｡

131
00:11:34,340 --> 00:11:40,670
‫我们也可以复制整个组件, 因为这允许我们在蓝图中创建此组件,

132
00:11:40,670 --> 00:11:45,500
‫这样我们就可以将其粘贴为触发器组件的类行｡

133
00:11:45,920 --> 00:11:50,660
‫另一个问题是,

134
00:11:50,660 --> 00:11:57,470
‫如果我们使用grab, 您可以看到它正在运行, 它位于受保护的部分中, 我们可以复制开始play函数的定义,

135
00:11:57,470 --> 00:12:03,590
‫将其复制到触发器组件中, 并将其放置在grabber中, 就在生成的主体下面｡

136
00:12:03,650 --> 00:12:08,480
‫然后, 我们可以开始抓取CP, 看看有多大的参与定义｡

137
00:12:08,480 --> 00:12:12,650
‫在这里, 你可以看到它有这种酷到超级大的发挥, 这实际上是重要的｡

138
00:12:12,650 --> 00:12:15,920
‫所以我们要复制它, 转到触发器组件｡

139
00:12:15,920 --> 00:12:26,180
‫我们将把你抓取一个冒号改为你触发的部件, 开始播放｡

140
00:12:26,810 --> 00:12:34,220
‫在这里, 我们可以放入日志, 我们只需要编写一条简单的消息, 如trigger component

141
00:12:34,220 --> 00:12:38,120
‫alive, 然后继续进行编译｡

142
00:12:38,120 --> 00:12:42,890
‫这可能需要一点时间, 因为我们已经对头文件做了一些相当重要的更改｡

143
00:12:42,890 --> 00:12:49,070
‫一旦完成, 我们就可以进入我们的BP秘密墙, 去添加和搜索触发器｡

144
00:12:49,310 --> 00:12:52,070
‫在这里, 你可以看到我们有触发器组件｡

145
00:12:52,070 --> 00:12:53,690
‫我们现在可以将其添加进去｡

146
00:12:53,690 --> 00:12:59,000
‫我们可以删除之前设置的触发区域｡

147
00:12:59,120 --> 00:13:03,770
‫只要继续删除它, 然后检查我们是否要删除它｡

148
00:13:03,770 --> 00:13:09,200
‫它基本上会使我们创建的这个事件无效, 如果我们要查看,

149
00:13:09,200 --> 00:13:11,930
‫我们可以检查触发器上的冲突是否设置为我们想要的｡

150
00:13:11,930 --> 00:13:15,860
‫然而, 它被设置为重叠所有动态并生成重叠事件｡

151
00:13:15,860 --> 00:13:21,890
‫最后, 我们需要替换的是这里的事件,

152
00:13:21,890 --> 00:13:31,370
‫在这里我们将选择我们的触发器, 右键单击, 然后展开触发器碰撞的添加事件, 并添加组件开始重叠｡

153
00:13:31,370 --> 00:13:33,050
‫我们之前用的就是这个｡

154
00:13:33,170 --> 00:13:41,360
‫钩上活动针和钩上执行针前往地下城的水平｡

155
00:13:41,690 --> 00:13:48,080
‫去把石像鬼捡起来, 试着把它插在壁龛里, 我们发现那不起作用｡

156
00:13:48,080 --> 00:13:50,330
‫现在我们已经把触发器安装好了｡

157
00:13:50,330 --> 00:13:56,360
‫让我们转到视口, 您可以看到, 实际上触发器并不是, 它还没有做得足够大｡

158
00:13:56,360 --> 00:13:57,680
‫我们没有正确地定位它｡

159
00:13:57,680 --> 00:14:06,590
‫因此, 我们将其定位在凹室的中心, 并增加长方体的范围属性,

160
00:14:06,590 --> 00:14:11,810
‫以便捕捉我们在凹室区域内放置的任何内容｡

161
00:14:12,480 --> 00:14:17,810
‫如果它稍微大一点, 给我们一个安全的空间, 我们可以进入地牢, 点击播放,

162
00:14:17,810 --> 00:14:20,180
‫然后进入壁龛｡

163
00:14:20,180 --> 00:14:25,340
‫果然, 它检测到英国石油公司的球员已经走进了那个凹室｡

164
00:14:25,370 --> 00:14:25,940
‫好东西｡

165
00:14:25,940 --> 00:14:34,100
‫在本课中, 我们已经学习了对象类型和对象类型响应的所有知识, 并使用这些知识来设置此触发器组件｡

166
00:14:34,100 --> 00:14:35,930
‫我们下节课再见｡

