﻿1
00:00:04,190 --> 00:00:04,640
‫嘿, 你好

2
00:00:04,640 --> 00:00:05,730
‫欢迎回来｡

3
00:00:05,750 --> 00:00:08,240
‫我们要把变量暴露给蓝图｡

4
00:00:08,240 --> 00:00:12,110
‫现在我们要讨论公开我们的组件｡

5
00:00:12,290 --> 00:00:18,350
‫这将允许我们设置一些属性, 如静态网格组件上的网格,

6
00:00:18,350 --> 00:00:22,160
‫以及定位胶囊和抛射体的产卵点｡

7
00:00:22,190 --> 00:00:26,630
‫现在我们回到了VS代码中, 我们有了所有的测试变量｡

8
00:00:26,630 --> 00:00:36,990
‫在我们开始公开私有组件变量之前, 我们还需要了解一些特定于属性的内容｡

9
00:00:37,010 --> 00:00:43,880
‫首先, 我们所有的测试变量都在公共部分,

10
00:00:43,880 --> 00:00:51,750
‫这里有几个变量公开给事件图, 允许读取访问和权限访问, 而这些变量在私有部分是不允许的｡

11
00:00:51,770 --> 00:00:58,730
‫例如, 如果我把visible anywhere int和edit anywhere

12
00:00:58,730 --> 00:01:01,800
‫int剪切下来, 然后把它们和我们的组件沿着粘贴到private部分｡

13
00:01:01,820 --> 00:01:05,090
‫下面是当我们试图在这里编译时会发生的情况｡

14
00:01:05,090 --> 00:01:08,000
‫我们在终端中看到了几个错误｡

15
00:01:08,000 --> 00:01:15,590
‫我们看到蓝图, 读, 写不应该用于私人成员, 它说的是同样的事情蓝图只读｡

16
00:01:15,740 --> 00:01:20,720
‫那么, 如果我们希望在事件图中对私有成员进行读写访问, 该怎么办呢？

17
00:01:20,720 --> 00:01:22,540
‫有个办法可以解决这个问题｡

18
00:01:22,550 --> 00:01:26,450
‫我们仍然可以访问事件图中的私有变量｡

19
00:01:26,450 --> 00:01:28,930
‫我们必须为美国再增加一项投入｡

20
00:01:28,940 --> 00:01:31,490
‫属性宏, 输入如下所示｡

21
00:01:31,490 --> 00:01:41,390
‫我们说梅塔等号括号允许私有访问等号和引号中的true｡

22
00:01:41,420 --> 00:01:43,010
‫这看起来很奇怪｡

23
00:01:43,010 --> 00:01:46,580
‫这是一个语法噩梦, 但这就是它的样子｡

24
00:01:46,580 --> 00:01:55,510
‫您的属性宏允许使用元数据, 而元数据只是数据的一个花哨的词, 它提供了有关其他数据的信息｡

25
00:01:55,520 --> 00:02:03,170
‫所以我们有了这个梅塔equals, 如果我们使用allow private access equals true,

26
00:02:03,170 --> 00:02:06,200
‫那么我们可以把这些变量公开给事件图, 即使它们是私有的｡

27
00:02:06,230 --> 00:02:12,020
‫现在, 如果你是一个固执的人, 你认为对变量进行私有访问不是一个好主意, 那么,

28
00:02:12,020 --> 00:02:13,610
‫你不必这样做｡

29
00:02:13,610 --> 00:02:19,400
‫这只是工具箱中的另一个工具, 它允许我们将私有变量公开给蓝图｡

30
00:02:19,400 --> 00:02:22,790
‫而在C++端, 这些仍然是私有的｡

31
00:02:22,790 --> 00:02:25,610
‫您仍然无法从其他类访问这些内容｡

32
00:02:25,610 --> 00:02:28,610
‫因此, C++端有封装｡

33
00:02:28,640 --> 00:02:33,230
‫这只是让您能够在蓝图中获得这些并对其进行更改｡

34
00:02:33,230 --> 00:02:36,320
‫在蓝图中, 这是一个不同的世界｡

35
00:02:36,320 --> 00:02:42,590
‫通常情况下, 你不会把东西暴露在蓝图下, 因为有人可能会进入并改变蓝图, 从而可能破坏游戏｡

36
00:02:42,590 --> 00:02:44,570
‫但知道如何做到这一点是有用的｡

37
00:02:44,570 --> 00:02:52,850
‫所以我们要给予这个梅塔, 允许私有访问visible anywhere, int和edit anywhere｡

