﻿1
00:00:04,380 --> 00:00:05,310
‫你好, 欢迎｡

2
00:00:05,310 --> 00:00:12,630
‫在这节课中, 我们将学习像这个人这样的兵和像这个人这样的角色之间的区别｡

3
00:00:12,630 --> 00:00:21,060
‫我们将继续设置一个角色蓝图和角色C++演员, 看起来像这样, 这样我们就得到了我们的幽灵网格｡

4
00:00:21,060 --> 00:00:22,860
‫让我们来看看它是如何完成的｡

5
00:00:22,890 --> 00:00:30,550
‫好了, 我们的大项目计划的第一部分, 我们要开始的是球员运动｡

6
00:00:30,550 --> 00:00:31,620
‫这是第一条｡

7
00:00:31,620 --> 00:00:37,020
‫这是我们大多数游戏的基本原理, 不仅仅是射击游戏,

8
00:00:37,020 --> 00:00:42,060
‫然后他们会继续动画和射击和健康和敌人的死亡和所有其他我们想得到的东西｡

9
00:00:42,060 --> 00:00:45,660
‫但首先要解决的是球员的移动｡

10
00:00:46,050 --> 00:00:49,770
‫为此, 我们将创建一个字符类｡

11
00:00:49,770 --> 00:00:51,030
‫什么是角色类？

12
00:00:51,030 --> 00:00:56,010
‫首先, 棋子和角色是有区别的｡

13
00:00:56,130 --> 00:01:01,110
‫棋子是玩家可以拥有的任何东西｡

14
00:01:01,110 --> 00:01:05,280
‫我们稍后会讨论更多关于附身的内容, 但你们之前已经了解了一些｡

15
00:01:05,370 --> 00:01:10,320
‫但这里的想法是, 棋子是由参与者控制的东西｡

16
00:01:10,320 --> 00:01:10,890
‫一个角色？

17
00:01:10,890 --> 00:01:11,760
‫什么是角色？

18
00:01:11,760 --> 00:01:15,120
‫首先要说的是这个角色是一个棋子｡

19
00:01:15,150 --> 00:01:17,760
‫它直接继承自典当类｡

20
00:01:17,760 --> 00:01:20,850
‫所以它可以做任何兵能做的事情｡

21
00:01:20,850 --> 00:01:25,740
‫更何况一个角色是一个特殊化的棋子｡

22
00:01:26,130 --> 00:01:28,470
‫它增加了个性特征｡

23
00:01:28,470 --> 00:01:29,760
‫这可不是什么有用的信息, 萨姆.

24
00:01:29,760 --> 00:01:33,030
‫角色是什么样的角色？

25
00:01:33,120 --> 00:01:39,930
‫比如说, 像正常人一样四处走动, 在地板上走动, 能跳,

26
00:01:39,930 --> 00:01:43,800
‫能跑, 诸如此类的东西.

27
00:01:43,800 --> 00:01:50,010
‫这往往是一个角色的领域, 而不是一个棋子, 因为棋子可以像宇宙飞船一样四处飞行, 例如｡

28
00:01:50,010 --> 00:01:53,730
‫他们不是人, 所以这就是一个角色｡

29
00:01:53,730 --> 00:01:59,130
‫它还添加了导航网格移动等功能,

30
00:01:59,130 --> 00:02:06,300
‫我们在本节的AI部分会看到更多, 这将帮助我们移动角色, 避开障碍物等｡

31
00:02:06,720 --> 00:02:09,840
‫那么我们如何继续创造一个角色呢？

32
00:02:09,870 --> 00:02:13,350
‫与我们创建任何其他C++类几乎相同｡

33
00:02:13,350 --> 00:02:16,410
‫我们将添加新的C++类｡

34
00:02:16,410 --> 00:02:21,210
‫你可以看到在这些选项中, 有——有个性｡

35
00:02:21,300 --> 00:02:29,970
‫现在, 我将继续, 并给予你一个挑战, 马上蝙蝠创建蓝图儿童和C++为此事｡

