﻿1
00:00:04,420 --> 00:00:06,220
‫你好, 欢迎回来｡

2
00:00:06,250 --> 00:00:13,210
‫现在, 我们已经为坦克和塔创建了处理死亡的能力,

3
00:00:13,210 --> 00:00:22,120
‫我们看到这涉及到一些额外的步骤, 因为我们访问了玩家控制器, 以禁用输入和禁用显示鼠标光标｡

4
00:00:22,150 --> 00:00:30,210
‫现在, 我们希望有自己的自定义播放器控制器类, 以便我们可以向其添加功能, 为我们处理这一点｡

5
00:00:30,220 --> 00:00:36,010
‫然后我们想基于这个类创建一个蓝图, 这样我们就可以访问播放器控制器上的一些公开变量,

6
00:00:36,010 --> 00:00:43,630
‫例如, 一旦我们实际开始显示鼠标光标, 要显示哪个鼠标光标｡

7
00:00:43,660 --> 00:00:50,020
‫因此, 我们将创建一个播放器控制器类, 并添加启用和禁用输入功能｡

8
00:00:50,020 --> 00:00:54,490
‫然后, 我们将创建一个蓝图, 并在蓝图中设置鼠标光标类型｡

9
00:00:54,520 --> 00:00:58,030
‫现在你知道如何创建这个类了｡

10
00:00:58,030 --> 00:01:04,480
‫因此, 您将为您的挑战创建一个播放器控制器类, 创建一个新的C++类,

11
00:01:04,480 --> 00:01:07,300
‫并选择播放器控制器作为父类｡

12
00:01:07,300 --> 00:01:11,800
‫把这个调叫做坦克, 播放器控制器或者类似的东西｡

13
00:01:11,800 --> 00:01:15,760
‫完成后, 根据该类创建蓝图｡

14
00:01:15,760 --> 00:01:22,330
‫现在, 一旦你有了蓝图, 你就可以把它指定为游戏模式蓝图中的默认玩家控制器｡

15
00:01:22,360 --> 00:01:25,180
‫在游戏模式中这样做, 蓝图本身｡

16
00:01:25,360 --> 00:01:30,280
‫现在暂停视频并为坦克创建播放器控制器类｡

17
00:01:33,230 --> 00:01:33,680
‫好吧, 我会的

18
00:01:33,680 --> 00:01:34,790
‫所以我又回到了编辑部｡

19
00:01:34,790 --> 00:01:42,170
‫我将右键单击“新建C++类”并向下滚动, 我将看到播放器控制器是此处的一个选项｡

20
00:01:42,170 --> 00:01:48,320
‫所以我将选择播放器控制器并命名我的新播放器控制器tune tank｡

21
00:01:49,110 --> 00:01:53,190
‫播放器､ 控制器, 然后单击创建类｡

22
00:01:53,190 --> 00:01:56,790
‫这是我的新播放器控制器类｡

23
00:01:56,820 --> 00:02:00,030
‫下一步是在此基础上创建蓝图｡

24
00:02:00,030 --> 00:02:06,060
‫我回到了编辑器中, 我没有告诉你要这样做, 但我将在我的蓝图文件夹中创建一个新文件夹,

25
00:02:06,060 --> 00:02:09,360
‫名为“播放器控制器”｡

26
00:02:10,440 --> 00:02:15,480
‫如果你想要相同的文件夹结构, 你可以现在创建这个文件夹, 如果你还没有这样做,

27
00:02:15,480 --> 00:02:19,170
‫然后把你的播放器控制器蓝图移动到这个｡

28
00:02:19,170 --> 00:02:23,610
‫如果您不知道如何将蓝图从一个文件夹移动到另一个文件夹, 这很简单｡

29
00:02:23,640 --> 00:02:31,740
‫转到包含蓝本的文件夹, 单击并拖动到正确的文件夹, 然后单击“move here”（移动到此处）｡

30
00:02:31,890 --> 00:02:38,760
‫现在, 我不想将我的投射物移动到这个文件夹中, 所以我只需要在内容浏览器中单击这里来取消该操作｡

31
00:02:38,760 --> 00:02:41,370
‫现在我有了一个播放器控制器文件夹｡

