﻿1
00:00:04,130 --> 00:00:06,050
‫你好, 欢迎回来｡

2
00:00:06,080 --> 00:00:10,010
‫在这段视频中, 我们将开始讨论如何移动坦克｡

3
00:00:10,160 --> 00:00:16,010
‫所以要移动坦克, 我们必须添加一些偏移和一个虚幻的引擎.

4
00:00:16,010 --> 00:00:23,690
‫在添加偏移时, 我们需要决定是在局部空间还是在世界空间中进行偏移｡

5
00:00:23,690 --> 00:00:26,840
‫让我们来讨论一下这两件事之间的区别｡

6
00:00:27,200 --> 00:00:36,560
‫现在, 在编辑器中, 我已经选择了坦克, 一旦我选择了它, 你会注意到有一个gizmo｡

7
00:00:36,590 --> 00:00:38,720
‫这就是所谓的小发明｡

8
00:00:38,720 --> 00:00:41,810
‫它有三个箭头, 每个箭头的颜色都不一样｡

9
00:00:41,810 --> 00:00:47,360
‫现在, 如果你还没有注意到, 在屏幕的左下方是另一个较小的Gizmo｡

10
00:00:47,360 --> 00:00:53,000
‫这看起来有点像我们选择的演员身上的小发明｡

11
00:00:53,000 --> 00:00:56,750
‫所以如果我选择任何演员, 我们总是得到这个小玩意｡

12
00:00:56,750 --> 00:01:02,660
‫当然, 当我们从平移到旋转再到缩放模式时, Gizmo会发生变化｡

13
00:01:02,660 --> 00:01:09,020
‫只要我们处于平移状态, 我们可以通过视口右上角最左边的图标或W键访问,

14
00:01:09,020 --> 00:01:18,260
‫我们就可以通过拖动Gizmo上的一个箭头来移动或平移对象｡

15
00:01:18,260 --> 00:01:26,180
‫这些颜色对应于红色的轴, 因为x轴, 绿色是y轴, 蓝色是z轴｡

16
00:01:26,210 --> 00:01:34,070
‫现在, 如果我们旋转视图并从不同的方向查看, 我们将看到该Gizmo仍指向相同的原始方向｡

17
00:01:34,070 --> 00:01:42,740
‫当我们旋转时, 视口左下方的Gizmo也在旋转, 因为世界方向没有改变｡

18
00:01:42,740 --> 00:01:44,060
‫到目前为止, 一切顺利｡

19
00:01:44,060 --> 00:01:52,310
‫现在我们看到的是世界空间方向, 但是对于世界上的每个参与者, 都有一个局部方向｡

20
00:01:52,310 --> 00:01:58,670
‫我们可以看到, 通过点击这个图标, 它看起来像一个世界, 弹出窗口说循环,

21
00:01:58,670 --> 00:02:03,560
‫变换Gizmo协调世界和局部空间之间的系统｡

22
00:02:03,560 --> 00:02:09,050
‫当我们在这里看到一个世界时, 这意味着我们在看世界空间, 但是如果我们点击它,

23
00:02:09,080 --> 00:02:16,700
‫它现在变成了一个立方体, 我们现在在看我们选择的给定演员的局部空间｡

24
00:02:16,700 --> 00:02:21,110
‫视口左下角的Gizmo仍然向我们显示世界空间｡

25
00:02:21,110 --> 00:02:27,560
‫但是如果我把这个演员切换到旋转模式并旋转它, 那么当我回到平移模式时,

26
00:02:27,560 --> 00:02:32,390
‫你会看到gizmo现在指向不同的方向｡

27
00:02:32,390 --> 00:02:36,680
‫参与者本身有自己的局部x轴｡

28
00:02:36,680 --> 00:02:40,730
‫我们可以把参与者的x轴看作它的前向向量｡

29
00:02:40,730 --> 00:02:46,520
‫现在请注意, 在屏幕的左下方, 该Gizmo仍指向同一方向｡

30
00:02:46,520 --> 00:02:54,530
‫但是这个角色, 兵坦克, 有它自己的局部X方向, 它指向不同的方向｡

31
00:02:54,530 --> 00:03:01,250
‫现在, 如果单击此处的立方体并将其重新转换为世界, 则坦克的Gizmo将与世界轴方向匹配并对齐,

32
00:03:01,250 --> 00:03:14,330
‫这样我们就可以在世界空间与局部空间之间切换, 以查看任何给定角色的局部方向与世界方向｡

33
00:03:14,690 --> 00:03:20,540
‫我们已经看到, 在我们的世界里, 我们选择的任何一个角色, 都有它自己的方向｡