36
00:02:29,970 --> 00:02:34,110
‫所以我们要, 首先, 沿着做C++.

37
00:02:34,110 --> 00:02:35,940
‫这不是你的挑战｡

38
00:02:35,940 --> 00:02:41,910
‫我们要给自己创建一个, 我称之为, 因为我们不会用,

39
00:02:41,910 --> 00:02:46,230
‫但我们要看看它和角色之间的区别.

40
00:02:46,230 --> 00:02:48,330
‫因此, 请继续创建该类｡

41
00:02:48,540 --> 00:02:54,930
‫一旦这个过程完成了, 你就会得到一个类, 你以前见过的类.

42
00:02:54,930 --> 00:03:00,570
‫它必须开始, 播放一个滴答声, 设置, 播放输入组件, 等等｡  所以我们要做的是,

43
00:03:00,570 --> 00:03:04,200
‫再做一次同样的过程, 添加一个新的C++类｡

44
00:03:04,200 --> 00:03:07,290
‫这次我们要创建一个角色, 转到下一个｡

45
00:03:07,290 --> 00:03:12,690
‫与其说它像我的角色一样缺乏想象力, 我不如说它是射手角色,

46
00:03:12,810 --> 00:03:18,120
‫这更能描述我们在这里试图创造的角色｡

47
00:03:18,120 --> 00:03:20,640
‫我们将继续创建这个类｡

48
00:03:20,970 --> 00:03:26,700
‫构建完成后, 您可以看到我们得到了一个非常相似的头文件｡

49
00:03:26,700 --> 00:03:34,380
‫事实上, 几乎所有的东西都是相同的, 除了它从字符类继承的东西, 而不是——｡

50
00:03:34,380 --> 00:03:36,900
‫除此之外, 它们非常非常相似｡

51
00:03:36,900 --> 00:03:43,740
‫所以要看到区别, 我们必须看看这些东西的蓝图, 看看有什么样的组件｡

52
00:03:44,160 --> 00:03:50,130
‫所以这将是你们沿着挑战, 你们要继续创建C++, 就像我刚才做的那样,

53
00:03:50,130 --> 00:03:55,050
‫以及为我的后代和射手角色创建一个蓝图子｡

54
00:03:55,050 --> 00:04:01,980
‫那么, 当你打开这两个单独的蓝图, 暂停一段视频, 然后开始尝试时, 你会看到什么区别呢？

55
00:04:02,010 --> 00:04:02,340
‫好吧, 我会的

56
00:04:02,340 --> 00:04:03,180
‫欢迎回来｡

57
00:04:03,180 --> 00:04:04,770
‫所以我们来试试吧｡

58
00:04:04,770 --> 00:04:15,480
‫如果进入编辑器, 我将导航到内容目录的顶部, 然后添加一些新的蓝图｡

59
00:04:15,630 --> 00:04:19,020
‫我将右键单击创建蓝图类｡

60
00:04:19,020 --> 00:04:25,320
‫而不是从其中一个继承, 我将选择所有的类并寻找my类, 它是卒的子类,

61
00:04:25,320 --> 00:04:28,380
‫如我们所见.

62
00:04:28,380 --> 00:04:32,670
‫选择那个并创建一个覆盖｡

63
00:04:32,670 --> 00:04:42,210
‫我将把它称为BP下划线我的兵来使用这个约定, 这有助于我们区分C++和蓝图｡

64
00:04:42,390 --> 00:04:45,330
‫我将右键单击并创建另一个蓝图类｡

65
00:04:45,330 --> 00:04:48,240
‫这次我要找的是枪手角色｡

66
00:04:49,180 --> 00:04:50,530
‫然后选择那个｡

67
00:04:50,530 --> 00:04:54,740
‫可以预见的是, 我将把这个BP下划线射手角色命名为｡

68
00:04:54,760 --> 00:04:59,350
‫这对我们在命名事物时不需要太有想象力有所帮助｡

