‫你好, 欢迎｡
‫在这节课中, 我们将使用一种叫做依赖注入的技术, 在推动器和触发器之间建立链接,
‫这样在课结束时, 如果我们把石像鬼插进去, 门就会向下移动, 或者至少部分向下移动｡
‫让我们深入了解一下它是如何工作的｡
‫我拿了一个杯子｡
‫我们已经看到了一个依赖关系, 我们称之为物理句柄的依赖关系｡
‫这个抓取器不能做它的工作, 除非你有一个物理处理组件在周围的某个地方, 现在它只是碰巧触发组件是相同的｡
‫触发器组件为了正常工作, 需要能够访问移动器组件｡
‫然而, 在这个例子中有点棘手, 因为当然,
‫在我们的秘密门的例子中, 触发器和移动的物体在同一个演员体内｡
‫因此, 您可以通过查找参与者上类型的a组件来获取对象｡
‫但是如果在我的剧本中有这样的情况呢, 我想让我的触发器在房间的另一个地方,
‫而演员移动得很好, 以允许这种灵活性｡
‫我们希望触发器不必去寻找它自己的依赖项｡
‫实际上, 这种程序概念有一个名称｡
‫这叫做依赖注入｡
‫基本上, 就是这样一种情况, 我们得到了一个东西, 我需要另一个对象,
‫但是我自己找不到, 或者我不想自己找到｡
‫通常明智的做法是, 不要把它留给正在做自己工作的对象, 让它有另一项工作,
‫试图抓住一个对象｡
‫因此, 我们可以这样做, 创建一个机制, 蓝图告诉触发器组件在哪里找到一个移动器｡
‫我们要做的就是在我们的触发器组件上创建一个蓝图可调用函数｡
‫所以这将是公开的｡
‫我们将把它放在tick组件下面的public部分, 它将是一个U函数, 这样它就可以放在括号中,
‫蓝图可调用｡
‫这个函数并不需要太多的东西｡
‫它将是void的, 因为它不需要返回一个东西,
‫但是它将被设置为mover, 所以它将设置一个到mover的链接, 为了设置一个到mover的链接, 它需要接收一个指向mover组件的指针.
‫这就是你的mover, 星星, 我们可以把它叫做mover, 就像这样, 在行尾放上分号.
‫我们得把它藏起来｡
‫所以我们要创建一个新的私有变量｡
‫它不是一个新的属性, 它只是一个U移动指针, 我们也称之为移动指针.
‫就像这样, 我们要做的是在CPP中实现这个集合移动器, 这样它就把这个移动设置为一个指针, 默认情况下这个指针是空的.
‫我们还得做一件事｡
‫我们必须包含mover的头文件｡
‫在本例中, 由于头文件与触发器组件位于同一个文件夹中,
‫因此我们所要做的就是散列include quote mover H, 这将确保触发器组件能够识别mover类型｡
‫现在我们来看看触发器组件｡
‫我将把它放在tick组件下面, 我们将实现集合移动器｡
‫我们将把触发组件的类放在前面并缩进它｡
‫删除分号并添加大括号｡
‫基本上我们要做的就是, 在C++文件中改变名字.
‫实际上, 参数的名称在头文件和C++之间是否匹配并不重要｡
‫所以我们可以在这里改变它, 说新的动子是集合动子的输入｡
‫所以我们可以设置本地变量, 类变量mover等于新的mover｡
‫所以现在,
‫不要跳过重命名这一步是非常重要的, 因为如果输入参数和类中的变量同名, 那么unreal默认会将其设置为错误.
‫这就是所谓的阴影,
‫Unreal不希望你这样做, 所以你现在需要确保你的参数名称与变量不同, 因为这些新函数并不总是与实时代码更改一起出现｡
‫我将关闭编辑器, 从Visual Studio代码重新编译, 然后从新项目重新启动｡
‫现在, 让我们转到内容抽屉,
‫打开秘密墙蓝图, 然后从事件图中的“开始播放”节点开始, 让我们从这里开始搜索集合移动器｡
‫注意这里有两个选项｡
‫一个是设置组件, 也称为移动器, 另一个是触发器组件上的函数｡
‫因此, 我们要选择触发器组件上的函数｡
‫然后我们要做的是把我们的mover组件作为其他参数拖到这个函数中, 这样就可以了｡
‫它把移动器设置在开始播放｡
‫所以现在我们要做的是, 我们的触发器组件应该在这里设置和设置should
‫move布尔值｡
‫所以这就是我对你们的挑战, 在mover和mover中创建一些公共函数｡
‫CP它应该被设置, 应该移动, 应该更新你的属性变量｡
‫事实上, 您可以不再将它设置为新属性, 因为我们现在将通过代码设置它,
‫然后您可以将它放在public部分｡
‫它必须是公共的, 因为我们将尝试从触发器组件访问它｡
‫你可以在移动指针上调用它, 我们在tick组件设置的触发器组件中得到了这个指针, 相应的布尔值,
‫不管我们想让它解锁还是再次锁定, 暂停视频, 然后开始｡
‫好的欢迎回来
‫我将删除should move的属性,
‫我将转到TTIC组件下的public部分, 我将创建一个void集should move, 取一个布尔值, 我们将这样调用should
‫move｡
‫然后我们将把它移到移动CP并实现它, 替换分号,
‫添加你移动冒号, 冒号类, 基本上我们可以称之为新的应该移动,
‫我们可以说应该移动等于新的应该移动｡
‫现在你可能想知道, 为什么我们不把变量本身设为可公开访问的, 这样我们就可以直接设置它们了？
‫在C++中, 这通常不是一个好的做法, 因为如果你让别人更改你的变量, 你永远不知道他们会发生什么｡
‫如果你有一个方法来帮你做这件事,
‫它允许你以后改变你构造内部变量的方式, 而不必改变你的公共函数, 这意味着你需要对不同的类做更少的更新｡
‫所以一般来说, 如果我们需要访问其他类中的变量, 我们总是使用setter和getter｡
‫现在, 我们已经创建了新函数, 让我们转到trig组件CP, 我们当前在该组件中获得了日志消息｡
‫我们要做的是访问我们的移动指针, 所以我们要做的是移动箭头集应该移动｡
‫在我们有一个可以接受的演员的情况下, 这应该是真的｡
‫我们应该把行尾的分号移一下｡
‫在其他情况下, 我们可能不应该｡
‫所以我们要移动箭头集合, 应该移动, 在括号里, 加上false,
‫去掉我在方法末尾的多余的R, 现在我们重新编译, 因为我只在C++中添加了这个函数,
‫它不是蓝图可调用的｡
‫我不认为我需要真正重新启动编辑器的这个功能的工作, 关闭我们的输出日志, 走向我们的石像鬼,
‫并开始发挥和拿起他｡
‫我们从笼子里出来, 把它放到壁龛里, 然后他们说, 它在向下移动,
‫但滴水嘴福尔斯出来它就停了, 这并不理想, 因为滴水嘴并没有固定到位,
‫墙也没有完全放下.
‫因为它是模拟物理学的, 所以它会从那个凹室里弹出来, 是吗？
‫所以我们需要做的是确保一旦我们把它放进触发区域, 它就固定在那里, 不动了｡
‫所以这将是下一节课的主题｡
‫我会看到你在那里｡