‫欢迎回来
‫在上一个视频中, 我们学习了一些新的属性说明符,
‫这些说明符允许我们以某些方式将C++变量公开到蓝图中的详细信息面板｡
‫在本视频中, 我们将学习更多的说明符, 这些说明符使我们能够更好地控制对这些变量的访问｡
‫在详细信息面板中, 我们还将讨论如何在实际事件图中允许对特定C++变量进行读或写访问｡
‫所以让我们开始吧｡
‫好吧, 我会的
‫我回到了VS代码中, 这是我们在上一个视频中创建的变量｡
‫这是我的速度变量
‫这是为了挑战｡
‫您可能创建了一个不同的变量, 这是完全可以的, 所以请将该变量保留在那里｡
‫在这段视频中我们将用它做更多的事情｡
‫现在, 我们已经了解到, 我们可以使变量在任何地方可见, 当我们说任何地方时,
‫我们指的是在细节面板上, 在实例上或在默认蓝图上｡
‫我们还可以让它在任何地方编辑, 当我们使用visible instance only时, 它只在一个实例上可见｡
‫您甚至无法在默认蓝图上看到它, 而且在任何情况下, 您都无法编辑它, 因为它是灰色的｡
‫因此, 这允许我们使变量仅在实例上可见｡
‫但是如果我们希望它只在默认蓝图中可见, 该怎么办？
‫好吧, 这也有一个说明符｡
‫让我们在32中再做一个, 我们称之为visible defaults only int｡
‫我们可以将它初始化为一个值｡
‫我给予它5, 我们也给它一个U属性｡
‫和specify用于使其仅在默认值上可见｡
‫你大概能猜到是什么｡
‫它仅在默认情况下可见｡
‫我将编译这个, 然后回到编辑器中, 再次打开BP Pond Tank.
‫BP Pond Tank是自选的, 所有变量都在顶部, 所以我不打算搜索它｡
‫但是这里是我们的可见的默认值, int, 它的值是5, 当然它现在是灰色的, 顾名思义,
‫它只在默认值下可见｡
‫如果我在这个世界上选择一个BP池的实例, 没有可见的默认值, 只有int, 它在实例上是不可见的,
‫只有在默认值上｡
‫所以现在说得通了｡
‫让我们回到VS代码, 我们还有一些说明符需要学习｡
‫现在, 我们已经看到, 我们可以在任何地方编辑, 并且使用我们的可见说明符,
‫我们可以选择仅实例或仅默认｡
‫因此, 正如您可能已经猜到的, 我们可以只对实例进行编辑, 也可以只对默认值进行编辑（如果我们选择的话）｡
‫所以让我们在30秒内再做几个｡
‫我将创建一个名为edit defaults only的int, 并将其初始化为一个值, 比如9, 然后创建另一个名为edit
‫instance only的int, 32｡
‫我给予它赋值14｡
‫所以我们希望edit defaults only int只能在默认值上编辑, edit instance
‫only只能在实例上编辑.
‫现在, 这些说明符的名称是非常一致的, 所以我想让你猜一下这两个访问级别的说明符是什么｡
‫来吧, 做一个小小的挑战｡
‫暂停视频, 把这些填进去, 看看你是不是对的｡
‫好的, 这些将是您的属性和编辑默认值｡
‫只不过下场是要挨你大概猜对了｡
‫只编辑默认值, 对于只编辑实例, 我将给予它一个u属性宏, 这将是只编辑实例｡
‫所以这很直观｡
‫让我们继续编译这些, 然后回到编辑器中, 使用BP--tank open, 这是我们的编辑默认值,
‫只有int, 我们看不到edit instance only, 我们没有想到它会被设置为9,
‫我们可以修改它, 如果我们选择了一个实例, 我们可以看到edit instance only, int,
‫当然它也是可编辑的｡
‫现在我们在图中添加了三个新的说明符｡
‫我们只有可见的默认值, 它只在默认列和只读行中｡
‫然后, 我们在各自的行中只编辑默认值和只编辑实例｡
‫我们很快就填满了这个图, 但您会注意到,
‫在右侧和事件图列中有几个空白｡
‫现在让我们来谈谈这些｡
‫我现在在BP Pond Tank中, 我们有所有这些变量, 我们已经公开了这些变量的细节, 面板,
‫取决于它们的说明符｡
‫您可以在此处或实例上看到它们｡
‫但是如果我在事件图中右键单击这里会怎样呢？
‫事件图是另一个我们可以访问变量并可能更改它们的地方｡
‫因此, 如果我在任何地方键入edit, 我在任何地方都看不到编辑｡
‫INT, 它不会暴露给事件图｡
‫我们没有权限｡
‫还有另一个说明符, 它允许我们在事件图中公开这里的内容,
‫并且可以与控制详细信息面板可访问性的说明符一起工作｡
‫我想把其中一个变量暴露给事件图｡
‫现在, 我可以选择其中的任何一个, 但是我选择这个在任何地方都可见｡
‫现在美国｡
‫属性宏可以接受多个输入, 所以我们在任何地方都有可见的｡
‫我们还可以继续｡
‫我将放置一个逗号, 并将另一个指定的添加到, 这将给予此可见的任何位置结束事件图的暴露｡
‫我将使用蓝图读取, 写入, 蓝图读取｡
‫写与事件图有关｡
‫它与控制详细信息面板无关｡
‫这就是随处可见的原因｡
‫因此, 正如名称所示, 蓝图重写具有读访问权限和写访问权限｡
‫让我们看看结果如何｡
‫让我们编译它, 如果右键单击并在任意位置键入visible, 我将返回到事件图的编辑器中｡
‫我们将看到两个不同的选项get visible anywhere int和set visible anywhere｡
‫INT如果选择, 则可在任何位置显示｡
‫INT我们得到一个节点, 这和其他的蓝图节点一样, 它代表C++变量, 如果我们把它拖开,
‫我们就可以访问那个值, 对它做一些事情｡
‫现在, 我将向外滚动, 您将看到这些灰色节点, 即actor begin､ overlap和event
‫tick, 如您所知, Begin Play在游戏开始时被调用｡
‫所以我们可以在这里做点什么｡
‫我想使用一个打印字符串节点, 如果我拖动并键入打印字符串, 那么它就在这里了｡
‫这是一个蓝图函数节点, 它接受一个以字符串形式调用的输入｡
‫现在如果我把鼠标悬停在上面, 它会显示字符串, 然后在字符串的正下方显示字符串｡
‫这是此节点接受作为输入参数的类型｡
‫我们知道我们的visible anywhere int是一个int 32, 而不是一个字符串｡
‫但是如果你在这个笔记的输出中点击, 然后把它拖到输入中, 然后松开鼠标左键, 你会看到一个弹出窗口,
‫上面写着, 把整数转换成字符串, 如果你松开鼠标左键,
‫你会得到这个方便的转换节点, 它可以把整数转换成字符串类型, 这对我们来说非常方便,
‫因为我们不需要知道如何把整数转换成字符串｡
‫对我们来说这是自然而然的｡
‫现在, 如果我点击播放, 我们会看到值12打印了三次, 它只持续了几秒钟｡
‫这就是print字符串的行为｡
‫现在, 我们看到它三次的原因是因为我在世界上有三个不同的BP池塘水箱实例｡
‫你会看到多少取决于你拖到这个世界上来的人｡
‫因为对于每一个单独的实例来说, 开始play都是在游戏开始时调用的｡
‫为了避免混淆, 我将删除另外两个, 只留下一个Beep Pond
‫Tank的实例.
‫所以我只有一个, 如果我再去点击播放, 那么我只会看到12打印到屏幕上一次｡
‫这是对visible anywhere int的读访问权限, 但我们看到我们也有写访问权限｡
‫这意味着我们可以在事件图中从这里设置它的值｡
‫如果我右键单击并再次输入visible anywhere int, 那么我可以选择set visible
‫anywhere int, 我有一个setter节点, 它接受一个输入, 我们可以从其他节点传入值,
‫或者我们可以接受这个小文本框和硬编码值, 比如说66｡
‫现在, 一旦从开始播放开始的执行流到达这个节点,
‫那么setter节点将写入visible anywhere, 并将它的值设置为66｡
‫当然, 我们可以再打印一次｡
‫所以我将使用print字符串｡
‫对于传递给print string的值, 我想要visible anywhere int的值｡
‫现在我有两种方法｡
‫setter有一个返回节点, 所以在它设置了值之后, 它会返回那个值,
‫我们可以直接用它来打印字符串.
‫另一种方法是右键单击并在任意位置显示int, 使用get节点, 我们可以将该节点的值直接挂接到print
‫string中, 这将完成完全相同的操作｡
‫所以我不需要那个｡
‫我将删除该节点｡
‫现在我在玩这个游戏的时候会看到, 首先输出visible anywhere
‫int的值, 它从12开始, 然后把它的值设为66, 我会看到66的值输出到屏幕上.
‫现在我们按播放键, 看到12和66｡
‫现在它们看起来像是颠倒了顺序｡
‫这是因为print字符串会将较新的消息添加到顶部｡
‫所以这是正常的行为｡
‫好吧, 太好了｡
‫我们已经看到我们可以让一个可变的蓝图立即被读取｡
‫我们还可以控制是否可以从事件图中进行设置｡
‫所以让我们公开另一个变量, 这样我们就可以从蓝图中获取它, 但不要在任何地方设置它｡
‫我将添加一个逗号, 并添加一个指定的到, 以便在事件图中访问它,
‫但不能设置它或写入它｡
‫指定的小时为蓝图只读, 因此edit anywhere int现在为蓝图只读｡
‫它在细节面板中仍然是可编辑的, 在默认和实例中都是如此, 但是在事件图中它是只读的｡
‫让我们继续编译它, 然后回到编辑器中, 在事件图中右键单击, 在任意位置键入edit,
‫然后将其选中｡
‫我们有get edit anywhere end, 但我们没有set edit anywhere int,
‫因为它是蓝图只读, 我们不能写入它｡
‫所以我要选择它｡
‫这里是任何地方的编辑｡
‫如果我想的话, 我可以用一个打印字符串节点来查看它的值｡
‫没必要这样做｡
‫我们已经知道该怎么做了｡
‫我只是在证明我们不能写这个变量｡
‫好的, 我将突出显示这些节点并将其删除｡
‫现在我们的图表已经填好了｡
‫我们已经了解到, 我们可以使变量只在默认值上可见, 并且我们可以使它们只在默认值上或只在实例上可编辑｡
‫所以我们真的可以从C++端进行完全控制｡
‫现在, 我们还看到, 我们可以将这些变量公开给事件图,
‫并使用这些蓝图只读､ 蓝图读写说明符将它们设置为只读或只读｡
‫所以现在你有个挑战｡
‫在上节课中我们创造了一个变量｡
‫我做了一个花车, 称之为速度｡
‫现在你要取这个变量｡
‫您可以在最后一节中创建它, 并在事件图中控制它的访问｡
‫因此, 使用您学到的新说明符之一将其公开给事件图,
‫然后您将测试其读写访问权限｡
‫使用打印字符串节点, 这样就可以看到它的值, 如果更改了它, 就可以向自己证明您已经更改了它｡
‫因此, 如果您使变量bluepire正确读取, 请尝试使用set节点更改它, 然后使用print
‫string节点, 通过event开始play查看其值｡
‫如果您将其设为bluepread only, 那么您只需获取该值并使用print string打印其值｡
‫因此, 将正确的specify添加到自定义变量中, 并使用print string在事件图中测试访问｡
‫暂停视频, 给予｡
‫好吧, 我会的
‫我将向下滚动到速度变量, 速度变量可在任意位置编辑, 我希望它可以被蓝图读取｡
‫好的, 这样我就可以在事件图中更改它｡
‫所以我将添加蓝图, 读取, 写入并简单地编译｡
‫所以回到BP的池塘, 如果我现在输入速度, 我会看到这个的获取器和设置器｡
‫所以我要用设定速度｡
‫我将从开始播放”设置其值｡
‫我们把它连接起来吧｡
‫对于值, 我将输入900, 如果我拖动, 我可以从设置的音符中输入print string｡
‫现在我将单击并拖动输出节点, 将其连接到string｡
‫如果我点击播放键, 这里有900, 注意它写的是900｡ 0.
‫那是因为这是一个彩车｡
‫所以它给了我显示第一个小数点的礼貌｡
‫这是一个不错的内置功能｡
‫它显示了速度变量小数点右边的一位数｡
‫总之, 我们学习了新属性宏的更多说明符｡
‫我们学习了仅可见默认值､ 仅编辑默认值和仅编辑实例｡
‫我们还学习了如何使用Blueprint､ read､ write和Blueprint Read控制事件图中的读写访问｡
‫只有C++程序员才能很好地控制蓝图中公开的内容和可以更改的内容, 以及我们在本节课程中使用这些内容的位置｡
‫作为一名虚幻引擎开发人员, 您将在整个职业生涯中继续使用它们｡
‫我们下节课再见｡