32
00:02:41,370 --> 00:02:47,760
‫我将右击并单击蓝图类, 在这个搜索中, 我将寻找卡通坦克, 玩家控制器,

33
00:02:47,760 --> 00:02:51,460
‫并选择该类, 然后单击选择｡

34
00:02:51,480 --> 00:02:57,180
‫现在我可以把这个哔声叫做下划线toon tank播放器控制器｡

35
00:02:57,390 --> 00:02:59,070
‫所以我现在有了一个播放器控制器｡

36
00:02:59,070 --> 00:03:02,100
‫现在我需要将其设置为默认的播放器控制器｡

37
00:03:02,100 --> 00:03:08,220
‫所以我要去游戏模式文件夹, 打开哔哔声, 调整坦克, 游戏模式, 并打开完整的蓝图｡

38
00:03:08,220 --> 00:03:11,670
‫这里我看到了播放器控制器类｡

39
00:03:11,940 --> 00:03:19,950
‫我将点击下拉菜单, 选择BP调坦克, 播放器控制器和编译, 保存和关闭了｡

40
00:03:19,950 --> 00:03:23,250
‫现在我们有了自定义播放器控制器类｡

41
00:03:23,250 --> 00:03:25,680
‫我们已经准备好向其中添加一些功能｡

42
00:03:25,680 --> 00:03:31,110
‫所以我想要的是一个函数, 它可以设置玩家的启用状态,

43
00:03:31,110 --> 00:03:34,890
‫无论玩家是否被启用来添加移动坦克的输入｡

44
00:03:34,890 --> 00:03:39,690
‫现在我打算在演员死的时候从游戏模式调用这个｡

45
00:03:39,690 --> 00:03:44,940
‫所以我在这里创建一个公共区, 函数是空的.

46
00:03:44,940 --> 00:03:55,950
‫我只需要调用这个set player enabled state, 它可以取一个布尔值, 称为B player enabled.

47
00:03:56,550 --> 00:04:01,830
‫这样, 如果我们调用这个函数, 如果我们想启用播放器, 我们可以传入true,

48
00:04:01,830 --> 00:04:04,620
‫如果我们想禁用播放器, 我们可以传入false｡

49
00:04:04,620 --> 00:04:09,090
‫因此, 让我们在tune tank､ 播放器和控制器中实现此功能｡

50
00:04:09,360 --> 00:04:14,100
‫这是我的函数, 当然我需要类名.

51
00:04:14,100 --> 00:04:20,370
‫它将是一个调音器, 播放器, 控制器, 还有一个范围解析操作符｡

52
00:04:20,370 --> 00:04:22,860
‫这个函数非常简单｡

53
00:04:22,860 --> 00:04:28,320
‫它将检查B player enabled的值, 我们可以用一个简单的if检查来完成.

54
00:04:28,320 --> 00:04:35,460
‫所以我会说如果B玩家被启用, 我想访问兵, 启用或禁用输入, 访问兵的方法是使用这个玩家控制器拥有的函数,

55
00:04:35,460 --> 00:04:42,390
‫get pawn.

56
00:04:42,390 --> 00:04:47,520
‫这个返回和一个卒和卒类具有这个功能｡

57
00:04:47,520 --> 00:04:55,860
‫我们已经看到, Enable input和enable input需要一个播放器控制器, 这样我们就可以传入它｡

58
00:04:56,190 --> 00:05:02,490
‫现在我得到了红色的曲线, 因为我们需要包含这个兵类类型,

59
00:05:02,490 --> 00:05:09,090
‫我们可以很容易地看到这个兵的包含, 通过查看一个兵的虚幻引擎文档, 或者我们可以简单地转到我们的基本兵类,

60
00:05:09,090 --> 00:05:13,890
‫它继承自一个兵｡

61
00:05:14,070 --> 00:05:19,890
‫因为它继承自兵, 我们看到它需要包含兵头, 这样我就可以复制它的游戏框架,

62
00:05:19,890 --> 00:05:23,430
‫斜线兵.

63
00:05:24,150 --> 00:05:26,850
‫所以回到调坦克球员控制器｡

64
00:05:26,850 --> 00:05:30,900
‫我可以将包含内容粘贴在顶部, 以去掉那些红色的波浪线｡

65
00:05:30,900 --> 00:05:37,470
‫这就解决了B player enabled为true的情况, 但我们还需要一个LS情况｡

