﻿1
00:00:04,530 --> 00:00:05,310
‫你好, 欢迎｡

2
00:00:05,310 --> 00:00:11,370
‫在本讲座中, 我们将向您介绍动画蓝图的一个新部分, 称为状态机｡

3
00:00:11,370 --> 00:00:12,780
‫非常有用的一部分｡

4
00:00:12,780 --> 00:00:18,990
‫它允许我们做的是, 如果我们点击这里的布尔开关, 它将允许我们转换到跳跃状态,

5
00:00:18,990 --> 00:00:22,740
‫然后返回到接地状态｡

6
00:00:22,740 --> 00:00:27,090
‫让我们来看看这一切是如何工作的, 以及我们如何为自己创造这一切｡

7
00:00:28,050 --> 00:00:28,290
‫好吧, 我会的

8
00:00:28,290 --> 00:00:33,480
‫所以当我们跳跃的时候, 我们会有非常奇怪的行为, 这意味着我们最终会在半空中奔跑,

9
00:00:33,480 --> 00:00:36,270
‫这显然不是一个很好的外观｡

10
00:00:36,480 --> 00:00:42,570
‫现在, 为了解决这个问题, 我们需要学习一个全新的动画概念, 称为动画状态机｡

11
00:00:42,570 --> 00:00:44,640
‫所以这是属于动画蓝图的｡

12
00:00:44,640 --> 00:00:48,300
‫如果你还没把它点燃, 那就去点燃它吧｡

13
00:00:48,540 --> 00:00:55,740
‫在动画图中, 到目前为止, 我们在图中所做的一切都是通过这些节点完成的｡

14
00:00:55,860 --> 00:01:01,020
‫现在, 我想向大家展示的是我们如何添加一些新的东西, 一种叫做状态机的东西｡

15
00:01:01,110 --> 00:01:07,110
‫我们将右键单击, 这将显示在动画图中, 我们将查找状态机｡

16
00:01:07,110 --> 00:01:11,620
‫您可以看到, 这个新的状态机是其中一个选项｡

17
00:01:11,640 --> 00:01:15,380
‫现在, 我想告诉你们还有另一种方法｡

18
00:01:15,390 --> 00:01:17,910
‫如果你右键点击所有的方式回来｡

19
00:01:17,910 --> 00:01:24,720
‫因此, 如果我们右键单击动画图并搜索新的状态机, 则会出现此选项｡

20
00:01:24,720 --> 00:01:31,470
‫我们单击此处, 它会创建一个新节点,

21
00:01:31,740 --> 00:01:39,360
‫您可以看到该节点具有单个动画PO的输出引脚, 在“我的蓝图”的左手窗格中, 它在动画图下方创建了这个新的状态机｡

22
00:01:39,360 --> 00:01:47,670
‫因此, 如果您双击新状态机或在动画图中单击它, 您会看到它会将您带到这个新窗口｡

23
00:01:47,670 --> 00:01:48,900
‫所以这是另一回事｡

24
00:01:48,900 --> 00:01:53,850
‫我们已经有了动画图､ 事件图, 现在我们有了这个状态机图｡

25
00:01:54,510 --> 00:01:55,980
‫我们可以重新命名它｡

26
00:01:55,980 --> 00:02:01,770
‫因此, 我们可以通过在“我的蓝图”中单击状态机并按2来为状态机命名｡

27
00:02:01,770 --> 00:02:05,730
‫我们可以称之为运动, 因为这一切都是关于运动的｡

28
00:02:05,730 --> 00:02:07,710
‫那么状态机是做什么的呢？

29
00:02:07,710 --> 00:02:11,880
‫状态机是最简单的, 它是一组, 如果你右键单击｡

30
00:02:11,880 --> 00:02:14,190
‫事实上, 您可以看到这里有几个选项｡

31
00:02:14,190 --> 00:02:15,690
‫有评论, 有渠道｡

32
00:02:15,690 --> 00:02:19,950
‫但最重要的是它声明了它是一台充满状态的机器｡