38
00:02:52,850 --> 00:02:55,010
‫让我们来编译这个｡

39
00:02:55,070 --> 00:03:03,730
‫现在我们看到, 即使我们在私有部分的变量上有蓝图重写和蓝图只读, 我们也有一个成功的编译｡

40
00:03:03,740 --> 00:03:10,130
‫现在回到事件图中的BP Pond Tank, 我可以右键单击并在任意位置输入edit, 在这里我们可以看到get

41
00:03:10,130 --> 00:03:17,150
‫edit anywhere int, 我们仍然可以访问它, 如果我搜索visible, 我可以看到visible anywhere

42
00:03:17,150 --> 00:03:20,000
‫int, 我们可以获取并设置它｡

43
00:03:20,000 --> 00:03:26,780
‫现在, 我将向您展示的最后一件可以添加到属性中的东西是“详细信息”面板中的类别通知｡

44
00:03:26,780 --> 00:03:33,860
‫我们添加的这些变量都属于这个类别, 因为这是类的名称, 默认情况下, 这是它们的位置｡

45
00:03:33,860 --> 00:03:40,730
‫但是注意, 我们也有其他的变量被这个类继承, 它们都在自己的类别中｡

46
00:03:40,730 --> 00:03:48,890
‫现在我们可以为这些公开的变量创建自己的类别, 我们通过添加category equals来实现这一点｡

47
00:03:48,890 --> 00:03:52,100
‫在引号里我们可以给予它一个分类｡

48
00:03:52,100 --> 00:03:55,880
‫所以我可以称之为超级变量｡

49
00:03:55,880 --> 00:04:00,050
‫现在我在这里加一个逗号, 因为我把它放在了U中｡

50
00:04:00,050 --> 00:04:05,180
‫属性宏作为输入之一, 并且所有的输入都必须用逗号分隔｡

51
00:04:05,180 --> 00:04:11,390
‫我将复制它并将其添加到U属性中, 以便在任意位置编辑int｡

52
00:04:11,390 --> 00:04:15,350
‫所以现在这些变量应该属于自己的范畴, 叫做超级欺骗变量｡

53
00:04:15,350 --> 00:04:19,130
‫让我们编译并返回到编辑器中, 看看这个｡

54
00:04:19,130 --> 00:04:25,760
‫我们有super duper变量, 我们的变量在这里, 我可以在事件图中右键单击,

55
00:04:25,760 --> 00:04:27,800
‫搜索super并查看它｡

56
00:04:27,800 --> 00:04:30,980
‫我们有超级的变量, 我们的变量在这里｡

57
00:04:30,980 --> 00:04:36,320
‫这是一个很好的方法来组织我们的变量, 让它们更容易找到｡

58
00:04:36,320 --> 00:04:40,100
‫所以我在这里的表中添加了一些新内容｡

59
00:04:40,100 --> 00:04:47,780
‫我们可以给予私有访问, 我们可以使用私有变量, 并且仍然使用这个梅塔说明符将它们暴露给事件图｡

60
00:04:47,780 --> 00:04:53,180
‫我们也可以给予变量一个自己的分类, 以便在蓝图中组织它们｡

61
00:04:53,300 --> 00:04:59,330
‫现在, 您已经知道了很多控制Blueprint中变量访问的方法, 接下来,

62
00:04:59,330 --> 00:05:03,710
‫您将填写组件的you属性｡

63
00:05:03,770 --> 00:05:05,090
‫他们的访问级别｡

64
00:05:05,090 --> 00:05:12,380
‫您将希望这些组件在任何位置都可见, 因为您不希望在任何位置编辑组件｡

65
00:05:12,410 --> 00:05:17,090
‫这意味着你可以编辑指针变量, 我们不想改变指针.

66
00:05:17,120 --> 00:05:19,130
‫它应始终指向对象｡

67
00:05:19,130 --> 00:05:24,680
‫我们在构造函数中构造它, 但你也可以决定是否在事件图中给予它们读, 写权限,

68
00:05:24,680 --> 00:05:28,310
‫给它们一个类别｡

69
00:05:28,340 --> 00:05:31,370
‫这将使我们保持我们的变量组织｡

70
00:05:31,400 --> 00:05:35,160
‫现在, 如果您要为他们给予蓝图, 请选择“读取”､ “写入”或“蓝图只读”｡

71
00:05:35,180 --> 00:05:41,150
‫您需要允许对指定的梅塔进行私有访问, 因为这些是私有变量｡

72
00:05:41,180 --> 00:05:47,310
‫现在, 将组件公开到蓝图之后, 就可以在默认蓝图中设置一些属性｡