69
00:04:59,350 --> 00:05:02,350
‫你不想在给这些蓝图孩子命名时充满想象力｡

70
00:05:02,380 --> 00:05:07,480
‫你只需要说它将是完全相同的名字, 只是前面有BP下划线｡

71
00:05:07,630 --> 00:05:14,100
‫因此, 让我们继续打开这两个窗口, 并将它们停靠到主窗口, 这样我们就可以轻松地比较它们｡

72
00:05:14,110 --> 00:05:19,660
‫打开射手角色点到主窗口, 我们可以直接看到一些差异｡

73
00:05:19,870 --> 00:05:24,420
‫兵在组件视图中基本上没有任何动作｡

74
00:05:24,430 --> 00:05:28,030
‫它有一个默认的场景根目录, 没有其他内容｡

75
00:05:28,540 --> 00:05:32,440
‫然而, 如果我们转到射手角色, 你可以看到还有一些事情要做｡

76
00:05:32,470 --> 00:05:39,730
‫首先, 我们在这里有一个胶囊组件,

77
00:05:39,730 --> 00:05:44,110
‫这已经暗示了它希望一个人形形状能装进胶囊｡

78
00:05:44,110 --> 00:05:50,470
‫太空舱是用来做粗糙的物理和操纵或与地形碰撞｡

79
00:05:50,470 --> 00:05:54,610
‫很明显, 在里面有一个非常适合的东西, 那就是一个人形角色｡

80
00:05:54,640 --> 00:05:59,590
‫我们有一个箭头组件, 它告诉我们这个角色的前进方向.

81
00:05:59,710 --> 00:06:02,350
‫然后我们有一个网格, 它是继承的｡

82
00:06:02,350 --> 00:06:03,810
‫它继承自C++｡

83
00:06:03,820 --> 00:06:09,690
‫事实上, 它是从两个级别上继承的, 因为我们还没有在A Shooter角色中定义任何网格｡

84
00:06:09,700 --> 00:06:14,130
‫它们必须是在A字符类中定义的｡

85
00:06:14,140 --> 00:06:23,530
‫网格组件一直向下传递到蓝图类, 网格中还没有任何内容.

86
00:06:23,530 --> 00:06:26,890
‫所以我们可以在那里放一个网｡

87
00:06:26,890 --> 00:06:28,000
‫让我们来试试看｡

88
00:06:28,000 --> 00:06:31,240
‫转到详细信息窗格中的骨架网格｡

89
00:06:31,240 --> 00:06:34,720
‫我们想把幽灵的角色放进去｡

90
00:06:34,720 --> 00:06:37,540
‫所以我在这里选择幽灵, 然后开始.

91
00:06:37,540 --> 00:06:39,910
‫它已经把他在一点点地离地｡

92
00:06:39,910 --> 00:06:43,630
‫所以我想做的是调整他的脚｡

93
00:06:43,750 --> 00:06:48,340
‫所以他们尽我所能在太空舱底部会合｡

94
00:06:48,620 --> 00:06:50,920
‫看来我第一次就说对了｡

95
00:06:50,920 --> 00:06:57,070
‫然后我们还想把他对准, 使他面向那个向前的箭头, 这样我们就可以做一点魔术般的旋转90度,

96
00:06:57,070 --> 00:07:01,930
‫这样我们就成功了｡

97
00:07:01,930 --> 00:07:04,870
‫顺便说一句, 我是按R键来进入旋转小部件的｡

98
00:07:04,870 --> 00:07:13,460
‫或者你可以使用这些小部件在你的视窗右上方的顶部, 以获得你的平移和旋转之间｡

99
00:07:13,480 --> 00:07:17,650
‫在组件层次结构中, 另一件值得注意的事情是,

100
00:07:17,650 --> 00:07:23,050
‫除了网格､ 箭头和胶囊组件之外, 我们还有角色移动组件｡

101
00:07:23,050 --> 00:07:29,080
‫这是完全负责给它的特点, 如运动, 能够走和跑,