34
00:03:20,540 --> 00:03:27,320
‫这可能与这张图中所示的世界方向不同, 也可能相同｡

35
00:03:27,440 --> 00:03:33,200
‫因此, 这是非常重要的, 当涉及到移动对象在虚幻引擎｡

36
00:03:33,200 --> 00:03:41,150
‫存在用于移动对象的函数, 并且存在用于在世界空间与局部空间中移动的不同的函数集合｡

37
00:03:41,150 --> 00:03:50,150
‫假设我们的坦克面向这个方向, 它的x轴稍微指向左边, 正如我在坦克上画的箭头所示｡

38
00:03:50,150 --> 00:03:56,720
‫现在我们可以看到, 基于左下角的Gizmo, 世界x轴方向指向右侧｡

39
00:03:56,720 --> 00:04:00,200
‫因此坦克不与世界空间方向对齐｡

40
00:04:00,410 --> 00:04:05,660
‫现在, 假设我们要在世界空间中沿正X方向移动该坦克｡

41
00:04:05,660 --> 00:04:14,300
‫即使坦克指向左边, 它还是会在世界x方向上移动看起来像是在向后移动｡

42
00:04:14,300 --> 00:04:15,950
‫所以这不是我们想要的｡

43
00:04:15,980 --> 00:04:22,910
‫另一方面, 我们使用一个函数, 用来在它自己的局部空间中移动坦克.

44
00:04:22,940 --> 00:04:31,760
‫这意味着, 如果我们在其自身的局部X方向上移动坦克, 它将在您预期的方向上向前移动｡

45
00:04:31,760 --> 00:04:34,310
‫这就是我们想要的行为｡

46
00:04:34,340 --> 00:04:35,690
‫现在在虚幻引擎｡

47
00:04:35,690 --> 00:04:40,190
‫可以为我们完成此操作的函数称为“添加执行元本地偏移”｡

48
00:04:40,190 --> 00:04:43,970
‫此函数沿局部方向移动参与者｡

49
00:04:44,090 --> 00:04:47,900
‫现在, 它应用偏移, 这是一个单一的移动｡

50
00:04:47,930 --> 00:04:54,140
‫基本上, 我们告诉它向哪个方向移动, 移动多远, 然后它移动对象一次, 这意味着我们要在每一帧调用这个函数,

51
00:04:54,140 --> 00:04:58,790
‫我们要移动坦克｡

52
00:04:58,790 --> 00:05:03,530
‫所以我们要以小的增量移动它, 因为每帧都调用一个函数｡

53
00:05:03,680 --> 00:05:11,480
‫这意味着我们现在经常调用它, 对于我们的坦克, 它自己的局部X轴是它的前进方向｡

54
00:05:11,480 --> 00:05:16,010
‫这就是我们在添加局部偏移时要使用的轴｡

55
00:05:16,400 --> 00:05:20,990
‫现在, 这里是添加演员本地偏移的虚幻引擎文档｡

56
00:05:20,990 --> 00:05:24,590
‫你可以看到它是一个属于actor类的函数｡

57
00:05:24,590 --> 00:05:29,990
‫这就是为什么它现在被称为add actor local offset, 因为它存在于actor类中｡

58
00:05:29,990 --> 00:05:33,140
‫兵会继承这个功能, 所以我们可以使用它｡

59
00:05:33,170 --> 00:05:34,820
‫下面是语法｡

60
00:05:34,820 --> 00:05:37,220
‫它有四个输入参数｡

61
00:05:37,220 --> 00:05:41,090
‫第一个是称为delta位置的F向量｡

62
00:05:41,090 --> 00:05:47,630
‫所以我们需要创建一个F向量, 我们可以将它传递给这个添加演员的局部偏移函数｡

63
00:05:47,630 --> 00:05:50,840
‫所以我们知道了这个添加参与者的局部偏移量｡

64
00:05:50,840 --> 00:05:56,930
‫我想做个实验看看它是如何工作的, 这样我们就可以在tick函数中做这个了｡

65
00:05:56,930 --> 00:06:04,250
‫现在我们没有覆盖tank类中的tic函数, 但是我们在pong基类中有它｡

66
00:06:04,250 --> 00:06:12,710
‫如果我们转到基池CP, 这里有tic函数, 这里没有做任何事情, 这是做一些实验的完美选择｡

67
00:06:12,710 --> 00:06:18,530
‫我要做的就是输入, 加, 参与者, 局部偏移量, 就像这样｡

68
00:06:18,530 --> 00:06:22,760
‫单击鼠标右键并选择“go to definition（转到定义）”｡

69
00:06:22,760 --> 00:06:28,520
‫现在, 在执行元CP文件中, 我们有“添加执行元局部偏移”的定义｡

