‫你好, 欢迎｡
‫在这节课中, 我们将计算平台从起始位置移动的距离, 并将其显示在编辑器中,
‫以便我们检查和调试｡
‫让我们深入了解一下这是如何实现的｡
‫现在我们可以实现伪代码的第一部分了｡
‫我们已经编写了MOVE平台, 现在可以工作了｡
‫因此, 我们还没有讨论的是发送平台｡
‫你可以看到第一条评论是检查我们已经走了多远｡
‫那么, 我们如何检查从比赛开始到现在我们已经走了多远呢？
‫这有两个部分｡
‫首先, 我们需要计算出两个矢量之间的差以及两者之间的距离｡
‫我们需要弄清楚的另一件事是如何跟踪我们从哪里开始｡
‫第一部分相对简单｡
‫谢天谢地, 我们要做的就是去我们的移动平台｡
‫我们想在这里创建一个新变量, 但不是暴露在蓝图中的变量｡
‫这一次, 它只是一个仅用于C++的变量, 因此我们不需要在它的顶部放置一个新的属性｡
‫这是一个F矢量, 叫做起始位置, 或者说位置, 用的术语和虚幻中的一样｡
‫我们不会立即将其设置为任何值, 因为它对启动位置没有任何意义｡
‫我们还不知道, 但我们会知道它在开始播放｡
‫这就是我们要做的｡
‫我们将转到C++, 然后在开始播放后开始播放｡
‫我们将设置起始位置, 这样我们就可以说“起始位置”｡
‫记住, 我们没有把f向量放在前面因为我们试图引用一个类变量而不是创建一个局部变量.
‫所以我们要把这个起始位置设置为等于获取演员的位置, 因为在播放开始的时候, 演员就在开头.
‫我们已经设置了起始位置, 这就意味着我们有了一个变量, 这个变量可以在这个类的整个实例中持续, 所以我们可以使用它,
‫也可以使用它.
‫我们得到了一个变量, 我们可以试着找出它们之间的距离｡
‫我们可以说, 嘿, 当前位置偏离起始位置有多远？
‫为了能够做到这一点, 我需要在我们的术语表中添加更多的C++语法｡
‫首先, 它被称为作用域解析运算符, 名字有点混乱,
‫但实际上它是一个双冒号运算符, 我们之前在C++文件中见过.
‫基本上它所做的就是允许你像DOT操作符一样, 查看类的内部, 允许你查看类的一个实例｡
‫让我们更详细地了解一下｡
‫我们知道tick函数属于移动平台类, 但它不属于该类的某个特定实例｡
‫移动平台的所有实例都共享tick的相同实现, 这就是作为类的意义｡
‫所以这里移动平台和分笔成交点之间的作用域解析运算符实际上是告诉我们这是属于移动平台类的分笔成交点｡
‫和前面一样, 我们使用点运算符来得到属于当前位置的x｡
‫当前位置是F向量的一个特定实例, 但我们可以使用它来获取属于F向量类的函数,
‫这些函数不运行在该类的特定实例上｡
‫一个例子是求两个向量之间的距离｡
‫在Unreal中我们这样做的方法是使用一个在F向量类上的函数｡
‫所以我们先做vector, 然后冒号冒号, 看看这个类里面有哪些函数, 我们可以查看.
‫现在, 我只是提请您注意此时弹出的自动完成功能｡
‫我以前没有提到过它,
‫但是当我们做这些操作的时候, 它实际上是在试图聪明地告诉我们, 在F向量类中有什么函数可用｡
‫你可以看到有不少｡
‫我们要找的那个叫Dist, 是距离的简称｡
‫现在你也会注意到, 有一个叫做距离的词, 它实际上是同义词｡
‫我们可以使用它们中的任何一个, 但我将使用较短的一个, 以使代码更简洁,
‫我们可以打开括号｡
‫再一次, 自动补全帮助了我们, 因为它告诉我们它接受什么作为参数｡
‫我们可以看到, 第一个自变量是一个f向量, 第二个自变量也是一个有效的三维效应｡
‫所以我觉得这个叫做效应3D有点奇怪, 但它基本上要求一个f向量｡
‫如果你传入两个参数, 都是f向量, 我会告诉你我的返回值, 也就是左手的这个位,
‫是一个双精度值｡
‫现在, double实际上只是一个更精确的浮点数｡
‫所以我们可以说｡
‫那是一辆从这里出来的花车｡
‫我们创建的表达式创建了一个float｡
‫太棒了｡
‫所以我们要做的就是找出起始位置之间的距离｡
‫所以我们要输入start location作为第一个参数｡
‫然后第二个是当前位置｡
‫现在, 别担心, 在这个阶段, 实际上我们把这一轮放在哪一边并不重要,
‫因为两个向量之间的距离是一样的｡
‫不管你是从A到B还是从B到A, 它的距离总是一样的｡
‫所以如果你愿意, 我们可以把这些放在任何一种方式｡
‫现在我们得到了一个返回浮点数的表达式｡
‫所以我想挑战你用这个表达式更新一个新的属性, 这样我们就可以看到它的值｡
‫所以创建一个新的属性float, 随便你怎么叫, 然后用f vector
‫dist的值更新每个tick, 然后玩这个游戏看看会发生什么.
‫您是否得到了预期的输出？
‫它的增长速度是否如您所料？
‫暂停视频, 开始体验｡
‫好吧, 我会的
‫欢迎回来｡
‫首先, 我们要创建一个新的属性｡
‫我将把它放在起始位置的上方, 这样我们就可以把所有的属性组合在一起了.
‫我们将在任何地方编辑新的属性, 实际上我们不需要能够编辑它｡
‫因此, 您可能会认为, 在任何地方编辑意味着您可以编辑它｡
‫我们还有一个visible anywhere, 它不允许我们编辑它, 但允许我们查看它｡
‫这就是我要用的｡
‫相反, 为了简单起见, 我将在这里忽略这个类别,
‫因为我们只是使用这个变量来查看发生了什么｡
‫这是一个浮点型, 我之前提到过, 我把它叫做移动的距离,
‫这样我们就可以清楚地看到检查器中的内容了.
‫我将把它的默认值设为-1, 这样我们就知道我们已经更新了它｡
‫如果它显示-1, 我们就知道更新没有完成｡
‫所以我打算把这个距离移动一下｡
‫我们将回到我们的实现中, 勾选并设置移动的距离等于F矢量冒号冒号距离｡
‫所以使用作用域解析运算符来获得距离函数, 然后用分号结束这行｡
‫好的｡
‫我们将进入Unreal, 点击编译按钮, 然后关闭终端.
‫我们应该看到这个距离移动了, 显示为-1｡
‫您可以看到它是灰色的, 因为我无法编辑它, 因为它是可见的, 不能在任何地方编辑｡
‫现在, 让我们点击“播放”,
‫我们必须确保在轮廓中选择移动平台, 我们可以看到移动的距离,
‫您可以看到属性以每秒1到300的速度快速增加｡
‫所以它的速度和我预期的一样, 也就是每秒100次｡
‫所以看起来像是成功了｡
‫我们已经能够计算移动的距离并将其可视化｡
‫好东西｡
‫我们下节课再见｡