﻿1
00:00:04,310 --> 00:00:05,240
‫你好, 欢迎｡

2
00:00:05,240 --> 00:00:16,640
‫在这节课上, 我们将介绍两种新的资产行为树和黑板, 这两种资产让我们可以用A做一些非常有趣的事情｡

3
00:00:16,640 --> 00:00:16,640
‫我...我...

4
00:00:16,640 --> 00:00:18,740
‫允许我们搞得复杂得多｡

5
00:00:18,740 --> 00:00:23,600
‫我非常轻松地让我们深入了解一下如何使用和设置它们｡

6
00:00:25,140 --> 00:00:25,410
‫好吧, 我会的

7
00:00:25,410 --> 00:00:28,970
‫所以我们想创造一些复杂的人工智能行为｡

8
00:00:28,980 --> 00:00:33,960
‫在虚幻中我们通常使用一个叫做行为树的系统来完成这个任务｡

9
00:00:33,990 --> 00:00:35,050
‫这些是什么？

10
00:00:35,070 --> 00:00:38,990
‫最好的办法就是创造一个｡

11
00:00:39,000 --> 00:00:41,970
‫现在, 让我们继续, 右键单击并开始｡

12
00:00:41,970 --> 00:00:45,150
‫我们在看人工智能｡

13
00:00:45,150 --> 00:00:48,450
‫这里有两个行为选项, 树和黑板｡

14
00:00:48,480 --> 00:00:51,050
‫这两样我们都要｡

15
00:00:51,060 --> 00:00:54,650
‫让我们从行为树开始｡

16
00:00:54,660 --> 00:00:59,670
‫它的前缀是BHT, 我们称之为“敌人”｡

17
00:00:59,670 --> 00:01:01,320
‫所以行为树敌｡

18
00:01:01,350 --> 00:01:03,780
‫我就用这个结尾｡

19
00:01:03,780 --> 00:01:04,490
‫你去那里｡

20
00:01:04,500 --> 00:01:09,180
‫我们还需要在那里创造另一个东西, 那就是黑板｡

21
00:01:09,180 --> 00:01:11,250
‫黑板到底是什么？

22
00:01:11,250 --> 00:01:12,300
‫我们一会儿就讲到这一点｡

23
00:01:12,300 --> 00:01:15,930
‫但我们就把它叫做b-b下划线敌人｡

24
00:01:15,940 --> 00:01:19,110
‫我之前说过, 黑板拍为行为树｡

25
00:01:19,110 --> 00:01:22,320
‫既然说到这里, 我们有一些与I相关的东西｡

26
00:01:22,320 --> 00:01:29,640
‫我将创建一个名为A的新文件夹｡  一､  我们要移动黑板, 行为树｡

27
00:01:29,700 --> 00:01:33,900
‫这里有我们的射手, 人工智能控制器｡

28
00:01:33,900 --> 00:01:40,530
‫所有这些都进入我移动到这里, 然后我们可以进入我们的AI文件夹来处理AI相关的一切｡

29
00:01:41,070 --> 00:01:45,450
‫让我们首先打开行为树, 并将其停靠到主窗口｡

30
00:01:45,660 --> 00:01:47,550
‫那么这到底是什么呢？

31
00:01:47,550 --> 00:01:53,880
‫因此, 这允许我们创建行为树, 你可能会说, 我们在这里有一部分行为是为了跟踪｡

32
00:01:53,880 --> 00:01:55,350
‫其中一部分是为了钓鱼｡

33
00:01:55,350 --> 00:02:00,180
‫一部分是为了其他的事情, 开门, 所有这些事情｡

34
00:02:00,180 --> 00:02:06,480
‫它们通常将行为构造为大量的行为树和子树等等｡

35
00:02:06,480 --> 00:02:15,780
‫我们将看到所有的细节, 但足以说, 这是一个伟大的方式把自然行为在您的游戏｡

36
00:02:16,080 --> 00:02:17,610
‫现在不是结束的时候了｡

37
00:02:17,610 --> 00:02:19,440
‫有很多人工智能技术｡

38
00:02:19,440 --> 00:02:23,820
‫这可能不是一个你想去为您的游戏, 但它是一个伟大的开始,

39
00:02:23,820 --> 00:02:26,040
‫你可以实现相当多的与它｡

40
00:02:26,520 --> 00:02:30,620
‫接下来我们可以看到, 在顶部, 这两个资产是关联的｡

41
00:02:30,630 --> 00:02:33,000
‫行为树和黑板｡

42
00:02:33,000 --> 00:02:35,100
‫黑板到底是什么？