70
00:06:28,520 --> 00:06:30,170
‫现在注意一些有趣的事情｡

71
00:06:30,170 --> 00:06:37,910
‫它检查根组件是否不为空, 如果不为空, 则调用此函数添加本地偏移量｡

72
00:06:37,910 --> 00:06:41,720
‫所以我们实际上是在根组件上添加一个偏移量｡

73
00:06:41,720 --> 00:06:46,970
‫由于所有其他组件都附加到根组件上, 因此它们将随根组件一起移动｡

74
00:06:46,970 --> 00:06:51,740
‫因此, 需要注意的是, 当我们添加局部偏移时, 我们移动的是根组件,

75
00:06:51,740 --> 00:06:53,480
‫其他组件也会随之移动｡

76
00:06:53,480 --> 00:07:00,290
‫现在, 如果我们将鼠标悬停在“添加局部偏移”上, 我们将看到此处列出了所有四个输入参数｡

77
00:07:00,290 --> 00:07:06,140
‫除了第一个是F向量, 其他的都有默认值｡

78
00:07:06,140 --> 00:07:09,800
‫注意bool B扫描它说等于false｡

79
00:07:09,800 --> 00:07:14,840
‫第三个和第四个输入参数也具有这些默认值｡

80
00:07:14,840 --> 00:07:24,290
‫这意味着, 如果我们调用这个函数, 并且没有为最后三个输入参数传入输入, 那么它们将被默认设置为这些值｡

81
00:07:24,320 --> 00:07:31,220
‫现在我将关闭actor CP, 在基池tick函数中, 我将在每帧调用add actor local

82
00:07:31,220 --> 00:07:34,280
‫offset, 以了解它的工作原理｡

83
00:07:34,400 --> 00:07:37,790
‫现在我们知道第一个输入参数是一个F向量｡

84
00:07:37,790 --> 00:07:39,470
‫这叫三角洲定位｡

85
00:07:39,470 --> 00:07:44,030
‫这是我们每次调用此函数时要添加的移动量｡

86
00:07:44,030 --> 00:07:48,380
‫所以我要创建一个F向量, 叫做delta位置｡

87
00:07:48,380 --> 00:07:51,800
‫所以F向量δ的位置｡

88
00:07:51,980 --> 00:07:54,350
‫现在我想把这个向量归零｡

89
00:07:54,350 --> 00:07:58,340
‫换句话说, 确保它的初始化都是零｡

90
00:07:58,430 --> 00:08:05,870
‫现在我需要一个零向量, 我可以传递零f, x, y, z都是零f｡

91
00:08:05,870 --> 00:08:08,450
‫所以这将很好地满足我的目的｡

92
00:08:08,480 --> 00:08:14,960
‫现在我要把三角洲的位置X改成两点F.

93
00:08:14,960 --> 00:08:20,540
‫这样我们就有了一个向量, Y和Z都是零, x是2.

94
00:08:20,570 --> 00:08:27,770
‫所以我将继续, 并将Delta位置传递到add actor局部偏移中, 作为一种实验｡

95
00:08:27,800 --> 00:08:36,470
‫现在, 我可以调用add actor local offset, 只传入第一个输入参数, 因为其他三个参数是可选的｡

96
00:08:36,500 --> 00:08:39,080
‫所以我将编译这个, 看看会发生什么｡

97
00:08:40,520 --> 00:08:43,880
‫现在, 如果我们点击播放, 请注意, 有几件事｡

98
00:08:43,880 --> 00:08:46,100
‫首先, 你看, 塔也在动｡

99
00:08:46,130 --> 00:08:52,730
‫这是因为我们把它放在了基础典当的tick函数中这两个债券都是从基础典当继承的.

100
00:08:52,730 --> 00:08:56,060
‫所以实际上, 所有这些池塘都在移动｡

101
00:08:56,060 --> 00:09:01,280
‫有趣的是, 它们都在各自的x轴方向上运动｡

102
00:09:01,280 --> 00:09:04,640
‫从这个角度看, 我们可以看到所有的东西都在同时运动｡

103
00:09:04,670 --> 00:09:12,260
‫如果我们点击游戏旁边的下拉菜单并选择模拟, 这就允许我们在不拥有任何池塘的情况下玩游戏｡

104
00:09:12,260 --> 00:09:14,810
‫如果我单击“模拟”, 请查看｡

105
00:09:14,810 --> 00:09:18,580
‫每个池塘都在其自身的x轴方向上移动｡

106
00:09:18,590 --> 00:09:22,070
‫这真的很奇怪很酷｡

107
00:09:22,070 --> 00:09:25,760
‫这向我们展示了广告演员局部偏移是如何工作的｡