66
00:05:38,160 --> 00:05:45,210
‫在LS的情况下, 我们将调用get pawn, 这里有一个类似于enable input的函数, 它被设计来禁用输入,

67
00:05:45,210 --> 00:05:50,580
‫正如你可能猜到的, 它被称为, disable input｡

68
00:05:50,580 --> 00:05:55,020
‫这还需要一个玩家控制器, 我们将在这里传递它｡

69
00:05:55,020 --> 00:06:00,480
‫现在播放器控制器显示鼠标光标, 我们也要设置它｡

70
00:06:00,480 --> 00:06:04,500
‫我们希望根据是否应启用播放器来设置它｡

71
00:06:04,500 --> 00:06:10,950
‫所以不管B播放器使能的布尔值是多少, 我们都要将B显示鼠标光标设置为该值｡

72
00:06:10,950 --> 00:06:18,090
‫所以我们要说B sho鼠标光标等于B播放器启用｡

73
00:06:18,360 --> 00:06:20,730
‫现在, 我们还没有显示鼠标光标｡

74
00:06:20,730 --> 00:06:21,990
‫我们会讲到这一部分的｡

75
00:06:21,990 --> 00:06:27,960
‫我们希望在玩游戏时能看到鼠标光标, 这样我们就能知道坦克的目标｡

76
00:06:27,960 --> 00:06:29,490
‫所以我们很快就会谈到这个问题｡

77
00:06:29,490 --> 00:06:38,550
‫但是现在我们在玩家控制器中有一个很好的函数, 我们想在游戏模式中调用这个函数来告诉你我的意思｡

78
00:06:38,550 --> 00:06:44,610
‫我将返回到游戏模式, 这是演员死亡功能, 您将看到我们禁用了输入,

79
00:06:44,610 --> 00:06:47,070
‫并在此处设置了b显示鼠标光标｡

80
00:06:47,070 --> 00:06:48,450
‫所以我之所以要有一个｡

81
00:06:48,540 --> 00:06:54,420
‫函数, 这样我们就可以简单地调用该函数, 传入一个布尔值｡

82
00:06:54,450 --> 00:07:00,600
‫在这种情况下, 我们将传入false, 这样我们将调用禁用输入函数, 并将传入B,

83
00:07:00,600 --> 00:07:02,570
‫这样鼠标光标将被设置为false｡

84
00:07:02,580 --> 00:07:09,960
‫所以我们现在可以简单地调用这个函数, 而不是调用tank get player controller返回一个player controller｡

85
00:07:10,050 --> 00:07:15,590
‫我想有一个指针变量, 允许我们访问播放器控制器｡

86
00:07:15,600 --> 00:07:20,560
‫在tune tank游戏模式下, 我将添加一个私有变量.

87
00:07:20,580 --> 00:07:28,800
‫我会声明它的类型是A, tune tank, player, controller, 这是一个指针.

88
00:07:28,800 --> 00:07:35,640
‫我将把这个调音称为坦克的玩家控制器, 我可以在调音坦克游戏模式下设置这个调音,

89
00:07:35,640 --> 00:07:39,500
‫然后开始使用游戏静态｡

90
00:07:39,510 --> 00:07:45,360
‫现在, 如果你想知道游戏静态是否有一个获得玩家控制器功能, 你是对的｡

91
00:07:45,570 --> 00:07:51,630
‫这是一个方便的静态函数,

92
00:07:51,630 --> 00:07:58,020
‫它需要一个世界上下文对象和一个玩家索引, 所以我们可以继续复制游戏静态的include, 并在开始Play中调用它｡

93
00:07:58,020 --> 00:08:02,970
‫我在顶部看到, 我已经有了游戏静态, 这是因为我们已经在这里使用了它, 并开始播放, 以调用get

94
00:08:02,970 --> 00:08:05,310
‫player--.

95
00:08:05,310 --> 00:08:09,350
‫我们将在这里做同样的事情来设置播放器控制器指针｡

96
00:08:09,360 --> 00:08:11,400
‫现在你应该知道怎么做｡

97
00:08:11,400 --> 00:08:18,060
‫所以你为什么不暂停视频, 在这里做一个小的挑战, 只是设置的价值调谐坦克, 播放器控制器｡