33
00:02:19,950 --> 00:02:22,860
‫我可以在这里添加几个州, 给予你们有个概念｡

34
00:02:22,860 --> 00:02:25,050
‫所以我们有状态, 状态1, 状态2｡

35
00:02:25,350 --> 00:02:29,670
‫然后如果你拖离这个边界, 它会创建一个叫做过渡的东西｡

36
00:02:29,670 --> 00:02:32,550
‫因此, 您可以在状态之间创建转换｡

37
00:02:32,820 --> 00:02:38,730
‫我们有一个输入引脚, 它基本上告诉我们应该从哪个状态开始｡

38
00:02:39,120 --> 00:02:39,440
‫好吧, 我会的

39
00:02:39,450 --> 00:02:40,830
‫让我们退一步说｡

40
00:02:40,830 --> 00:02:42,300
‫这一切意味着什么？

41
00:02:42,960 --> 00:02:49,140
‫在每个给定的状态下,

42
00:02:49,140 --> 00:02:55,350
‫如果双击它, 您可以看到有一个输出引脚, 该输出引脚的使用方式与我们的动画图用于构建动画姿势的方式相同｡

43
00:02:55,350 --> 00:03:00,150
‫所以最简单的形式, 我们可以决定在这里贴一个动画｡

44
00:03:00,150 --> 00:03:03,540
‫例如, 选择任何旧动画的可播放性｡

45
00:03:03,540 --> 00:03:09,540
‫这就是当状态机处于给定状态时要播放的动画｡

46
00:03:09,930 --> 00:03:11,820
‫现在, 我们如何进入一个给定的状态？

47
00:03:11,820 --> 00:03:15,060
‫我们可能会进入一个给定的状态, 因为我们的入口节点指向它｡

48
00:03:15,060 --> 00:03:16,710
‫这是默认状态｡

49
00:03:16,710 --> 00:03:18,060
‫那就是我们开始的地方｡

50
00:03:18,270 --> 00:03:21,990
‫但是我们也可以通过一系列的转换来达到一个状态｡

51
00:03:22,350 --> 00:03:27,390
‫每个转换都有属性, 您可以双击一个转换, 然后再次看到它｡

52
00:03:27,390 --> 00:03:32,340
‫我们会弹出这个节点编辑器, 并且可以有某种布尔属性｡

53
00:03:32,340 --> 00:03:39,030
‫所以我不知道我们能不能有一些东西, 比如死了, 我们能得到死了, 我们能管到这里, 现在,

54
00:03:39,030 --> 00:03:41,820
‫每次死了都是真的｡

55
00:03:41,850 --> 00:03:48,120
‫如果我们处于原始状态, 我们将进行转换, 如果我们已经死亡, 我们将转换到状态1,

56
00:03:48,120 --> 00:03:52,200
‫然后开始播放状态1中的动画｡

57
00:03:52,200 --> 00:03:59,070
‫然后如果从状态1的转换是真的, 不管出于什么原因, 我们可能会转换到状态2｡

58
00:03:59,610 --> 00:04:05,880
‫好吧, 理论上这一切都很好, 但是这对我们在跑步实践中有什么帮助呢？

59
00:04:06,300 --> 00:04:11,130
‫例如, 我们可能需要一个状态, 显示为“接地”｡

60
00:04:11,760 --> 00:04:16,440
‫在接地状态下, 我们将进行地面运动｡

61
00:04:16,440 --> 00:04:21,520
‫那么如果我们回到我们的动画图, 我们的地面运动是什么？

62
00:04:21,540 --> 00:04:23,940
‫基本上这里什么都有｡

63
00:04:23,940 --> 00:04:30,720
‫在我们添加空闲战斗偏移之前, 有一个运动混合空间是我们的接地偏移｡

64
00:04:30,720 --> 00:04:40,110
‫我将在这里剪切节点, 连接移动状态机, 传递到目标偏移｡

