﻿1
00:00:04,570 --> 00:00:05,590
‫你好, 欢迎｡

2
00:00:05,590 --> 00:00:10,120
‫在这节课上, 我们会涉及很多很酷的事情, 但最重要的是,

3
00:00:10,120 --> 00:00:14,050
‫我们会看看如何把一个演员的孩子变成另一个演员的孩子.

4
00:00:14,050 --> 00:00:18,700
‫正如你在这里看到的, 步枪是射手角色的孩子,

5
00:00:18,700 --> 00:00:24,460
‫我们如何使它, 使那里的网格, 实际上是连接到这个骨骼网格的手｡

6
00:00:24,460 --> 00:00:28,180
‫如您所见, 枪随着玩家的手移动｡

7
00:00:28,180 --> 00:00:30,070
‫让我们来看看它是如何完成的｡

8
00:00:30,830 --> 00:00:40,460
‫所以在把枪放到这个网格的手中之前, 我们要做的第一件事是, 我们要移除或隐藏目前在那里的枪｡

9
00:00:40,640 --> 00:00:46,910
‫我发现最简单的方法就是把有枪网的骨头藏起来｡

10
00:00:46,910 --> 00:00:47,550
‫我们来看看｡

11
00:00:47,570 --> 00:00:53,900
‫所以如果我们转到射手角色, BP将是一个很好的切入点｡

12
00:00:53,900 --> 00:00:57,010
‫然后我想找到这里的网格｡

13
00:00:57,020 --> 00:00:57,950
‫我们有骨架网｡

14
00:00:57,950 --> 00:01:04,760
‫如果我看这个骨架, 我们可以发现这把枪, 如果我点击枪, 有一根骨头通向它,

15
00:01:04,760 --> 00:01:07,550
‫叫做武器｡

16
00:01:07,550 --> 00:01:11,330
‫骨骼和武器强调了AR｡

17
00:01:11,450 --> 00:01:17,150
‫基本上我们想隐藏它, 但最简单的方法是在代码中隐藏它,

18
00:01:17,150 --> 00:01:20,030
‫我们将用C++来做｡

19
00:01:20,030 --> 00:01:23,510
‫因此, 首先要做的是获取网格组件｡

20
00:01:23,630 --> 00:01:30,380
‫在角色子类上执行此操作的方法是调用以使网格更酷｡

21
00:01:30,380 --> 00:01:31,640
‫所以我们要弄个网｡

22
00:01:31,640 --> 00:01:35,420
‫然后用网格来隐藏骨骼｡

23
00:01:35,420 --> 00:01:46,310
‫有一个方便的按名称隐藏骨骼的方法, 它实际上存在于骨架网格组件的父组件（蒙皮网格组件）上｡

24
00:01:46,310 --> 00:01:48,080
‫让我们简单地看一下头文件｡

25
00:01:48,080 --> 00:01:49,340
‫蒙皮网格组件｡

26
00:01:50,240 --> 00:01:52,190
‫这里有几个函数｡

27
00:01:52,190 --> 00:01:55,370
‫我们要找的人叫“藏骨”

28
00:01:55,370 --> 00:01:57,110
‫所以你可以看到这里的签名｡

29
00:01:57,110 --> 00:01:59,750
‫我们已经得到了骨头的名字进来和f的名字｡

30
00:01:59,750 --> 00:02:02,900
‫第二件事是鱼的身体｡

31
00:02:02,990 --> 00:02:08,660
‫据我所知, 代码库中没有使用它, 但我们必须提供它, 因为它在签名中｡

32
00:02:08,660 --> 00:02:10,460
‫让我们继续使用它｡

33
00:02:10,460 --> 00:02:15,290
‫所以绿箭侠要按名字来做藏骨｡

34
00:02:15,410 --> 00:02:16,910
‫不幸的是, 我的自动完成功能不起作用｡

35
00:02:16,910 --> 00:02:23,480
‫4号机有故障｡  25此刻用V的代码还是要完成并不能100%的想工作｡

36
00:02:23,480 --> 00:02:24,590
‫不过没关系

37
00:02:24,590 --> 00:02:26,810
‫我们可以学着用手动的方式来代替｡

38
00:02:27,380 --> 00:02:33,200
‫然后我们需要骨骼的名称, 我将把它留给你们, 作为练习, 稍后再填写.

39
00:02:33,500 --> 00:02:41,520
‫然后第二件事是我们想要一个身体的东西, 我们只是要去｡

