﻿1
00:00:04,260 --> 00:00:05,070
‫你好, 欢迎｡

2
00:00:05,070 --> 00:00:08,490
‫在这节课上, 我们将学习AI Focus｡

3
00:00:08,490 --> 00:00:14,850
‫这就是虚幻中的一些内置功能, 我们可以用它来确保我们的AI角色在世界各地跟随我们,

4
00:00:14,850 --> 00:00:19,560
‫无论我们去哪里都能瞄准我们｡

5
00:00:19,560 --> 00:00:22,080
‫让我们来看看焦点是如何工作的｡

6
00:00:23,190 --> 00:00:26,220
‫所以我现在做的不多｡

7
00:00:26,220 --> 00:00:33,690
‫我认为它做任何事情的第一个出发点都是它转向并面对我们的球员｡

8
00:00:33,990 --> 00:00:40,640
‫为了做到这一点, 我们可以使用人工智能的一些内置功能, 即设置焦点｡

9
00:00:40,650 --> 00:00:47,120
‫所以如果你看一下AI控件并寻找设置焦点, 这里有几个相关的方法｡

10
00:00:47,130 --> 00:00:52,380
‫一个是设定焦点, 另一个是设定焦点, 紧接着的一个是清晰焦点｡

11
00:00:52,770 --> 00:01:03,830
‫所以这里的想法是你可以告诉AI控制器它应该试图聚焦在一个特定的点上或者它应该试图聚焦在一个特定的演员上｡

12
00:01:03,840 --> 00:01:08,910
‫如果你选择后者, 如果你选择关注一个演员, 那么当演员移动时,

13
00:01:08,910 --> 00:01:12,540
‫你会一直关注这个演员｡

14
00:01:12,540 --> 00:01:17,310
‫然而, 如果你选择专注于某个特定的点, 你会一直专注于那个点｡

15
00:01:17,310 --> 00:01:23,600
‫但如果该点是参与者的位置, 则当该参与者移动时, 该点不会更新｡

16
00:01:23,610 --> 00:01:29,700
‫所以通常焦点是固定在世界上的东西, 演员是移动的东西, 这是有意义的｡

17
00:01:29,700 --> 00:01:36,360
‫这里有一个清晰的焦点函数, 它告诉我们应该停止关注某件事｡

18
00:01:36,360 --> 00:01:37,110
‫原来如此｡

19
00:01:37,110 --> 00:01:39,030
‫你设定焦点, 你清除焦点｡

20
00:01:39,120 --> 00:01:45,090
‫这里有一个优先级变量, 我们稍后会讲到它.

21
00:01:45,090 --> 00:01:48,360
‫但这里的想法是, 你有不同的优先级｡

22
00:01:48,360 --> 00:01:55,470
‫我们这里有一个枚举, 默认情况下, set focus和set focus point设置为gameplay｡

23
00:01:55,470 --> 00:02:05,340
‫如果我们看一下枚举的定义, 你可以看到有一个默认的移动和游戏, 它们基本上是按优先级顺序列出的｡

24
00:02:05,340 --> 00:02:07,500
‫因此游戏性将具有最高优先级｡

25
00:02:07,500 --> 00:02:09,960
‫如果你把某个东西设置为游戏性, 那就是它要看的东西｡

26
00:02:09,960 --> 00:02:15,690
‫如果因为你清除了游戏优先级而没有设置游戏优先级, 那么它会看看它要去哪里,

27
00:02:15,690 --> 00:02:24,210
‫如果它没有移动到任何地方, 那么它会只看默认的优先级, 这可能只是在远处的某个地方｡

28
00:02:24,210 --> 00:02:31,290
‫所以如果你有一个有巡逻行为的警卫, 他会默认寻找他下一个移动到哪里, 一旦他到达那里｡

29
00:02:31,290 --> 00:02:34,140
‫你可以设置一个默认点让他查看｡

30
00:02:34,140 --> 00:02:40,260
‫所以, 我不知道, 也许他正在寻找进入他的特定区域的方式或类似的东西｡

31
00:02:40,260 --> 00:02:43,020
‫不管怎么说, 这就是重点所在｡

32
00:02:43,020 --> 00:02:47,460
‫正如我所说的, 我们不必太多地使用它们, 因为我们主要是要使用这个游戏功能来说,

33
00:02:47,460 --> 00:02:51,840
‫嘿, 那里发生了一些有趣的事情｡

34
00:02:51,840 --> 00:02:54,690
‫这就是那个玩家, 让我们来看看他｡

35
00:02:54,960 --> 00:03:02,820
‫所以我们要做的第一件事是在AI控制器上实现一个开始播放, 这样我们就可以把焦点放在开始播放上｡

36
00:03:02,820 --> 00:03:05,880
‫这只是要向我们展示这个函数是如何工作的｡

37
00:03:05,880 --> 00:03:09,810
‫我们之前可能已经看到, 开始Play是一个受保护的函数.