43
00:02:35,100 --> 00:02:42,240
‫黑板就像是A的记忆｡  一､  它实际上是存储一堆变量的地方｡

44
00:02:42,240 --> 00:02:46,650
‫你从游戏中输入它们,

45
00:02:46,650 --> 00:02:51,150
‫就像我们在动画系统中做的那样, 你有这些不同的属性, 这些属性是由游戏设置的｡

46
00:02:51,150 --> 00:02:53,820
‫我们对人工智能也做同样的事情｡

47
00:02:53,850 --> 00:03:00,180
‫我们设置了很多属性, 这些属性给予了游戏世界的信息,

48
00:03:00,180 --> 00:03:03,540
‫然后行为树利用这些属性来决定它要做什么｡

49
00:03:03,540 --> 00:03:10,680
‫它可以设置这些属性, 它可以把它们当作记忆, 它可以从这些属性中读取所有这些可爱的东西｡

50
00:03:10,680 --> 00:03:17,790
‫那么, 考虑到这一点, 我们如何在黑板中建立行为树, 使它们相互联系呢？

51
00:03:18,030 --> 00:03:20,460
‫好吧, 我们将在详细信息窗格中展开｡

52
00:03:20,460 --> 00:03:26,010
‫你可以看到这里有一个黑板资产, 它似乎自动地为我们填写了它,

53
00:03:26,010 --> 00:03:32,790
‫这样黑板资产就链接到了这个b b b敌人I黑板资产｡

54
00:03:33,000 --> 00:03:38,730
‫现在, 我们将离开C++一段时间来使用这些资产, 因为很明显,

55
00:03:38,730 --> 00:03:42,420
‫行为树和黑板完全在编辑器中｡

56
00:03:42,420 --> 00:03:44,460
‫它们不是蓝图本身｡

57
00:03:44,460 --> 00:03:49,320
‫它们是自己的编辑器工具, 我们可以用C++与它们交互｡

58
00:03:49,320 --> 00:03:53,580
‫但这意味着我们在接下来的几节课里, 除了C++, 还会用到这个编辑器｡

59
00:03:53,580 --> 00:03:54,960
‫但没有那么多蓝图｡

60
00:03:54,960 --> 00:04:02,400
‫所以我们有了行为树和黑板是很棒的, 但是我们到底要怎么使用它呢？

61
00:04:02,400 --> 00:04:05,580
‫好吧, 为了这个, 我们回到我们的AI控制器｡

62
00:04:05,580 --> 00:04:14,640
‫如果你还记得, I控制器完全负责运行我们的行为, 这里也不例外｡

63
00:04:14,820 --> 00:04:19,110
‫行为树只是AI控制器可以使用或运行的另一个东西｡

64
00:04:19,260 --> 00:04:30,090
‫我们要做的就是转到人工智能控件, 我们需要在蓝图中引用我们希望它运行的行为树｡

65
00:04:30,600 --> 00:04:41,640
‫我首先要做的是转到控制CP并注释掉TTIC中的内容, 因为我们将用行为树功能替换此功能｡

66
00:04:41,760 --> 00:04:46,440
‫这意味着我可以去掉这个接受半径因为我们不再需要它了｡

67
00:04:46,440 --> 00:04:51,180
‫我们将使用一个指向新行为的指针｡

68
00:04:51,780 --> 00:04:59,100
‫我必须拼出这个美国方式树和指针, 这就是我们想要的行为树｡

69
00:04:59,100 --> 00:05:02,310
‫我需要向前声明它, 在它前面有一个类｡

70
00:05:02,310 --> 00:05:08,910
‫然后基本上在这里, 我想说的是, 这是人工智能的行为和｡

71
00:05:09,770 --> 00:05:13,340
‫为了保持一致, 我在这里保留美式拼写｡

72
00:05:13,340 --> 00:05:17,630
‫这就是我们现在想要的人工智能行为来运行这个行为｡

73
00:05:17,630 --> 00:05:18,560
‫再简单不过了｡

74
00:05:18,560 --> 00:05:22,700
‫同样, 眼睛控制有一个内置的功能｡

75
00:05:22,700 --> 00:05:24,500
‫我们有这种奔跑行为｡

76
00:05:24,500 --> 00:05:26,390
‫树函数转换为布尔值｡

77
00:05:26,390 --> 00:05:30,650
‫不管你能不能成功地执行它, 开始执行它, 也就是说｡

78
00:05:30,650 --> 00:05:35,930
‫它接收指定给新行为树的节拍资产｡

79
00:05:36,290 --> 00:05:40,040
‫这就是我们要用到的, 我们可以在开始时重新做｡