40
00:02:41,660 --> 00:02:45,200
‫这是一个枚举, 所以我们需要填写它｡

41
00:02:45,770 --> 00:02:49,370
‫我将使用F12来查看定义, 看看我们得到了什么｡

42
00:02:49,550 --> 00:02:50,570
‫PBO无｡

43
00:02:50,570 --> 00:02:53,030
‫不要做任何听起来像是明智的默认的事情｡

44
00:02:53,030 --> 00:02:57,560
‫让我们继续这样做, 然后我们将使用分号来结束我们的行｡

45
00:02:57,980 --> 00:03:01,790
‫让我们编译一下看看是否有我们需要的所有包含｡

46
00:03:02,450 --> 00:03:02,810
‫好的, 谢谢

47
00:03:02,810 --> 00:03:07,040
‫看起来它的工作, 所以我们必须有所有的包括我们现在需要的｡

48
00:03:07,070 --> 00:03:14,420
‫让我们来看看你的挑战是把骨头的名字, 给予一个快速的小挑战, 我们回来了, 骨头的名字是武器下划线R,

49
00:03:14,420 --> 00:03:21,350
‫在武器下划线R之前有一点暗示, 应该可以｡

50
00:03:21,350 --> 00:03:29,150
‫如果我们现在重新编译, 点击播放, 你可以看到他不再拿着枪了.

51
00:03:29,150 --> 00:03:29,960
‫好极了｡

52
00:03:29,960 --> 00:03:34,940
‫所以接下来要做的就是在他手里放一把不同的枪, 演员枪｡

53
00:03:34,940 --> 00:03:37,460
‫所以我们得回到我们的骨架｡

54
00:03:37,460 --> 00:03:42,260
‫这里我们要做的是添加一个新的套接字｡

55
00:03:42,260 --> 00:03:46,730
‫所以我们要在武器的位置加上一个插座｡

56
00:03:46,730 --> 00:03:48,110
‫R什么是套接字？

57
00:03:48,650 --> 00:03:53,540
‫一个插座, 因为它听起来像一个插头插座是什么东西, 你可以插入｡

58
00:03:53,570 --> 00:03:56,600
‫这是一个你可以插入其他东西的点｡

59
00:03:56,600 --> 00:04:04,880
‫因此, 您可能希望能够插入, 例如,

60
00:04:04,880 --> 00:04:13,280
‫一把枪, 您希望它不作为一个整体被引导到网格, 而是被引导到该网格的特定骨骼, 这意味着它将与角色的手臂一起正确移动｡

61
00:04:13,280 --> 00:04:17,060
‫当他在做动画的时候, 当他慢跑的时候,

62
00:04:17,060 --> 00:04:22,340
‫它看起来像是附着在他的手上, 而不是在手上的某个地方, 而不是刚性地固定在他的躯干上｡

63
00:04:22,340 --> 00:04:26,690
‫所以我们要给一个武器添加一个子套接字｡

64
00:04:27,050 --> 00:04:27,440
‫来吧

65
00:04:27,440 --> 00:04:35,420
‫你转到骨骼, 右键单击你想连接这个套接字的骨骼, 然后单击添加套接字｡

66
00:04:35,420 --> 00:04:38,780
‫我们就把这个叫做武器｡

67
00:04:39,880 --> 00:04:40,900
‫插座｡

68
00:04:41,530 --> 00:04:46,550
‫我在这里使用骆驼的情况作为我的约定, 这就是我们要附加的｡

69
00:04:46,580 --> 00:04:52,930
‫现在, 你会看到这个在哪里派上用场, 当我们真正为我们的枪做附件的时候｡

70
00:04:53,320 --> 00:05:00,970
‫现在, 这里需要注意的是, 我们不想像在运行时在构造函数中那样设置附件｡

71
00:05:00,970 --> 00:05:06,010
‫当我们进行连接时, 我们必须使用一组不同的函数, 而不是我们在构造函数中使用的函数｡

72
00:05:06,370 --> 00:05:11,830
‫还记得我说过, 这里唯一的层次结构实际上是在场景组件之间｡

73
00:05:11,860 --> 00:05:16,430
‫幸运的是, 我们不必进去拿枪的根部部件, 然后把它装上.

74
00:05:16,450 --> 00:05:24,970
‫参与者上有一个helper方法, 它允许我们执行附加操作, 并且已附加到组件｡