102
00:07:29,080 --> 00:07:35,320
‫等等｡ 您可以在详细信息窗格中看到一系列移动设置, 以及重力刻度｡

103
00:07:35,320 --> 00:07:39,990
‫所以你可以让它看起来像我们在火星或月球或木星上玩｡

104
00:07:40,000 --> 00:07:42,670
‫无论你想做什么, 你都可以改变重力的比例, 可以很有趣｡

105
00:07:42,790 --> 00:07:49,570
‫我们有默认的运动类型, 无论我们是在陆地上, 还是在水上, 所有这类的东西, 走路,

106
00:07:49,570 --> 00:07:53,980
‫跳跃, 信息网络的东西｡

107
00:07:53,980 --> 00:07:56,650
‫这在多人游戏中自动运行良好｡

108
00:07:56,650 --> 00:08:01,960
‫它内置了所有这些功能, 所以基本上已经为我们做了很多事情｡

109
00:08:01,960 --> 00:08:06,610
‫这就是为什么我们要用一个角色而不是一个兵, 如果我们用这个角色的话,

110
00:08:06,610 --> 00:08:08,950
‫我们必须从头开始写所有的移动代码｡

111
00:08:08,950 --> 00:08:17,170
‫它已经为我们设置了这个角色的动作组件, 这远远不是角色为我们提供的所有东西｡

112
00:08:17,170 --> 00:08:24,250
‫它还提供了许多细节和功能, 我们可以在基类中调用这些细节和功能, 以便更轻松地完成工作｡

113
00:08:24,250 --> 00:08:26,650
‫我们会在后面的课上看到｡

114
00:08:26,650 --> 00:08:34,000
‫所以最后我们要做的是确保这个角色是在地图中产生的兵｡

115
00:08:34,000 --> 00:08:38,050
‫所以我接下来要做的就是再一次找到我们内容的根源｡

116
00:08:38,050 --> 00:08:39,070
‫这是复习｡

117
00:08:39,070 --> 00:08:45,850
‫这么多的挑战, 如果你想要它,

118
00:08:45,940 --> 00:08:52,950
‫那么, 你可以继续, 并创建一个克隆的这张地图和一个蓝图游戏模式设置从这张地图, 将产生我们的BP射手字符｡

119
00:08:53,290 --> 00:08:57,010
‫我确实鼓励你尝试这些小挑战以及主要的大挑战｡

120
00:08:57,010 --> 00:09:00,340
‫我将继续讨论, 给予提供这一问题的挑战幻灯片｡

121
00:09:00,340 --> 00:09:07,030
‫所以我们有了科幻第一季的模块化入门包地图, 这里有地图一｡

122
00:09:07,030 --> 00:09:12,550
‫我现在要把它复制到我的项目路线中,

123
00:09:12,550 --> 00:09:18,550
‫我们可以稍后重新组织, 因为路线中的内容会更多, 组织结构会更清晰｡

124
00:09:18,790 --> 00:09:23,170
‫我要将该地图重命名为Sandbox｡

125
00:09:23,680 --> 00:09:29,980
‫我将通过进入项目设置､ 地图和模式将其设置为项目默认值, 然后将其从Map

126
00:09:29,980 --> 00:09:35,830
‫one更改为游戏和编辑器的Sandbox｡

127
00:09:38,020 --> 00:09:39,670
‫然后我将制作一个游戏模式｡

128
00:09:39,670 --> 00:09:42,760
‫我将右键单击并创建一个蓝图类｡

129
00:09:42,760 --> 00:09:50,290
‫我将创建一个游戏模式基础蓝图, 称之为哔哔声, 下划线射击游戏模式｡

130
00:09:50,930 --> 00:09:52,630
‫我要把它打开｡

131
00:09:52,630 --> 00:09:58,180
‫在这个基类中我不需要任何C++, 所以我基本上不从C++派生它｡

132
00:09:58,180 --> 00:10:05,380
‫但是, 一旦我们确实需要它, 我们总是可以修复和蓝图到我们自己设计的C++类｡