80
00:05:40,040 --> 00:05:44,660
‫所以我们要做的是, 首先, 我们要检查这里是否有一个行为树｡

81
00:05:44,660 --> 00:05:47,210
‫所以我们要说I行为｡

82
00:05:48,270 --> 00:05:53,640
‫不等于空指针, 因为我们不希望在其他情况下使用它｡

83
00:05:53,640 --> 00:05:59,130
‫然后我们可以运行行为树, 称为人工智能行为｡

84
00:05:59,160 --> 00:06:06,420
‫让人工智能行为运行起来真的很简单, 我们可以继续编译｡

85
00:06:07,420 --> 00:06:12,790
‫对于行为树, 我们还可以做的一件事是, 我们可以看到它们在运行时运行, 但要做到这一点,

86
00:06:12,790 --> 00:06:15,150
‫你需要在这里有一些节点｡

87
00:06:15,160 --> 00:06:18,910
‫所以我们只需要添加一个节点, 而不需要完全了解它的功能｡

88
00:06:18,910 --> 00:06:23,830
‫我将添加一个序列节点, 并通过从根节点向下拖动来将其连接起来,

89
00:06:23,830 --> 00:06:29,350
‫当鼠标悬停在根节点上时, 根节点下面的位将突出显示, 而序列节点上面的位将突出显示｡

90
00:06:29,440 --> 00:06:30,850
‫我要把它保存起来｡

91
00:06:31,240 --> 00:06:39,700
‫我将点击“播放”, 进入我的行为树资产, 您应该能够在此处看到一个下拉列表, 但我们没有看到,

92
00:06:39,700 --> 00:06:43,420
‫因为它当前没有运行｡

93
00:06:43,420 --> 00:06:44,530
‫所以我们别玩了｡

94
00:06:45,010 --> 00:06:46,660
‫为什么它不运行？

95
00:06:46,660 --> 00:06:49,360
‫因为我们还没把它连接到射手控制器上｡

96
00:06:49,360 --> 00:06:52,840
‫让我们来做一个小挑战, 让你把它连接起来｡

97
00:06:53,110 --> 00:06:54,610
‫希望不会太难｡

98
00:06:55,060 --> 00:06:56,170
‫好的欢迎回来｡

99
00:06:56,170 --> 00:07:01,330
‫所以如果我们去看看这里, 我们在寻找我们的人工智能行为｡

100
00:07:01,510 --> 00:07:04,300
‫出于某种原因, 它需要重新编译才能显示出来｡

101
00:07:04,300 --> 00:07:04,930
‫但它在这里｡

102
00:07:04,930 --> 00:07:06,760
‫AI行为是我们想要的｡

103
00:07:06,790 --> 00:07:07,780
‫我们单击下拉菜单｡

104
00:07:07,780 --> 00:07:10,630
‫现在只有一个选择, 因为我们只有一个行为树｡

105
00:07:10,630 --> 00:07:14,200
‫因此, 让我们选择该文件并编译和保存｡

106
00:07:14,200 --> 00:07:17,380
‫如果我们现在继续玩这个游戏｡

107
00:07:18,010 --> 00:07:20,830
‫且去看看我们打败的敌人｡

108
00:07:21,280 --> 00:07:26,140
‫您可以看到,

109
00:07:26,140 --> 00:07:33,130
‫它突出显示了当前正在运行的节点, 并且在暂停停止按钮旁边有一个小下拉框, 它告诉您当前正在观察哪个I控制器的行为树｡

110
00:07:33,160 --> 00:07:38,350
‫这是一个很棒的功能, 你可以跳进去, 好吧, 为什么？

111
00:07:38,350 --> 00:07:39,760
‫我呆呆地站着不动｡

112
00:07:39,760 --> 00:07:41,290
‫他为什么不去追那个玩家？

113
00:07:41,290 --> 00:07:47,110
‫你可以看到他现在的行为是哪一部分, 然后说, 啊, 那个, 你知道, 那个东西出问题了｡

114
00:07:47,140 --> 00:07:48,910
‫这对调试很有帮助｡

115
00:07:48,910 --> 00:07:53,890
‫你可以去看看你所有的人工智能在世界上都在通过使用这个下拉菜单｡

116
00:07:54,010 --> 00:07:54,550
‫好东西｡

117
00:07:54,550 --> 00:07:55,570
‫这节课就讲到这里｡

118
00:07:55,570 --> 00:08:04,600
‫在下一节课中, 我们将学习如何用C++在人工智能的黑板内存中设置信息｡

119
00:08:04,600 --> 00:08:05,560
‫我会看到你在那里｡