73
00:05:47,330 --> 00:05:51,200
‫您可以为静态网格组件提供其自己的静态网格｡

74
00:05:51,200 --> 00:05:57,560
‫在坦克和炮塔蓝图上都设置好, 然后定位太空舱.

75
00:05:57,560 --> 00:06:04,100
‫所以它大致包含了网格的体积, 并定位了抛射体的产生点,

76
00:06:04,100 --> 00:06:08,120
‫将其放置在一个对抛射体产生有意义的点上｡

77
00:06:08,150 --> 00:06:11,990
‫因此, 暂停视频, 将组件展示给蓝图｡

78
00:06:15,010 --> 00:06:15,550
‫好吧, 我会的

79
00:06:15,550 --> 00:06:20,200
‫现在我们来到了私有部分, 我们要公开这些组件｡

80
00:06:20,230 --> 00:06:26,590
‫现在, 首先, 我将给予capsule组件在任何位置可见,

81
00:06:26,590 --> 00:06:34,630
‫并且我将决定使此蓝图为只读, 以便我可以访问事件图中的capsule comp变量, 但无法对其进行设置｡

82
00:06:34,660 --> 00:06:40,120
‫现在, 我将为这些组件指定类别, 对于这里的组件, 我将为它们指定类别组件,

83
00:06:40,120 --> 00:06:45,910
‫因为我使用的是只读蓝本, 我将使用梅塔allow private access equals

84
00:06:45,910 --> 00:06:47,470
‫true｡

85
00:06:47,500 --> 00:06:49,720
‫所以我把它放在这里｡

86
00:06:49,720 --> 00:06:59,110
‫对于我的其他组件, 我很满意这些相同的you属性说明符, 所以我将给予它们所有相同的说明符｡

87
00:06:59,110 --> 00:07:04,510
‫现在我将编译它, 然后回到编辑器中, 单击视口,

88
00:07:04,510 --> 00:07:08,980
‫这样我就可以看到我在这里做什么, 并可以选择基础网格｡

89
00:07:08,980 --> 00:07:16,300
‫对于静态网格属性, 由于我们在坦克蓝图中, 我将选择坦克基地｡

90
00:07:16,450 --> 00:07:18,880
‫那是坦克的底部｡

91
00:07:18,910 --> 00:07:24,610
‫现在我可以选择炮塔网格, 对于它的静态网格, 我将选择坦克炮塔｡

92
00:07:24,610 --> 00:07:28,860
‫现在我们的坦克蓝图看起来真的像坦克｡

93
00:07:28,870 --> 00:07:34,180
‫现在在我设置投射物的产生点之前, 我想调整一下胶囊组件｡

94
00:07:34,180 --> 00:07:37,510
‫所以它大致包含了网格的体积｡

95
00:07:37,510 --> 00:07:43,660
‫现在, 选定胶囊组件后, 我们具有胶囊半高和胶囊半径这些属性｡

96
00:07:43,750 --> 00:07:50,830
‫我将缩放半径和胶囊的半高, 这样看起来就像是正确的形状｡

97
00:07:51,010 --> 00:07:58,960
‫我需要把我的坦克定位在底部因为我们的胶囊组件是根组件.

98
00:07:58,960 --> 00:08:05,650
‫我们必须相对于根移动所有其他组件, 这样我就可以选择基础网格并将其向下移动｡

99
00:08:05,650 --> 00:08:14,920
‫为了让它看起来恰到好处, 我可以这样调整视角, 或者我可以走到上面写着透视的地方, 然后选择, 对吗？

100
00:08:14,920 --> 00:08:17,350
‫我现在处于正交模式｡

101
00:08:17,350 --> 00:08:21,640
‫这地方的一切都在一个平面上, 所以我可以移动的东西, 并得到他们｡

102
00:08:21,640 --> 00:08:29,050
‫现在我将关闭捕捉功能, 以便更精确地定位, 我认为这看起来很不错｡

103
00:08:29,140 --> 00:08:34,210
‫现在, 我将返回透视模式,

104
00:08:34,210 --> 00:08:39,730
‫这样我就可以看到这一点, 并确保一切看起来都很好, 我将选择我的胶囊组件, 并确保比例刚刚好｡

105
00:08:39,730 --> 00:08:45,430
‫现在, 这可能需要一点调整才能正确, 但通过一些调整, 你可以让它看起来相当不错｡

106
00:08:45,430 --> 00:08:47,200
‫所以我很满意｡

107
00:08:47,200 --> 00:08:50,830
‫接下来, 我想定位投射物的产卵点｡

