﻿1
00:00:04,350 --> 00:00:04,980
‫你好, 欢迎｡

2
00:00:04,980 --> 00:00:13,110
‫在这节课中, 我们将在运行时从C++中的字符类中生成我们的步枪｡

3
00:00:13,110 --> 00:00:15,270
‫让我们来看看它是如何完成的｡

4
00:00:16,560 --> 00:00:16,740
‫好吧, 我会的

5
00:00:16,830 --> 00:00:27,390
‫所以我们想让我们的枪作为一个射手角色的孩子来繁殖, 第一点是能够从另一个演员中繁殖这个演员｡

6
00:00:27,870 --> 00:00:29,160
‫我们将在运行时执行此操作｡

7
00:00:29,160 --> 00:00:32,340
‫我们会在比赛开始时这样做, 因为这是你需要的方式｡

8
00:00:32,340 --> 00:00:34,440
‫当您生成参与者时, 需要在运行时进行｡

9
00:00:34,620 --> 00:00:38,430
‫我们要做的就是先掌握世界｡

10
00:00:38,430 --> 00:00:44,820
‫我们要调用一个函数, 顺便说一下, world和level是同义词.

11
00:00:44,820 --> 00:00:48,810
‫所以我们现在要做的是, 我们要去到那个层次,

12
00:00:48,810 --> 00:00:54,210
‫然后说, 嘿, 层次, 你能作为一个演员来创作吗因为所有的演员本质上都属于或者生活在一个层次中？

13
00:00:54,690 --> 00:00:58,500
‫所以我们就说, 你知道的, 请给我一个演员｡

14
00:00:58,830 --> 00:01:04,830
‫这是一个使用模板的spawn演员｡

15
00:01:04,830 --> 00:01:10,530
‫你可以说, 我希望这个演员, 我要产卵是类型A枪｡

16
00:01:10,530 --> 00:01:19,680
‫为了让它起作用, 我们需要一个包含函数, 这里的哈希函数包含了枪点h.

17
00:01:21,240 --> 00:01:29,760
‫然后我们要引入一个参数, 要派生的参数实际上可以是一个类类型｡

18
00:01:29,760 --> 00:01:33,780
‫因此默认情况下, 它将继续并生成C++｡

19
00:01:33,780 --> 00:01:38,190
‫但在这里我们要生成这把枪的蓝图孩子｡

20
00:01:38,190 --> 00:01:43,590
‫因此, 我们需要弄清楚蓝图中需要连接的内容｡

21
00:01:43,590 --> 00:01:46,110
‫它不能在C++中连接起来, 至少不容易｡

22
00:01:46,110 --> 00:01:48,330
‫最好的地方做它是在蓝图｡

23
00:01:48,330 --> 00:01:52,380
‫所以我们要做一个alt, 去到头文件, 我们的问题到字符｡

24
00:01:52,860 --> 00:01:55,620
‫我们将在这里添加一个新的you属性｡

25
00:01:56,390 --> 00:02:03,470
‫允许我们配置应该指向的类以生成参与者｡

26
00:02:03,470 --> 00:02:07,010
‫我们应该从这个射手角色中衍生出哪个蓝图职业？

27
00:02:07,370 --> 00:02:17,510
‫我们将它作为一个只编辑默认值, 因为我们不想在运行时编辑它, 因为它会给予一个错误的印象,

28
00:02:17,510 --> 00:02:23,840
‫你可以在运行时改变我们使用的枪的类型｡

29
00:02:23,840 --> 00:02:30,710
‫而开始游戏已经被称为枪已经产生, 所以它实际上不会更新任何东西｡

30
00:02:30,710 --> 00:02:35,090
‫所以我们不想让它成为可编辑的, 以免给人们留下什么可以做的错误印象｡

31
00:02:35,450 --> 00:02:41,810
‫这里我们将使用一个名为T子类的宏, 你可能见过, 也可能没见过,

32
00:02:41,810 --> 00:02:45,230
‫DT子类是一个模板｡

33
00:02:45,230 --> 00:02:52,520
‫所以我们再次使用这些尖括号我们希望它表示gun的子类｡

34
00:02:52,790 --> 00:02:59,630
‫基本上这意味着它允许Blueprint限制我们可以选择的类, 只能是Gun

35
00:02:59,630 --> 00:03:05,630
‫C++类的子类｡

36
00:03:05,960 --> 00:03:11,000
‫这不是一个指针, 因为我们并没有指向一个枪的实例｡

37
00:03:11,000 --> 00:03:15,590
‫我们在这个变量中得到的是类本身｡

38
00:03:15,590 --> 00:03:18,530
‫在本例中, 它是一个蓝图类, 但它仍然是一个类｡

39
00:03:18,860 --> 00:03:27,950
‫所以我们把它叫做枪类, 为了让大家清楚地知道这并不是枪本身.

40
00:03:28,010 --> 00:03:36,800
‫我们确实需要另一个属性来存储枪支, 这将不是编辑默认值｡

41
00:03:36,800 --> 00:03:43,130
‫所以基本上, 我们不想让它成为一个可见的属性, 但它将是一个A枪指针｡

