‫嘿, 你好
‫欢迎回来｡
‫我们要把变量暴露给蓝图｡
‫现在我们要讨论公开我们的组件｡
‫这将允许我们设置一些属性, 如静态网格组件上的网格,
‫以及定位胶囊和抛射体的产卵点｡
‫现在我们回到了VS代码中, 我们有了所有的测试变量｡
‫在我们开始公开私有组件变量之前, 我们还需要了解一些特定于属性的内容｡
‫首先, 我们所有的测试变量都在公共部分,
‫这里有几个变量公开给事件图, 允许读取访问和权限访问, 而这些变量在私有部分是不允许的｡
‫例如, 如果我把visible anywhere int和edit anywhere
‫int剪切下来, 然后把它们和我们的组件沿着粘贴到private部分｡
‫下面是当我们试图在这里编译时会发生的情况｡
‫我们在终端中看到了几个错误｡
‫我们看到蓝图, 读, 写不应该用于私人成员, 它说的是同样的事情蓝图只读｡
‫那么, 如果我们希望在事件图中对私有成员进行读写访问, 该怎么办呢？
‫有个办法可以解决这个问题｡
‫我们仍然可以访问事件图中的私有变量｡
‫我们必须为美国再增加一项投入｡
‫属性宏, 输入如下所示｡
‫我们说梅塔等号括号允许私有访问等号和引号中的true｡
‫这看起来很奇怪｡
‫这是一个语法噩梦, 但这就是它的样子｡
‫您的属性宏允许使用元数据, 而元数据只是数据的一个花哨的词, 它提供了有关其他数据的信息｡
‫所以我们有了这个梅塔equals, 如果我们使用allow private access equals true,
‫那么我们可以把这些变量公开给事件图, 即使它们是私有的｡
‫现在, 如果你是一个固执的人, 你认为对变量进行私有访问不是一个好主意, 那么,
‫你不必这样做｡
‫这只是工具箱中的另一个工具, 它允许我们将私有变量公开给蓝图｡
‫而在C++端, 这些仍然是私有的｡
‫您仍然无法从其他类访问这些内容｡
‫因此, C++端有封装｡
‫这只是让您能够在蓝图中获得这些并对其进行更改｡
‫在蓝图中, 这是一个不同的世界｡
‫通常情况下, 你不会把东西暴露在蓝图下, 因为有人可能会进入并改变蓝图, 从而可能破坏游戏｡
‫但知道如何做到这一点是有用的｡
‫所以我们要给予这个梅塔, 允许私有访问visible anywhere, int和edit anywhere｡
‫让我们来编译这个｡
‫现在我们看到, 即使我们在私有部分的变量上有蓝图重写和蓝图只读, 我们也有一个成功的编译｡
‫现在回到事件图中的BP Pond Tank, 我可以右键单击并在任意位置输入edit, 在这里我们可以看到get
‫edit anywhere int, 我们仍然可以访问它, 如果我搜索visible, 我可以看到visible anywhere
‫int, 我们可以获取并设置它｡
‫现在, 我将向您展示的最后一件可以添加到属性中的东西是“详细信息”面板中的类别通知｡
‫我们添加的这些变量都属于这个类别, 因为这是类的名称, 默认情况下, 这是它们的位置｡
‫但是注意, 我们也有其他的变量被这个类继承, 它们都在自己的类别中｡
‫现在我们可以为这些公开的变量创建自己的类别, 我们通过添加category equals来实现这一点｡
‫在引号里我们可以给予它一个分类｡
‫所以我可以称之为超级变量｡
‫现在我在这里加一个逗号, 因为我把它放在了U中｡
‫属性宏作为输入之一, 并且所有的输入都必须用逗号分隔｡
‫我将复制它并将其添加到U属性中, 以便在任意位置编辑int｡
‫所以现在这些变量应该属于自己的范畴, 叫做超级欺骗变量｡
‫让我们编译并返回到编辑器中, 看看这个｡
‫我们有super duper变量, 我们的变量在这里, 我可以在事件图中右键单击,
‫搜索super并查看它｡
‫我们有超级的变量, 我们的变量在这里｡
‫这是一个很好的方法来组织我们的变量, 让它们更容易找到｡
‫所以我在这里的表中添加了一些新内容｡
‫我们可以给予私有访问, 我们可以使用私有变量, 并且仍然使用这个梅塔说明符将它们暴露给事件图｡
‫我们也可以给予变量一个自己的分类, 以便在蓝图中组织它们｡
‫现在, 您已经知道了很多控制Blueprint中变量访问的方法, 接下来,
‫您将填写组件的you属性｡
‫他们的访问级别｡
‫您将希望这些组件在任何位置都可见, 因为您不希望在任何位置编辑组件｡
‫这意味着你可以编辑指针变量, 我们不想改变指针.
‫它应始终指向对象｡
‫我们在构造函数中构造它, 但你也可以决定是否在事件图中给予它们读, 写权限,
‫给它们一个类别｡
‫这将使我们保持我们的变量组织｡
‫现在, 如果您要为他们给予蓝图, 请选择“读取”､ “写入”或“蓝图只读”｡
‫您需要允许对指定的梅塔进行私有访问, 因为这些是私有变量｡
‫现在, 将组件公开到蓝图之后, 就可以在默认蓝图中设置一些属性｡
‫您可以为静态网格组件提供其自己的静态网格｡
‫在坦克和炮塔蓝图上都设置好, 然后定位太空舱.
‫所以它大致包含了网格的体积, 并定位了抛射体的产生点,
‫将其放置在一个对抛射体产生有意义的点上｡
‫因此, 暂停视频, 将组件展示给蓝图｡
‫好吧, 我会的
‫现在我们来到了私有部分, 我们要公开这些组件｡
‫现在, 首先, 我将给予capsule组件在任何位置可见,
‫并且我将决定使此蓝图为只读, 以便我可以访问事件图中的capsule comp变量, 但无法对其进行设置｡
‫现在, 我将为这些组件指定类别, 对于这里的组件, 我将为它们指定类别组件,
‫因为我使用的是只读蓝本, 我将使用梅塔allow private access equals
‫true｡
‫所以我把它放在这里｡
‫对于我的其他组件, 我很满意这些相同的you属性说明符, 所以我将给予它们所有相同的说明符｡
‫现在我将编译它, 然后回到编辑器中, 单击视口,
‫这样我就可以看到我在这里做什么, 并可以选择基础网格｡
‫对于静态网格属性, 由于我们在坦克蓝图中, 我将选择坦克基地｡
‫那是坦克的底部｡
‫现在我可以选择炮塔网格, 对于它的静态网格, 我将选择坦克炮塔｡
‫现在我们的坦克蓝图看起来真的像坦克｡
‫现在在我设置投射物的产生点之前, 我想调整一下胶囊组件｡
‫所以它大致包含了网格的体积｡
‫现在, 选定胶囊组件后, 我们具有胶囊半高和胶囊半径这些属性｡
‫我将缩放半径和胶囊的半高, 这样看起来就像是正确的形状｡
‫我需要把我的坦克定位在底部因为我们的胶囊组件是根组件.
‫我们必须相对于根移动所有其他组件, 这样我就可以选择基础网格并将其向下移动｡
‫为了让它看起来恰到好处, 我可以这样调整视角, 或者我可以走到上面写着透视的地方, 然后选择, 对吗？
‫我现在处于正交模式｡
‫这地方的一切都在一个平面上, 所以我可以移动的东西, 并得到他们｡
‫现在我将关闭捕捉功能, 以便更精确地定位, 我认为这看起来很不错｡
‫现在, 我将返回透视模式,
‫这样我就可以看到这一点, 并确保一切看起来都很好, 我将选择我的胶囊组件, 并确保比例刚刚好｡
‫现在, 这可能需要一点调整才能正确, 但通过一些调整, 你可以让它看起来相当不错｡
‫所以我很满意｡
‫接下来, 我想定位投射物的产卵点｡
‫我将重新打开捕捉功能, 并将其移到桶的前面｡
‫所以这看起来不错｡
‫现在, 我将继续并保存此操作, 现在是设置BP池炮塔的时候了｡
‫在BP池塘炮塔中, 我将设置基础网格｡
‫让我们选择塔底, 然后将炮塔网格设置为塔炮塔｡
‫我们走吧｡
‫现在我将放大胶囊组件, 向下移动基础网格, 然后调整它, 直到我得到正确的结果｡
‫同样, 我可以进入正交视图并关闭捕捉, 使其大致定位到我想要的位置,
‫然后返回透视图｡
‫我觉得这看起来不错｡
‫现在, 最后一件事是抛射物的产卵点｡
‫我将重新打开捕捉并将其定位在桶的正前方, 我将捕捉增量设置为5,
‫这样我就可以将其定位在桶的正前方｡
‫现在, 请确保投射物产卵点不太接近枪管｡
‫我们将从这一点产卵抛射物｡
‫一些学生被绊倒的原因是他们的产卵点离枪管太近, 在那里会发生碰撞,
‫这会导致产卵时的复杂性｡
‫现在, 这个问题可以很容易地解决, 确保产卵点是一个很好的距离, 从桶｡
‫我们会在这节课的最后再做总结.
‫好吧, 我最后要做的就是在这个世界上放几个这样的东西｡
‫我这里已经有一个BP水池了｡
‫我要把它放在地上｡
‫让我们拖动几个BP池塘炮塔的实例｡
‫我将在这里放置一个, 并旋转它, 使其面向外, 然后我将继续,
‫在每个角落放置一个｡
‫这样他们就能守卫这个中心建筑｡
‫这看起来更像是成品｡
‫我们走吧｡
‫当然, 如果我愿意的话, 我可以从顶部和顶部正交模式下查看｡
‫我可以更精确地定位这些｡
‫但当然, 这在一场精心打磨的比赛中就不那么重要了｡
‫你会希望一切看起来都很好｡
‫好了, 回到透视模式｡
‫这看起来很棒｡
‫回到我们的分区计划, 我们已经创建了我们的坦克, 我们的目标是让它在世界各地移动｡
‫在接下来的课上, 我们会开始学习如何去做｡
‫所以在这节课上, 我们已经把组件展示给了蓝图, 我们已经在蓝图中为坦克和炮塔设置了一些属性｡
‫进展非常好｡
‫下一个视频里见｡