‫你好, 欢迎回来｡
‫在这段视频中, 我们将开始讨论如何移动坦克｡
‫所以要移动坦克, 我们必须添加一些偏移和一个虚幻的引擎.
‫在添加偏移时, 我们需要决定是在局部空间还是在世界空间中进行偏移｡
‫让我们来讨论一下这两件事之间的区别｡
‫现在, 在编辑器中, 我已经选择了坦克, 一旦我选择了它, 你会注意到有一个gizmo｡
‫这就是所谓的小发明｡
‫它有三个箭头, 每个箭头的颜色都不一样｡
‫现在, 如果你还没有注意到, 在屏幕的左下方是另一个较小的Gizmo｡
‫这看起来有点像我们选择的演员身上的小发明｡
‫所以如果我选择任何演员, 我们总是得到这个小玩意｡
‫当然, 当我们从平移到旋转再到缩放模式时, Gizmo会发生变化｡
‫只要我们处于平移状态, 我们可以通过视口右上角最左边的图标或W键访问,
‫我们就可以通过拖动Gizmo上的一个箭头来移动或平移对象｡
‫这些颜色对应于红色的轴, 因为x轴, 绿色是y轴, 蓝色是z轴｡
‫现在, 如果我们旋转视图并从不同的方向查看, 我们将看到该Gizmo仍指向相同的原始方向｡
‫当我们旋转时, 视口左下方的Gizmo也在旋转, 因为世界方向没有改变｡
‫到目前为止, 一切顺利｡
‫现在我们看到的是世界空间方向, 但是对于世界上的每个参与者, 都有一个局部方向｡
‫我们可以看到, 通过点击这个图标, 它看起来像一个世界, 弹出窗口说循环,
‫变换Gizmo协调世界和局部空间之间的系统｡
‫当我们在这里看到一个世界时, 这意味着我们在看世界空间, 但是如果我们点击它,
‫它现在变成了一个立方体, 我们现在在看我们选择的给定演员的局部空间｡
‫视口左下角的Gizmo仍然向我们显示世界空间｡
‫但是如果我把这个演员切换到旋转模式并旋转它, 那么当我回到平移模式时,
‫你会看到gizmo现在指向不同的方向｡
‫参与者本身有自己的局部x轴｡
‫我们可以把参与者的x轴看作它的前向向量｡
‫现在请注意, 在屏幕的左下方, 该Gizmo仍指向同一方向｡
‫但是这个角色, 兵坦克, 有它自己的局部X方向, 它指向不同的方向｡
‫现在, 如果单击此处的立方体并将其重新转换为世界, 则坦克的Gizmo将与世界轴方向匹配并对齐,
‫这样我们就可以在世界空间与局部空间之间切换, 以查看任何给定角色的局部方向与世界方向｡
‫我们已经看到, 在我们的世界里, 我们选择的任何一个角色, 都有它自己的方向｡
‫这可能与这张图中所示的世界方向不同, 也可能相同｡
‫因此, 这是非常重要的, 当涉及到移动对象在虚幻引擎｡
‫存在用于移动对象的函数, 并且存在用于在世界空间与局部空间中移动的不同的函数集合｡
‫假设我们的坦克面向这个方向, 它的x轴稍微指向左边, 正如我在坦克上画的箭头所示｡
‫现在我们可以看到, 基于左下角的Gizmo, 世界x轴方向指向右侧｡
‫因此坦克不与世界空间方向对齐｡
‫现在, 假设我们要在世界空间中沿正X方向移动该坦克｡
‫即使坦克指向左边, 它还是会在世界x方向上移动看起来像是在向后移动｡
‫所以这不是我们想要的｡
‫另一方面, 我们使用一个函数, 用来在它自己的局部空间中移动坦克.
‫这意味着, 如果我们在其自身的局部X方向上移动坦克, 它将在您预期的方向上向前移动｡
‫这就是我们想要的行为｡
‫现在在虚幻引擎｡
‫可以为我们完成此操作的函数称为“添加执行元本地偏移”｡
‫此函数沿局部方向移动参与者｡
‫现在, 它应用偏移, 这是一个单一的移动｡
‫基本上, 我们告诉它向哪个方向移动, 移动多远, 然后它移动对象一次, 这意味着我们要在每一帧调用这个函数,
‫我们要移动坦克｡
‫所以我们要以小的增量移动它, 因为每帧都调用一个函数｡
‫这意味着我们现在经常调用它, 对于我们的坦克, 它自己的局部X轴是它的前进方向｡
‫这就是我们在添加局部偏移时要使用的轴｡
‫现在, 这里是添加演员本地偏移的虚幻引擎文档｡
‫你可以看到它是一个属于actor类的函数｡
‫这就是为什么它现在被称为add actor local offset, 因为它存在于actor类中｡
‫兵会继承这个功能, 所以我们可以使用它｡
‫下面是语法｡
‫它有四个输入参数｡
‫第一个是称为delta位置的F向量｡
‫所以我们需要创建一个F向量, 我们可以将它传递给这个添加演员的局部偏移函数｡
‫所以我们知道了这个添加参与者的局部偏移量｡
‫我想做个实验看看它是如何工作的, 这样我们就可以在tick函数中做这个了｡
‫现在我们没有覆盖tank类中的tic函数, 但是我们在pong基类中有它｡
‫如果我们转到基池CP, 这里有tic函数, 这里没有做任何事情, 这是做一些实验的完美选择｡
‫我要做的就是输入, 加, 参与者, 局部偏移量, 就像这样｡
‫单击鼠标右键并选择“go to definition（转到定义）”｡
‫现在, 在执行元CP文件中, 我们有“添加执行元局部偏移”的定义｡
‫现在注意一些有趣的事情｡
‫它检查根组件是否不为空, 如果不为空, 则调用此函数添加本地偏移量｡
‫所以我们实际上是在根组件上添加一个偏移量｡
‫由于所有其他组件都附加到根组件上, 因此它们将随根组件一起移动｡
‫因此, 需要注意的是, 当我们添加局部偏移时, 我们移动的是根组件,
‫其他组件也会随之移动｡
‫现在, 如果我们将鼠标悬停在“添加局部偏移”上, 我们将看到此处列出了所有四个输入参数｡
‫除了第一个是F向量, 其他的都有默认值｡
‫注意bool B扫描它说等于false｡
‫第三个和第四个输入参数也具有这些默认值｡
‫这意味着, 如果我们调用这个函数, 并且没有为最后三个输入参数传入输入, 那么它们将被默认设置为这些值｡
‫现在我将关闭actor CP, 在基池tick函数中, 我将在每帧调用add actor local
‫offset, 以了解它的工作原理｡
‫现在我们知道第一个输入参数是一个F向量｡
‫这叫三角洲定位｡
‫这是我们每次调用此函数时要添加的移动量｡
‫所以我要创建一个F向量, 叫做delta位置｡
‫所以F向量δ的位置｡
‫现在我想把这个向量归零｡
‫换句话说, 确保它的初始化都是零｡
‫现在我需要一个零向量, 我可以传递零f, x, y, z都是零f｡
‫所以这将很好地满足我的目的｡
‫现在我要把三角洲的位置X改成两点F.
‫这样我们就有了一个向量, Y和Z都是零, x是2.
‫所以我将继续, 并将Delta位置传递到add actor局部偏移中, 作为一种实验｡
‫现在, 我可以调用add actor local offset, 只传入第一个输入参数, 因为其他三个参数是可选的｡
‫所以我将编译这个, 看看会发生什么｡
‫现在, 如果我们点击播放, 请注意, 有几件事｡
‫首先, 你看, 塔也在动｡
‫这是因为我们把它放在了基础典当的tick函数中这两个债券都是从基础典当继承的.
‫所以实际上, 所有这些池塘都在移动｡
‫有趣的是, 它们都在各自的x轴方向上运动｡
‫从这个角度看, 我们可以看到所有的东西都在同时运动｡
‫如果我们点击游戏旁边的下拉菜单并选择模拟, 这就允许我们在不拥有任何池塘的情况下玩游戏｡
‫如果我单击“模拟”, 请查看｡
‫每个池塘都在其自身的x轴方向上移动｡
‫这真的很奇怪很酷｡
‫这向我们展示了广告演员局部偏移是如何工作的｡
‫它使事物向其局部方向移动｡
‫现在, 我们可以通过单击下拉菜单并选择所选视口来退出模拟模式,
‫这将允许我们在常规播放模式下播放｡
‫好了, 我要停止这个, 我们可以回到基地——我们可以删除这个实验代码｡
‫我将从tick函数中删除它, 这样我们就知道了添加参与者局部偏移量的工作原理｡
‫让我们回到坦克CP, 这里有MOVE函数｡
‫我们知道每一帧都会调用这个函数, 我们知道value等于1｡
‫如果我们按W键, 它是-1, 如果我们按W键, 它是0, 如果我们同时按两个键,
‫或者都不按｡
‫因此, 对于您的挑战, 您将使用添加演员局部偏移来移动坦克｡
‫所以在MOV函数中, 你要创建一个叫做delta位置的F向量｡
‫现在, 确保将X､ Y和z归零｡
‫您可以通过多种方式来实现这一点, 例如使用各种f向量构造函数之一｡
‫现在, 一旦您将所有组件归零, 则将其x设置为MOV函数中的浮点输入参数的值｡
‫完成此操作后, 继续调用add actor local offset, 传入增量位置｡
‫暂停视频并立即执行此操作｡
‫好吧, 我会的
‫所以我回到了坦克指挥部的档案里｡
‫现在, 我不再需要这个EWI日志, 所以我将把它取出来, 并创建一个称为Delta位置的F向量｡
‫现在我可以使用其中一个F向量构造函数｡
‫我已经向你们展示了如何创建一个全为零的新向量｡
‫我会给你们展示另一种方法, 就是用f向量, 零向量, 来初始化｡
‫这就是它听起来的样子, 一个向量, 每个分量为零｡
‫这只是向你展示另一种方法｡
‫所以我们有一个零向量｡
‫现在我要取delta位置X, 并将其设为value｡
‫最后, 我可以调用add actor local offset, 传入delta位置｡
‫让我们编译一下, 回到编辑器, 我将把我的坦克调整方向,
‫使它面向世界X方向, 然后我可以点击播放, 现在在视口中单击｡
‫如果我按W键, 我就向前移动, 如果我按W键, 我就向后移动｡
‫如果我同时按下两个按钮, 它们会互相抵消, 我就不会动了｡
‫当然, 如果我不按任何东西, 我也不会动｡
‫现在我们的坦克可以运动了, 但是有点慢, 所以我们要做一些调整.
‫我们还将讨论如何用坦克微调这个机芯｡
‫总之, 我们学习了ADD Actor､ 局部偏移以及世界空间和局部空间之间的区别｡
‫在下一个视频中, 我们将继续完善这个移动机制与我们的坦克｡
‫我很快就会见到你的｡