98
00:08:20,990 --> 00:08:21,470
‫好吧, 我会的

99
00:08:21,470 --> 00:08:28,760
‫所以我们会说tune tank, player, controller,

100
00:08:28,760 --> 00:08:37,550
‫我们把它设置成等于你的游戏静态的结果, get player controller, 我们知道世界上下文对象可以是这样的, player

101
00:08:37,550 --> 00:08:40,160
‫index不是9而是0｡

102
00:08:40,160 --> 00:08:45,920
‫当然, 我们知道这会返回一个播放器控制器, 而不是一个tune tank播放器控制器｡

103
00:08:45,920 --> 00:08:49,460
‫就像我们对Tank做的那样, 我们要选角.

104
00:08:49,460 --> 00:08:59,720
‫所以我会说cast to a tune tank player controller, 我们要转换get player controller的结果｡

105
00:08:59,930 --> 00:09:05,270
‫在开始播放之后, 我们将有调音器和播放器控制器｡

106
00:09:05,270 --> 00:09:11,870
‫现在我们可以回到这里,

107
00:09:11,870 --> 00:09:21,830
‫而不是直接从坦克中获取播放器控制器, 我们可以检查以确保我们的变量tune坦克播放器控制器是有效的, 然后我们可以调用我们创建的函数｡

108
00:09:21,830 --> 00:09:23,090
‫让我们回过头来看看｡

109
00:09:23,090 --> 00:09:30,620
‫这叫做设置玩家启用状态, 在游戏模式下, 我们希望禁用输入并停止显示光标,

110
00:09:30,620 --> 00:09:33,650
‫这意味着我们将为此传入false.

111
00:09:33,650 --> 00:09:43,490
‫因此, 我们将调用tune tank､ player､ controller､ set player enabled state, 并为此传递false, 我们将使用tune

112
00:09:43,490 --> 00:09:50,300
‫tank､ player controller, 这意味着我们需要包括tune tank､ player controller｡

113
00:09:50,300 --> 00:09:56,570
‫在顶部, 我们将包括调音箱､ 播放器控制器｡

114
00:09:57,620 --> 00:10:00,890
‫现在我们有了定义为OC的类型｡

115
00:10:00,890 --> 00:10:02,630
‫让我们继续进行编译｡

116
00:10:02,780 --> 00:10:08,630
‫在结束之前,

117
00:10:08,630 --> 00:10:15,320
‫我们要做的最后一件事是进入我们的播放器控制器蓝图, 我希望你向下滚动到鼠标界面部分, 你会看到它写着“默认鼠标光标”｡

118
00:10:15,350 --> 00:10:19,730
‫现在, 我们可以单击下拉菜单, 有许多不同的光标可供选择｡

119
00:10:19,730 --> 00:10:21,770
‫我会选择十字准线｡

120
00:10:21,950 --> 00:10:27,830
‫现在, 我们还没有显示鼠标光标, 但是一旦我们开始游戏, 我们就会显示光标.

121
00:10:27,830 --> 00:10:35,060
‫当我们这样做的时候, 我喜欢它是十字光标, 而不是我们在看鼠标光标时总是看到的默认白色箭头｡

122
00:10:35,060 --> 00:10:43,040
‫因此, 将默认的鼠标光标设置为十字光标, 一旦我们真正启用鼠标光标, 我们就可以看到这些十字光标｡

123
00:10:43,040 --> 00:10:53,420
‫总之, 我们创建了一个自定义播放器控制器类, 并使用该类中的函数启用或禁用输入｡

124
00:10:53,420 --> 00:11:00,290
‫我们还使用该函数根据传入的布尔值显示或隐藏鼠标光标｡

125
00:11:00,290 --> 00:11:06,350
‫在我们创建的蓝图中, 我们设置了鼠标光标类型, 我们很快就会看到, 当游戏开始时,

126
00:11:06,350 --> 00:11:12,140
‫鼠标光标开始显示时, 十字光标是什么样子｡

127
00:11:12,140 --> 00:11:12,980
‫干得好｡

128
00:11:12,980 --> 00:11:18,620
‫我们现在有了这个玩家控制器, 我们准备继续实现游戏功能｡

129
00:11:18,620 --> 00:11:20,810
‫所以我们在下一个视频中再见｡