133
00:10:05,560 --> 00:10:08,590
‫所以我接下来要做的就是讲细节｡

134
00:10:08,590 --> 00:10:14,440
‫如果没有选择,

135
00:10:14,440 --> 00:10:20,860
‫你需要转到顶部栏中的类默认值, 然后你可以转到类部分, 找到应该是类似默认值的类｡

136
00:10:20,860 --> 00:10:25,900
‫我们将在蓝图版本中寻找BP射手角色,

137
00:10:25,900 --> 00:10:33,970
‫因为它已经设置了网格, 然后我们将返回到我们的沙箱, 打开沙箱并更改其游戏模式｡

138
00:10:33,970 --> 00:10:39,730
‫现在, 我创建一个沙箱的原因是因为我不想编辑原始地图, 因为如果我把沙箱搞砸了,

139
00:10:39,730 --> 00:10:43,960
‫我可能总是想回到那个地图上参考｡

140
00:10:44,200 --> 00:10:51,520
‫因此, 让我们进入顶部的蓝图下拉菜单, 选择当前设置为游戏模式基础的游戏模式｡

141
00:10:52,030 --> 00:10:58,120
‫我会选择BP下划线射击游戏模式, 而不是射击游戏模式.

142
00:10:58,270 --> 00:11:03,280
‫最后一块拼图是放进一个玩家, 从某个地方开始｡

143
00:11:03,280 --> 00:11:08,080
‫事实上, 我并没有意识到这一点, 但地图已经包含了一个球员开始｡

144
00:11:08,080 --> 00:11:14,050
‫所以增加这个额外的一个意味着你现在可以意外地在两个不同的地方产卵｡

145
00:11:14,050 --> 00:11:16,180
‫我们稍后会在课程中假装这个｡

146
00:11:16,180 --> 00:11:20,890
‫但你要知道, 如果你在不同的地方产卵, 你会感到困惑, 这就是原因｡

147
00:11:20,890 --> 00:11:24,160
‫所以去你的地方, 演员标签在左边｡

148
00:11:24,160 --> 00:11:29,260
‫如果你还没有得到它, 去窗口, 并选择一个地方演员, 使它出现｡

149
00:11:29,350 --> 00:11:32,290
‫我们需要基本的演员, 我们需要演员开始表演｡

150
00:11:32,290 --> 00:11:37,090
‫如果你把它带进来, 它会给我们一个小盒子, 里面有一个向前的箭头,

151
00:11:37,090 --> 00:11:41,560
‫告诉我们兵要在哪里产卵, 这样我们就可以继续玩了｡

152
00:11:41,560 --> 00:11:45,550
‫目前还不清楚这是否有效｡

153
00:11:45,550 --> 00:11:54,190
‫所以你要做的就是到F8把你的兵弹出来, 然后占有它, 如果你转过身, 你就能看到.

154
00:11:54,190 --> 00:11:56,980
‫果然, 我们这里有我们的性格｡

155
00:11:56,980 --> 00:12:00,850
‫不幸的是, 他的腹股沟里有个摄像头｡

156
00:12:00,850 --> 00:12:04,450
‫所以我们稍后会解决这个问题｡

157
00:12:04,450 --> 00:12:12,640
‫但目前我们已经得到了我们的网格到位, 我们将继续从这修复动画, 得到一个第三人称角色等,

158
00:12:12,640 --> 00:12:18,580
‫并让它移动, 最重要的是｡

159
00:12:19,570 --> 00:12:23,740
‫所以我们现在有了正确的射手角色｡

160
00:12:23,740 --> 00:12:25,180
‫这不是第三人称摄像机｡

161
00:12:25,180 --> 00:12:26,590
‫我们稍后会解决这个问题｡

162
00:12:26,590 --> 00:12:30,190
‫但首先, 我们要让我们的运动运转起来｡

163
00:12:30,190 --> 00:12:32,590
‫让我们进入下一节课｡