65
00:04:40,230 --> 00:04:45,480
‫然后, 我将进入运动状态机, 进入接地状态, 在此处粘贴这些节点,

66
00:04:45,480 --> 00:04:48,600
‫并将它们连接到输出引脚｡

67
00:04:48,750 --> 00:04:52,620
‫让我们来看看动画图上发生了什么｡

68
00:04:53,130 --> 00:04:58,320
‫首先, 我们运行动画移动状态机｡

69
00:04:58,500 --> 00:05:04,380
‫因为我还没有把它连接起来, 但是因为入口指针指向接地状态, 我们自动进入接地状态, 它会进入那里,

70
00:05:04,380 --> 00:05:08,520
‫计算出来, 好的, 我们有一个混合空间,

71
00:05:08,520 --> 00:05:12,390
‫我们用变量混合它, 然后我们输出这个｡

72
00:05:12,390 --> 00:05:16,140
‫这就成为了我们整个状态机的输出｡

73
00:05:16,140 --> 00:05:23,490
‫然后它会进入战斗动画, 再进入死亡动画, 最后输出｡

74
00:05:23,820 --> 00:05:32,580
‫希望我们在编译时能看到, 实际上什么都没有改变, 因为我们的状态机只有一个状态.

75
00:05:33,270 --> 00:05:36,780
‫然而, 如果我们跳跃, 那么我们可以引入一个新的状态｡

76
00:05:36,780 --> 00:05:44,760
‫为此, 我们进入广告状态, 然后我们可以有空中作为一个状态, 在这个状态下, 我们不会播放相同的动画｡

77
00:05:44,760 --> 00:05:48,990
‫我们基本上是在动画图中切换这些动画｡

78
00:05:48,990 --> 00:05:54,210
‫在这一级, 我们说, 这个节点将切换到播放不同的动画时,

79
00:05:54,210 --> 00:05:56,070
‫在空中状态｡

80
00:05:56,070 --> 00:06:00,450
‫所以我们要进入空降状态, 并确保我们在这里选择了一个动画｡

81
00:06:00,450 --> 00:06:05,640
‫我将取下结果引脚, 然后查找跳转｡

82
00:06:05,640 --> 00:06:12,630
‫特别是我将寻找跳跃顶点战斗, 因为它有瞄准顶点, 因为这是跳跃的顶点,

83
00:06:12,630 --> 00:06:19,020
‫然后我们将离开动画图, 然后我们将进入运动水平,

84
00:06:19,020 --> 00:06:23,430
‫我们将注意到这里有一个问题｡

85
00:06:23,520 --> 00:06:28,110
‫我们没有办法到达空降状态, 因为没有一个过渡把我们带到那里｡

86
00:06:28,410 --> 00:06:34,950
‫我们要做的是从接地状态的边界拖动到悬空状态, 我们要在那里双击,

87
00:06:34,950 --> 00:06:38,340
‫因为我们要在这里创建一个过渡｡

88
00:06:38,340 --> 00:06:42,090
‫我将基于一个变量进行一个转换, 这个变量目前还没有｡

89
00:06:42,090 --> 00:06:50,610
‫如果我转到蓝图, 添加一个变量, 并在这里将is airborne作为布尔变量,

90
00:06:50,610 --> 00:06:58,050
‫然后我可以将其拉到这个节点编辑器中, 进行接地过渡｡

91
00:06:58,710 --> 00:07:05,910
‫然后我们可以把它连接起来, 这样我们就可以说, 当我们在空中时,

92
00:07:06,270 --> 00:07:11,490
‫这种过渡是可能的, 然后我们想要一个从空中到地面的匡威过渡｡

93
00:07:11,640 --> 00:07:19,410
‫如果我们双击它, 我们可以输入一个结节点, 它基本上否定了布尔值,

94
00:07:19,410 --> 00:07:25,850
‫然后我们也可以输入is airborne布尔值｡

95
00:07:25,860 --> 00:07:32,280
‫最后, 如果我们转到右边的动画预览编辑器选项卡, 我们可以打开这个开关,