75
00:05:25,150 --> 00:05:27,040
‫让我们看看它的定义｡

76
00:05:27,040 --> 00:05:33,100
‫如果我们查看actor H头文件, 其中有几个,

77
00:05:33,100 --> 00:05:43,150
‫我们需要在游戏框架下的头文件, 我们将在这里搜索attach to component左括号, 找到实际的声明.

78
00:05:43,150 --> 00:05:43,720
‫在这里｡

79
00:05:43,870 --> 00:05:45,610
‫那么, 这将意味着什么呢？

80
00:05:45,610 --> 00:05:50,080
‫它会有一个U｡  S的｡

81
00:05:50,080 --> 00:05:53,110
‫组件, 在本例中是我们要附加到的父组件, 它将是角色的骨架网格｡

82
00:05:53,350 --> 00:05:55,930
‫转换规则将在一秒钟内完成｡

83
00:05:55,930 --> 00:06:00,780
‫然后是套接字名称, 这就是我们应该连接到骨架网格上的什么位置？

84
00:06:00,800 --> 00:06:02,920
‫如果是骨骼网, 它会附着在关节窝上｡

85
00:06:02,920 --> 00:06:09,190
‫例如, 如果它不是骨架网格, 它将忽略套接字参数, 并且仅附加静态网格｡

86
00:06:09,370 --> 00:06:12,010
‫所以我们要附加得到网格｡

87
00:06:12,700 --> 00:06:14,560
‫我们有这些转换规则｡

88
00:06:14,560 --> 00:06:15,160
‫那是什么？

89
00:06:15,160 --> 00:06:20,430
‫让我们依次单击F12, 以查看其可用的不同规则｡

90
00:06:20,440 --> 00:06:22,360
‫这些都是预设的规则｡

91
00:06:22,360 --> 00:06:26,260
‫您可以定义自己的, 但也可以使用这些预设的｡

92
00:06:26,260 --> 00:06:31,450
‫我们已经得到了保持相对变换, 保持世界变换捕捉到目标, 不包括缩放将忽略这些｡

93
00:06:31,450 --> 00:06:37,120
‫最后, 要注意的两个主要问题是前两个,

94
00:06:37,120 --> 00:06:46,000
‫这基本上意味着, 当我们连接时, 它应该保持在世界上的同一个位置, 还是应该使用世界位置作为我们的例子中的新的局部位置？

95
00:06:46,000 --> 00:06:52,540
‫因为我们希望那把枪基本上在0, 0, 0, 这就是它在世界上的位置｡

96
00:06:52,540 --> 00:06:55,510
‫我们要保持相对变换, 就这样做吧｡

97
00:06:55,510 --> 00:06:58,840
‫我们要让F变换规则保持相对变换｡

98
00:07:00,840 --> 00:07:06,480
‫所以我已经转换了房间规则, 冒号, 冒号, 然后应该是, 让我看看, 复制过来,

99
00:07:06,480 --> 00:07:10,950
‫保持相对转换, 就像这样, 然后我们要套接字｡

100
00:07:10,950 --> 00:07:16,260
‫所以在这里再次输入文本宏, 然后输入套接字名称, 也就是武器套接字.

101
00:07:17,840 --> 00:07:19,490
‫然后结束这条线｡

102
00:07:19,490 --> 00:07:21,870
‫这将建立附件｡

103
00:07:21,890 --> 00:07:26,990
‫现在最后一点是我们要设置的｡

104
00:07:27,660 --> 00:07:31,990
‫这把枪要有这个阶级作为它的主人｡

105
00:07:32,010 --> 00:07:33,730
‫这是一个有点微妙的观点｡

106
00:07:33,750 --> 00:07:34,940
‫为什么我们有主人？

107
00:07:34,950 --> 00:07:38,230
‫我只是说演员之间没有任何等级｡

108
00:07:38,250 --> 00:07:42,360
‫嗯, 在转换的意义上没有, 但他们确实有所有权｡

109
00:07:42,360 --> 00:07:48,060
‫而这种所有权真正发挥作用的地方是在多人游戏和伤害｡

110
00:07:48,060 --> 00:07:52,260
‫因此, 我们将在后面看到我们将如何需要了解所有者｡

111
00:07:52,290 --> 00:08:02,010
‫它还允许枪知道什么是拥有角色, 并且它可以在以后使用它来获取对拥有角色的引用｡

112
00:08:02,040 --> 00:08:03,070
‫这将是有用的｡