108
00:08:51,040 --> 00:08:57,190
‫我将重新打开捕捉功能, 并将其移到桶的前面｡

109
00:08:57,190 --> 00:08:58,960
‫所以这看起来不错｡

110
00:08:59,110 --> 00:09:04,270
‫现在, 我将继续并保存此操作, 现在是设置BP池炮塔的时候了｡

111
00:09:04,660 --> 00:09:08,950
‫在BP池塘炮塔中, 我将设置基础网格｡

112
00:09:08,950 --> 00:09:15,730
‫让我们选择塔底, 然后将炮塔网格设置为塔炮塔｡

113
00:09:16,450 --> 00:09:17,410
‫我们走吧｡

114
00:09:17,410 --> 00:09:25,510
‫现在我将放大胶囊组件, 向下移动基础网格, 然后调整它, 直到我得到正确的结果｡

115
00:09:25,510 --> 00:09:33,910
‫同样, 我可以进入正交视图并关闭捕捉, 使其大致定位到我想要的位置,

116
00:09:33,910 --> 00:09:37,360
‫然后返回透视图｡

117
00:09:37,540 --> 00:09:39,130
‫我觉得这看起来不错｡

118
00:09:39,130 --> 00:09:41,890
‫现在, 最后一件事是抛射物的产卵点｡

119
00:09:41,890 --> 00:09:48,640
‫我将重新打开捕捉并将其定位在桶的正前方, 我将捕捉增量设置为5,

120
00:09:48,640 --> 00:09:53,080
‫这样我就可以将其定位在桶的正前方｡

121
00:09:53,080 --> 00:09:57,520
‫现在, 请确保投射物产卵点不太接近枪管｡

122
00:09:57,700 --> 00:10:00,970
‫我们将从这一点产卵抛射物｡

123
00:10:00,970 --> 00:10:06,460
‫一些学生被绊倒的原因是他们的产卵点离枪管太近, 在那里会发生碰撞,

124
00:10:06,460 --> 00:10:11,680
‫这会导致产卵时的复杂性｡

125
00:10:11,680 --> 00:10:18,190
‫现在, 这个问题可以很容易地解决, 确保产卵点是一个很好的距离, 从桶｡

126
00:10:18,190 --> 00:10:21,880
‫我们会在这节课的最后再做总结.

127
00:10:22,270 --> 00:10:25,990
‫好吧, 我最后要做的就是在这个世界上放几个这样的东西｡

128
00:10:25,990 --> 00:10:28,900
‫我这里已经有一个BP水池了｡

129
00:10:28,930 --> 00:10:31,060
‫我要把它放在地上｡

130
00:10:31,240 --> 00:10:35,980
‫让我们拖动几个BP池塘炮塔的实例｡

131
00:10:36,160 --> 00:10:42,700
‫我将在这里放置一个, 并旋转它, 使其面向外, 然后我将继续,

132
00:10:42,700 --> 00:10:44,890
‫在每个角落放置一个｡

133
00:10:45,630 --> 00:10:48,420
‫这样他们就能守卫这个中心建筑｡

134
00:10:48,870 --> 00:10:52,920
‫这看起来更像是成品｡

135
00:10:53,880 --> 00:10:54,960
‫我们走吧｡

136
00:10:55,170 --> 00:11:01,680
‫当然, 如果我愿意的话, 我可以从顶部和顶部正交模式下查看｡

137
00:11:01,680 --> 00:11:04,890
‫我可以更精确地定位这些｡

138
00:11:04,890 --> 00:11:08,430
‫但当然, 这在一场精心打磨的比赛中就不那么重要了｡

139
00:11:08,430 --> 00:11:10,740
‫你会希望一切看起来都很好｡

140
00:11:10,890 --> 00:11:13,170
‫好了, 回到透视模式｡

141
00:11:13,200 --> 00:11:15,720
‫这看起来很棒｡

142
00:11:15,720 --> 00:11:22,830
‫回到我们的分区计划, 我们已经创建了我们的坦克, 我们的目标是让它在世界各地移动｡

143
00:11:22,830 --> 00:11:25,980
‫在接下来的课上, 我们会开始学习如何去做｡

144
00:11:25,980 --> 00:11:34,840
‫所以在这节课上, 我们已经把组件展示给了蓝图, 我们已经在蓝图中为坦克和炮塔设置了一些属性｡

145
00:11:34,860 --> 00:11:36,180
‫进展非常好｡

146
00:11:36,210 --> 00:11:37,500
‫下一个视频里见｡