108
00:09:25,760 --> 00:09:28,220
‫它使事物向其局部方向移动｡

109
00:09:28,280 --> 00:09:34,220
‫现在, 我们可以通过单击下拉菜单并选择所选视口来退出模拟模式,

110
00:09:34,220 --> 00:09:38,000
‫这将允许我们在常规播放模式下播放｡

111
00:09:38,030 --> 00:09:45,220
‫好了, 我要停止这个, 我们可以回到基地——我们可以删除这个实验代码｡

112
00:09:45,230 --> 00:09:52,700
‫我将从tick函数中删除它, 这样我们就知道了添加参与者局部偏移量的工作原理｡

113
00:09:52,880 --> 00:09:56,780
‫让我们回到坦克CP, 这里有MOVE函数｡

114
00:09:56,780 --> 00:10:02,960
‫我们知道每一帧都会调用这个函数, 我们知道value等于1｡

115
00:10:03,080 --> 00:10:09,260
‫如果我们按W键, 它是-1, 如果我们按W键, 它是0, 如果我们同时按两个键,

116
00:10:09,260 --> 00:10:10,970
‫或者都不按｡

117
00:10:11,420 --> 00:10:16,340
‫因此, 对于您的挑战, 您将使用添加演员局部偏移来移动坦克｡

118
00:10:16,340 --> 00:10:21,350
‫所以在MOV函数中, 你要创建一个叫做delta位置的F向量｡

119
00:10:21,350 --> 00:10:24,440
‫现在, 确保将X､ Y和z归零｡

120
00:10:24,560 --> 00:10:30,680
‫您可以通过多种方式来实现这一点, 例如使用各种f向量构造函数之一｡

121
00:10:30,680 --> 00:10:39,620
‫现在, 一旦您将所有组件归零, 则将其x设置为MOV函数中的浮点输入参数的值｡

122
00:10:39,620 --> 00:10:45,410
‫完成此操作后, 继续调用add actor local offset, 传入增量位置｡

123
00:10:45,860 --> 00:10:48,140
‫暂停视频并立即执行此操作｡

124
00:10:51,220 --> 00:10:51,670
‫好吧, 我会的

125
00:10:51,670 --> 00:10:54,610
‫所以我回到了坦克指挥部的档案里｡

126
00:10:54,610 --> 00:11:02,440
‫现在, 我不再需要这个EWI日志, 所以我将把它取出来, 并创建一个称为Delta位置的F向量｡

127
00:11:02,440 --> 00:11:05,650
‫现在我可以使用其中一个F向量构造函数｡

128
00:11:05,650 --> 00:11:09,430
‫我已经向你们展示了如何创建一个全为零的新向量｡

129
00:11:09,430 --> 00:11:15,700
‫我会给你们展示另一种方法, 就是用f向量, 零向量, 来初始化｡

130
00:11:16,270 --> 00:11:21,520
‫这就是它听起来的样子, 一个向量, 每个分量为零｡

131
00:11:21,550 --> 00:11:23,980
‫这只是向你展示另一种方法｡

132
00:11:23,980 --> 00:11:25,510
‫所以我们有一个零向量｡

133
00:11:25,510 --> 00:11:31,270
‫现在我要取delta位置X, 并将其设为value｡

134
00:11:31,570 --> 00:11:39,670
‫最后, 我可以调用add actor local offset, 传入delta位置｡

135
00:11:40,630 --> 00:11:47,260
‫让我们编译一下, 回到编辑器, 我将把我的坦克调整方向,

136
00:11:47,260 --> 00:11:55,270
‫使它面向世界X方向, 然后我可以点击播放, 现在在视口中单击｡

137
00:11:55,270 --> 00:12:00,880
‫如果我按W键, 我就向前移动, 如果我按W键, 我就向后移动｡

138
00:12:00,880 --> 00:12:05,230
‫如果我同时按下两个按钮, 它们会互相抵消, 我就不会动了｡

139
00:12:05,230 --> 00:12:08,140
‫当然, 如果我不按任何东西, 我也不会动｡

140
00:12:08,140 --> 00:12:13,480
‫现在我们的坦克可以运动了, 但是有点慢, 所以我们要做一些调整.

141
00:12:13,480 --> 00:12:18,400
‫我们还将讨论如何用坦克微调这个机芯｡

142
00:12:18,640 --> 00:12:25,300
‫总之, 我们学习了ADD Actor､ 局部偏移以及世界空间和局部空间之间的区别｡

143
00:12:25,300 --> 00:12:29,800
‫在下一个视频中, 我们将继续完善这个移动机制与我们的坦克｡

144
00:12:30,010 --> 00:12:31,000
‫我很快就会见到你的｡