113
00:08:03,090 --> 00:08:08,100
‫目前我们并不特别关心, 但我们只是为了完整性而这样做｡

114
00:08:08,340 --> 00:08:09,400
‫现在居然把这个名字搞错了｡

115
00:08:09,420 --> 00:08:15,270
‫不应设置owner, 而应将owner设置为this, 因为参与者是枪支的所有者｡

116
00:08:15,960 --> 00:08:16,640
‫酷豆｡

117
00:08:16,680 --> 00:08:19,680
‫让我们编译一下, 看看它是否正常工作｡

118
00:08:20,430 --> 00:08:21,700
‫编译成功｡

119
00:08:21,700 --> 00:08:24,330
‫让我们开始玩这个游戏吧｡

120
00:08:24,340 --> 00:08:25,000
‫太棒了｡

121
00:08:25,000 --> 00:08:26,990
‫我们手里有武器｡

122
00:08:27,010 --> 00:08:28,080
‫放在正确的地方吗？

123
00:08:28,090 --> 00:08:28,930
‫我们来看看｡

124
00:08:28,930 --> 00:08:32,680
‫让我们离开这里, 看看这只手｡

125
00:08:32,710 --> 00:08:33,640
‫不完全是｡

126
00:08:33,640 --> 00:08:36,250
‫你可以看到我们可以做一些调整｡

127
00:08:36,250 --> 00:08:37,480
‫这就是我们要做的｡

128
00:08:37,480 --> 00:08:39,400
‫这对你来说是个挑战｡

129
00:08:39,400 --> 00:08:46,360
‫基本上, 你要做的就是找到网格上的偏移量,

130
00:08:46,360 --> 00:08:52,520
‫这样这个手柄实际上就在我们的网格幽灵角色的手中｡

131
00:08:52,540 --> 00:08:54,520
‫暂停视频, 尝试一下｡

132
00:08:54,820 --> 00:08:55,060
‫好吧, 我会的

133
00:08:55,060 --> 00:08:55,540
‫欢迎回来｡

134
00:08:55,540 --> 00:09:00,550
‫我将通过选择网格并尝试移动它来完成此操作｡

135
00:09:00,550 --> 00:09:06,820
‫我必须将视口中的栅格捕捉大小设置得稍微小一些｡

136
00:09:06,820 --> 00:09:12,100
‫我会尽量放大这手牌｡

137
00:09:13,340 --> 00:09:13,640
‫好吧, 我会的

138
00:09:13,640 --> 00:09:15,290
‫把它放低一点｡

139
00:09:15,320 --> 00:09:16,550
‫我觉得这很好｡

140
00:09:16,550 --> 00:09:17,090
‫呼｡

141
00:09:17,120 --> 00:09:21,620
‫现在, 让我们继续复制位置并打开｡

142
00:09:21,620 --> 00:09:24,710
‫进入内容浏览器, 打开BP步枪｡

143
00:09:25,100 --> 00:09:34,370
‫打开完整的蓝图编辑器, 转到网格, 停止模拟并粘贴我们复制的位置｡

144
00:09:34,730 --> 00:09:35,210
‫好吧, 酷｡

145
00:09:35,210 --> 00:09:36,200
‫收到收到

146
00:09:36,200 --> 00:09:39,110
‫我们去玩吧｡

147
00:09:40,050 --> 00:09:43,170
‫让我们看看它是否真的带来了正确的东西｡

148
00:09:43,290 --> 00:09:46,490
‫淡出并放大｡

149
00:09:46,500 --> 00:09:51,660
‫顺便说一句, 你可以用滚轮来减慢你的移动速度, 当你以这种方式移动的时候｡

150
00:09:51,810 --> 00:09:52,530
‫好极了｡

151
00:09:52,530 --> 00:09:56,910
‫看起来他的手已经直接抓住了把手｡

152
00:09:57,640 --> 00:09:58,180
‫很棒的东西｡

153
00:09:58,180 --> 00:10:08,830
‫因此, 我们已经了解了如何将子演员添加到其他演员, 以及如何将场景组件附加到骨骼网格的套接字｡

154
00:10:08,830 --> 00:10:14,830
‫在下一节课中, 我们将学习射击,

155
00:10:15,100 --> 00:10:18,250
‫以及这把枪的架构是如何与射击架构相吻合的.

156
00:10:18,250 --> 00:10:19,570
‫我们在那见｡