42
00:03:43,130 --> 00:03:43,880
‫看到区别了吗？

43
00:03:43,880 --> 00:03:50,780
‫其中一个是枪的子类, 另一个是枪的指针, 而这个是实际的枪｡

44
00:03:50,780 --> 00:03:54,710
‫一旦我们创建了类的一个实例, 我们就把它存储在那里｡

45
00:03:54,920 --> 00:04:08,030
‫所以让我们继续在我们的射击CP和完成这个开始发挥, 我们正在产卵的东西, 所以我们要有枪等于得到世界产卵演员枪｡

46
00:04:08,030 --> 00:04:14,930
‫我们在这里要传递的论点是枪械类, 我们会在蓝图中加以阐述.

47
00:04:14,930 --> 00:04:17,810
‫让我们来编译一下｡

48
00:04:17,810 --> 00:04:18,890
‫它可能会给予我们带来一些错误｡

49
00:04:18,890 --> 00:04:25,850
‫让我们看看, 我打开了消息日志和编译日志, 果然, 我们在头文件中得到了一些错误,

50
00:04:25,850 --> 00:04:31,250
‫说是未声明的标识符, 因为我们需要向前声明枪｡

51
00:04:31,250 --> 00:04:35,690
‫所以我会在顶部做这个因为它在两个地方我会说类｡

52
00:04:36,580 --> 00:04:39,460
‫一枪就这样｡

53
00:04:39,760 --> 00:04:47,650
‫提醒一下, 像这样的前向声明意味着我们可以通过不在繁重的头文件中包含太多内容来缩短编译时间｡

54
00:04:48,010 --> 00:04:49,570
‫让我们尝试重新编译看看｡

55
00:04:49,820 --> 00:04:51,250
‫看起来这是唯一的错误｡

56
00:04:51,250 --> 00:04:52,730
‫现在已成功编译｡

57
00:04:52,750 --> 00:04:55,930
‫让我们继续按播放键, 看看会发生什么｡

58
00:04:55,960 --> 00:04:56,410
‫退出｡

59
00:04:56,440 --> 00:04:57,860
‫看看我们的｡

60
00:04:57,880 --> 00:05:00,760
‫我们主要想看看消息日志, 我没有打开它｡

61
00:05:00,760 --> 00:05:07,770
‫因此, 让我们转到窗口和开发人员工具, 查看输出日志, 看看是否有任何错误｡

62
00:05:07,780 --> 00:05:10,810
‫是, 由于未指定类, 衍生执行元失败｡

63
00:05:10,810 --> 00:05:14,920
‫当然, 没有指定类, 因为我们还没有在蓝图中配置它｡

64
00:05:14,920 --> 00:05:21,190
‫所以我要给予你们一个挑战, 把枪挂起来, 在我们的角色蓝图中找到属性,

65
00:05:21,190 --> 00:05:25,660
‫把它设置到正确的枪上, 然后测试它是否会繁殖｡

66
00:05:25,660 --> 00:05:26,740
‫暂停视频, 开始体验｡

67
00:05:26,770 --> 00:05:27,580
‫K欢迎回来｡

68
00:05:27,580 --> 00:05:37,210
‫所以, 让我们转到我们的射手角色BP, 并找到属性, 这应该是在路线或类｡

69
00:05:37,210 --> 00:05:40,810
‫默认值会深入细节并低于角色｡

70
00:05:40,810 --> 00:05:47,380
‫您可以看到, 这里有一个已配置的旋转速率, 还有一个枪类,

71
00:05:47,380 --> 00:05:52,150
‫它是一个下拉列表, 允许我在C++枪和C++枪之间进行选择｡

72
00:05:52,150 --> 00:05:54,460
‫这就是我们的命名约定派上用场的地方｡

73
00:05:54,460 --> 00:05:57,790
‫以BP下划线为前缀的东西是蓝图｡

74
00:05:57,790 --> 00:06:05,830
‫所以我们想要BP下划线步枪, 继续选择编译保存, 进入场景并点击播放｡

75
00:06:06,190 --> 00:06:11,950
‫现在, 希望我们没有得到任何错误关于产卵我们的枪｡

76
00:06:11,980 --> 00:06:13,480
‫枪应该已经产生了｡

77
00:06:13,480 --> 00:06:14,410
‫好吧, 我会的

78
00:06:14,410 --> 00:06:20,620
‫为了找出它是否有, 我们可以f八, 看看世界大纲｡

79
00:06:20,710 --> 00:06:26,200
‫如果我把世界轮廓放大一点, 我就可以搜索到BP下划线步枪｡

80
00:06:26,350 --> 00:06:26,910
‫好耶

81
00:06:26,920 --> 00:06:32,470
‫我们有一个英国石油公司下划线步枪的时刻, 它是在中间的地方, 这是不正确的儿童身份证｡

82
00:06:32,470 --> 00:06:34,780
‫这将是下节课的主题｡

83
00:06:34,780 --> 00:06:36,760
‫我们在那里见｡