96
00:07:32,280 --> 00:07:38,310
‫进入悬空状态, 播放悬空动画｡

97
00:07:38,310 --> 00:07:44,430
‫如果我们再翻转一次, 我们就回到了我们的地面运动, 你可以看到,

98
00:07:44,430 --> 00:07:46,500
‫所有这些都将与我们的瞄准球一起工作｡

99
00:07:46,500 --> 00:07:50,820
‫如果我把瞄准球指向上方, 那么我就击中了一个空降兵｡

100
00:07:50,820 --> 00:07:54,530
‫你可以看到我们一直在瞄准我们应该瞄准的方向｡

101
00:07:54,540 --> 00:08:00,750
‫好的, 我给你们一个小挑战,

102
00:08:00,750 --> 00:08:07,470
‫除了像这样设置状态机之外, 如果你们还没有跟上, 我希望你们尝试一下, 看看是否能找到一种方法｡

103
00:08:07,470 --> 00:08:15,360
‫当我们点击的那一刻是在空中的, 我们得到了这个动画的奇怪的循环, 这个空中的动画｡

104
00:08:15,360 --> 00:08:18,810
‫看看你能不能让这个动画不循环｡

105
00:08:18,810 --> 00:08:24,870
‫因此, 如果你能找到你的方式围绕anim蓝图, 这可能是相当困难的导航, 看看你是否能找到该属性｡

106
00:08:25,170 --> 00:08:25,680
‫欢迎回来｡

107
00:08:25,680 --> 00:08:28,260
‫希望你已经试过了｡

108
00:08:28,260 --> 00:08:30,510
‫那么我们该从哪里开始思考呢？

109
00:08:30,510 --> 00:08:33,120
‫我们将如何开始围绕这一蓝图进行导航？

110
00:08:33,690 --> 00:08:39,600
‫首先, 我们知道这个问题来自于我们的运动状态机｡

111
00:08:39,840 --> 00:08:46,680
‫让我们进入这里, 我们可以看到, 正在播放的状态是悬空状态.

112
00:08:46,680 --> 00:08:52,860
‫我们来看看, 你可以看到跳跃顶点的战斗是一圈又一圈的, 很明显,

113
00:08:52,860 --> 00:08:55,260
‫它造成了这个问题｡

114
00:08:55,470 --> 00:09:03,540
‫因此, 如果我们单击该动画并查看详细信息, 您可以看到我们已经设置了此循环动画属性｡

115
00:09:03,990 --> 00:09:11,460
‫如果我取消选中它, 然后重新编译我们的动画蓝图, 然后我去打是空降｡

116
00:09:11,730 --> 00:09:21,330
‫你可以看到, 它只播放一次跳跃顶点, 然后继续保持该动画, 直到我们取消选中该框,

117
00:09:21,330 --> 00:09:25,830
‫此时它转换回移动状态机｡

118
00:09:25,830 --> 00:09:29,070
‫让我们看看所有的工作, 如果我们有一点速度, 如果我们是移动｡

119
00:09:29,070 --> 00:09:36,030
‫我们在这里跑步, 我们加上我们的是空中的, 它进入我们的跳跃顶点, 直到我们不再是空中的,

120
00:09:36,030 --> 00:09:40,350
‫在这一点上, 我们过渡回在地面上跑步｡

121
00:09:40,350 --> 00:09:41,400
‫这节课就讲到这里｡

122
00:09:41,400 --> 00:09:46,710
‫我们已经了解了一个全新的概念, 我们已经了解了很多关于状态的动画状态机的概念,

123
00:09:46,710 --> 00:09:52,890
‫以及如何通过转换进入状态, 我们已经了解了如何通过布尔值来驱动状态机,

124
00:09:52,890 --> 00:09:57,690
‫以允许我们进入跳转状态｡

125
00:09:57,690 --> 00:10:02,250
‫在下一节课中, 我们会把它和游戏性联系起来, 并进一步改进.