38
00:03:09,810 --> 00:03:15,150
‫因此, 我们需要创建一个受保护的部分, 然后我们希望我们的虚拟空间开始播放｡

39
00:03:15,150 --> 00:03:23,130
‫为了安全起见, 我们在这里放了override关键字, 然后我们继续在C++中创建实现.

40
00:03:23,250 --> 00:03:30,030
‫我们要跟注超级开始, 因为这总是很好的做法, 否则蓝图中的东西就会出错｡

41
00:03:30,030 --> 00:03:37,380
‫如果你忘记了这样做, 如果你在创建了一个开始打法后遇到了蓝图问题, 请确保你检查你是在跟超级｡

42
00:03:37,710 --> 00:03:44,730
‫然后在这一点上, 我们要做的是抓住棋子演员, 并设置它的重点｡

43
00:03:45,930 --> 00:03:52,710
‫要得到一个兵演员,

44
00:03:52,710 --> 00:03:59,940
‫我们可以使用一个函数从游戏静态标题, 如果你悬停在这或在控制p中搜索找到游戏静态, 你可以发现这是在命运正斜杠游戏静态｡

45
00:03:59,940 --> 00:04:04,530
‫因此, 我们将返回到shooter I控制器CP, 并将其包括在内｡

46
00:04:04,530 --> 00:04:11,730
‫所以hash include, 然后是kismet, 正斜杠, 然后我们应该可以做U,

47
00:04:11,730 --> 00:04:19,530
‫游戏静态, 然后使用一个函数, 我发现这个函数非常有用, 就是get, player, pawn,

48
00:04:19,530 --> 00:04:24,270
‫它会返回一个指向player, pawn的指针｡

49
00:04:24,270 --> 00:04:29,190
‫它通过接收一个世界上下文对象和播放器索引来实现｡

50
00:04:29,190 --> 00:04:31,560
‫在我们的例子中, 我们要找出零参与者.

51
00:04:31,650 --> 00:04:36,150
‫所以让我们来玩一个兵和做一个得到世界｡

52
00:04:36,150 --> 00:04:42,060
‫然后我们会找到索引0, 然后我们会把它保存到一个变量里, 一个兵.

53
00:04:42,890 --> 00:04:46,040
‫在这将是球员—喜欢｡

54
00:04:46,040 --> 00:04:48,050
‫所以这就是我们要关注的｡

55
00:04:49,990 --> 00:04:53,250
‫所以现在是你设定焦点的挑战时刻｡

56
00:04:53,260 --> 00:04:58,930
‫使用播放器——我们刚刚使用我们的游戏静态函数调用, 设置, 聚焦,

57
00:04:58,930 --> 00:05:03,370
‫并在世界上测试它, 看看你是否在我们不同的角色周围移动｡

58
00:05:03,370 --> 00:05:04,870
‫他们会跟着你吗？

59
00:05:04,870 --> 00:05:06,150
‫他们的目光会追随你吗？

60
00:05:06,160 --> 00:05:07,840
‫暂停视频, 一探究竟｡

61
00:05:08,900 --> 00:05:09,200
‫好吧, 我会的

62
00:05:09,200 --> 00:05:09,880
‫欢迎回来｡

63
00:05:09,890 --> 00:05:11,990
‫所以希望这不是太难｡

64
00:05:11,990 --> 00:05:16,850
‫我们需要调用set focus, 因为set focus在父级上｡

65
00:05:16,850 --> 00:05:19,310
‫我们不需要在这里找到任何指针｡

66
00:05:19,310 --> 00:05:22,640
‫我们定好了目标, 看看这是什么？

67
00:05:22,640 --> 00:05:28,040
‫我们只需要把演员基本上是因为优先级已经得到了一个默认的被设置为游戏, 这是我们想要的无论如何,

68
00:05:28,040 --> 00:05:34,940
‫所以我们可以只是在我们的球员典当, 这应该是谁, 我们的重点｡

69
00:05:34,940 --> 00:05:36,170
‫所以让我们继续构建｡

70
00:05:37,440 --> 00:05:42,750
‫一旦完成, 让我们跳到虚幻和发挥｡

71
00:05:43,970 --> 00:05:46,490
‫不知道为什么我这里还有个讨厌的复活点｡

72
00:05:46,520 --> 00:05:52,700
‫让我们继续删除, 并确保我们产卵附近, 我们的眼睛字符｡

73
00:05:52,970 --> 00:05:53,840
‫我们走吧｡

74
00:05:53,870 --> 00:05:59,030
‫让我们去看看, 绕着这个角色走一圈, 我立刻就能看到他转向我的兵,

75
00:05:59,030 --> 00:06:02,780
‫无论我的兵走向哪里｡

76
00:06:02,780 --> 00:06:06,590
‫这就是人工智能的开始｡

77
00:06:06,590 --> 00:06:11,280
‫我知道这不多, 但我们会在下一节课中更深入地讨论｡

78
00:06:11,300 --> 00:06:12,200
‫我会看到你在那里｡

