‫你好, 欢迎｡
‫在这节课中, 我们将对这位演员造成伤害.
‫我们将通过覆盖一个名为take damage的虚方法来实现｡
‫你可以在这个日志中看到, 当我射击这个角色时, 生命值一直下降到零,
‫然后它停在零, 而不是变成负数｡
‫让我们深入了解一下这是如何实现的｡
‫因此, 虽然我们目前能够对我们在这里击中的演员造成伤害, 比如这个家伙,
‫但我们实际上并没有受到伤害｡
‫这就是上节课的虚拟方法的用武之地, 因为就像开始, play或者tic一样,
‫我们希望能够对演员造成伤害｡
‫幸运的是, 如果你看一下演员H,
‫你会发现这里有一个取损伤虚拟方法.
‫现在, 这也可以通过事件来完成, 您可能在注册事件之前已经看到过这种方式｡
‫现在我要做的是一种不同的破坏方式, 我们实际上把破坏存储在参与者身上, 而不是存储在组件中｡
‫一个简单的方法就是通过虚拟的方法来接受这种伤害｡
‫这是我们要重写的虚方法｡
‫我复制这个, 然后转到我们的演员,
‫也就是射手角色, 会更快的去寻找射手角色H我想检查的是,
‫演员H的位置.
‫如果我们向上滚动, 应该可以看到我们在哪个部分｡
‫我将向上滚动, 直到我发现无论我们是在公共场所还是他们去哪里, 我们都在公共部分｡
‫所以这也应该放在公共部分｡
‫所以我把它贴在tick下面,
‫在shooter H中设置播放器输入组件, 我们把它粘贴进去, 就像我上节课说的,
‫你可以用override来确保你确实覆盖了父函数的虚方法, 这里没有必要把virtual放在前面, 但我们还是要保留它.
‫在这里, 您可以看到所有即将损坏的数据｡
‫我们已经得到了损坏金额､ 损坏事件和造成损坏的控制者､ 煽动者和损坏原因｡
‫所有我们从枪里传来的东西也在这里出现了｡
‫所以这很好｡
‫现在, 如果我们继续执行Control Shift, P创建实现或复制粘贴,
‫然后我们就可以使实现遭受损坏.
‫但首先要注意的是,
‫每当我们重写某个东西的时候, 我们要考虑调用take damage的父类版本, 因为那里可能有一些实现需要运行｡
‫这就是我们要做的｡
‫我们一直都这样｡
‫我们已经用技术做到了｡
‫我们已经在“开始播放”中做到了这一点｡
‫你可以看到我们在开始的时候总是很酷, 这是因为当我们覆盖一个方法时, 我们完全覆盖了它｡
‫我们完全消除了这种行为｡
‫所以, 如果我们真的想要这种行为, 我们通常会这样做, 那么我们应该总是从酷到超开始｡
‫所以我们要做一个冷静的接受伤害｡
‫那就要承担损失金额了｡
‫所以这就是它变得有点乏味, 可悲的是｡
‫我的自动完成工具不能为我们做这件事｡
‫损坏事件｡
‫那下一个是什么？
‫我们有控制权｡
‫所以事件的煽动者, 让我们只是复制｡
‫然后我们有了破坏的原因, 也就是演员｡
‫所有这些都被调用到take damage的父实现｡
‫还有一点就是它有一个返回类型｡
‫所以实际的损坏是应用的, 所以我们要做浮动｡
‫所施加的伤害是获得伤害的返回值｡
‫所以我们只需要保持在这里施加的伤害｡
‫实际上, 这将与我们特定用例中的损害金额相同, 但不一定,
‫因此我们将使用应用的损害金额｡
‫接下来我们要做的是掌握我们实际拥有多少健康的信息｡
‫现在我要用两个变量来做这个｡
‫第一个是我将把这两个属性都设置为新属性, 因为我想让运行状况在检查器中可见, 至少现在是这样.
‫第一个属性是最大生命值｡
‫这是我们初始化的健康状况｡
‫所以你的属性, 它将是一个编辑默认值, 因为它将在开始播放时使用｡
‫所以在生效后改变最大生命值, 不会有任何影响.
‫最大健康值, 我将在这里将最大健康值设置为100, 然后我们将在这里有一个其他属性, 正如我所说的,
‫这将是一个新属性, 只是为了让我们能够检查它｡
‫我会让它在任何地方都可见｡
‫但不可编辑, 因为我们不想改变健康状况, 至少目前不想｡
‫您可能希望将其用于调试目的, 但我不希望｡
‫所以我们在这里和游戏中都要有健康｡
‫我们要把它设置好, 这样健康｡
‫等于最大生命值｡
‫所以我们从产卵开始｡
‫我们有我们的最大生命值, 然后我们可以开始减少它｡
‫所以现在是时候让你来挑战一下降低角色的生命值了｡
‫所以你要用这里的伤害而不是这里的其他选项｡
‫所以我们有了射手角色, CP承受伤害｡
‫我们已经得到了一个伤害值, 但是我们实际上想要的是从承受伤害中得到的伤害值,
‫因为这个伤害值可以通过父进程中的一些过程来减少｡
‫所以我们这样做｡
‫为了简单起见, 我们降低了健康值, 并记录了结果, 这样你就可以检查,
‫当你对着那只眼睛射击时, 他的健康值在下降, 然后测试一下｡
‫所以暂停视频, 开始吧｡
‫好的欢迎回来｡
‫所以我们来试试吧｡
‫所以健康, 我们基本上是想通过所施加的伤害来减少它｡
‫但这就足够了吗？
‫那么, 如果我们的伤害大于我们剩下的生命值呢？
‫在这种情况下, 我们可能希望伤害值就是这个生命值｡
‫所以我们可以这么做, 我们可以说损害是适用的｡
‫应等于运行状况的f数学点min｡
‫并施加损害｡
‫这就是我们要应用的破坏力｡
‫所以我们要我实际上要把它重命名, 而不是叫它已应用损害｡
‫我打算把它叫做损害赔偿申请｡
‫损坏适用｡
‫所以在这里重新命名, 然后应用损害｡
‫我们要以健康减去伤害来申请｡
‫有道理｡
‫最糟糕的是健康｡
‫所以我们的健康状况会降到零｡
‫记住, 我们应该归还我们实际使用的损坏｡
‫因此, 我们将应用退货损坏, 现在已经应用了退货损坏, 最后我们希望在此处的末尾有一个UII日志, 它只是一个警告,
‫以便我们可以看到它｡
‫我希望这是这里剩下的健康值, 它是一个百分比F到或者小写的百分比F来表示浮点数｡
‫然后, 我们可以在那里弹出健康状态, 然后继续单击构建｡
‫现在就去
‫我的是在修复了一个缺失的分号后编译的｡
‫在这里, 让我们去, 并确保我们有一个窗口开发工具, 我们希望在这里的输出日志,
‫以便我们可以看到该日志消息｡
‫我将继续按播放键, 如果我开枪, 我将尝试向这个角色开枪｡
‫你去那里｡
‫1976年的健康状况, 等等, 等等, 等等, 一直降到零｡
‫如果我继续拍摄, 我们不会低于0, 因为eff数学点最小值｡
‫所以这告诉我我们的健康设置是正确的｡
‫这只是另一种方式, 而不是在组件中进行｡
‫你可以在演员内部做, 以及这种方法的一些优点和缺点｡
‫最后, 您可能希望将其剥离到单独的组件中, 以便可以在不同的元素上重用它｡
‫但这只是另一种方式, 就像我现在说的, 因为这个角色在我们把他打到零血后看起来并不特别死｡
‫我们需要修复动画来支持它｡
‫我们下节课会讲到, 到时见.