﻿1
00:00:04,320 --> 00:00:05,040
‫你好, 欢迎｡

2
00:00:05,040 --> 00:00:11,940
‫这节课的主题是, 参与者的取损函数, 以及我们怎么叫它.

3
00:00:11,940 --> 00:00:14,700
‫让我们深入了解一下｡

4
00:00:15,770 --> 00:00:22,250
‫所以为了让我们能够对某些东西造成伤害, 我们需要有一些我们可以击中的东西｡

5
00:00:22,370 --> 00:00:29,480
‫所以让我们转到我们的内容浏览器路线, 并带来了一个BP射手字符｡

6
00:00:29,810 --> 00:00:36,170
‫因为实际上发生的是,

7
00:00:36,170 --> 00:00:43,190
‫如果你把一个角色带到场景中, 那么虚幻会自动让这个角色由人工智能控制, 而在玩家开始时产生的角色将由玩家控制｡

8
00:00:43,190 --> 00:00:44,660
‫所以这很好｡

9
00:00:44,660 --> 00:00:45,890
‫这正是我们想要的行为｡

10
00:00:45,890 --> 00:00:51,200
‫如果我继续点击alt p, 你会发现我实际上是在错误的产卵点,

11
00:00:51,200 --> 00:00:54,080
‫所以也许我想删除这第二个球员开始｡

12
00:00:54,080 --> 00:00:57,110
‫如果我现在按alt p我们就在正确的位置了｡

13
00:00:57,110 --> 00:00:58,610
‫这就是我的敌人｡

14
00:00:58,610 --> 00:01:00,050
‫我可以向敌人射击｡

15
00:01:00,050 --> 00:01:01,190
‫我得到了命中效果｡

16
00:01:01,190 --> 00:01:03,140
‫但很明显我没有造成任何伤害｡

17
00:01:03,140 --> 00:01:04,250
‫至少现在还不行｡

18
00:01:04,700 --> 00:01:07,400
‫破坏是一个两部分的过程｡

19
00:01:07,400 --> 00:01:12,650
‫第一部分发送损坏, 第二部分接收损坏｡

20
00:01:12,650 --> 00:01:19,400
‫在这节课中, 我们将讨论如何向播放器发送损害以及与此相关的函数调用｡

21
00:01:19,820 --> 00:01:28,100
‫我们要看的主要的一个是参与者Dot H, 我们要找一个函数调用, take

22
00:01:28,100 --> 00:01:30,890
‫damage｡

23
00:01:31,340 --> 00:01:34,370
‫你可以看到这里有一个虚拟函数｡

24
00:01:34,370 --> 00:01:35,960
‫它会传回浮点数｡

25
00:01:35,960 --> 00:01:41,870
‫它返回的是作用在演员身上的实际伤害, 实际的伤害量.

26
00:01:42,500 --> 00:01:50,810
‫输入的是损坏金额, 一个损坏事件, 它给了我们更多的信息｡

27
00:01:50,810 --> 00:01:54,590
‫造成的伤害, 我们有一个煽动者｡

28
00:01:54,590 --> 00:01:58,730
‫所以这就是说谁是控制器负责造成这种损害？

29
00:01:59,000 --> 00:02:03,770
‫然后是损害的致因, 也就是行为人的责任？

30
00:02:03,770 --> 00:02:06,380
‫所以在这种情况下, 它可能是一把枪｡

31
00:02:06,380 --> 00:02:11,810
‫或者是说爆炸的炮弹, 落在你身上的石头, 射伤你的枪,

32
00:02:11,810 --> 00:02:15,830
‫将是负有责任的演员｡

33
00:02:15,920 --> 00:02:18,920
‫所以这就是简单地说所受的伤害｡

34
00:02:18,950 --> 00:02:25,250
‫除了这个damage事件结构体之外, 大部分内容对你来说都很简单｡

35
00:02:25,250 --> 00:02:26,510
‫这就有点复杂了

36
00:02:26,510 --> 00:02:32,120
‫让我们来看看这个损坏事件的结构, 看看我们能做些什么？

37
00:02:32,150 --> 00:02:34,160
‫它将如何作曲？

38
00:02:34,160 --> 00:02:36,020
‫我们要怎么把这些联系起来？

39
00:02:36,020 --> 00:02:42,350
‫现在, 这还不是很明显, 但实际上有两个亚型的这种损害事件｡

40
00:02:42,350 --> 00:02:47,360
‫实际上,

41
00:02:47,360 --> 00:02:54,410
‫您不会真正创建EF损坏事件, 而是创建EF点损坏事件, 或者创建EF径向损坏事件｡

42
00:02:54,410 --> 00:02:58,310
‫这是虚幻中存在的两种主要类型的伤害｡

43
00:02:58,310 --> 00:03:03,500
‫你可以创建更多不同类型的伤害为您自己的自定义的东西,

44
00:03:03,500 --> 00:03:11,990
‫像你可能有一个火灾损害和不同的参数, 但在这种情况下, 我们感兴趣的EF径向和点损害｡

45
00:03:11,990 --> 00:03:18,380
‫所以辐射状就像是手榴弹爆炸, 在这种情况下你会说, 好的, 半径在哪里,

46
00:03:18,380 --> 00:03:21,020
‫下降了多少？

47
00:03:21,020 --> 00:03:28,310
‫所有这些东西都是点伤害, 因为它听起来更适合像枪这样的东西｡

48
00:03:28,400 --> 00:03:35,930
‫我们要创建一个EF点损坏事件, 然后我们要去寻找构造函数, 这是它的构造函数,

49
00:03:35,930 --> 00:03:40,280
‫我们可以看到它接收了什么｡

50
00:03:40,310 --> 00:03:41,720
‫它又开始承受伤害了｡

51
00:03:41,720 --> 00:03:43,400
‫这是一个重复｡

52
00:03:43,610 --> 00:03:48,620
‫我们有命中结果, 导致这一点损害发生｡

53
00:03:48,860 --> 00:03:51,380
‫然后我们在拍摄方向｡

54
00:03:51,380 --> 00:03:51,680
‫好极了｡

55
00:03:51,680 --> 00:03:52,880
‫我们已经计算过了｡

56
00:03:52,880 --> 00:03:59,540
‫我在上节课做这个的时候已经想好了, 然后是损伤类型的子类｡

57
00:03:59,540 --> 00:04:06,650
‫这可以用来传递更多的信息, 这样, 实际上, 你可能会创建一个不同的损坏类型,

58
00:04:06,650 --> 00:04:09,500
‫而不是创建一个不同的损坏事件类型｡

59
00:04:09,500 --> 00:04:16,220
‫在这种情况下, 你可能会有一个火灾类型或类似的东西, 因为我们不需要任何类型的破坏类型｡

60
00:04:16,220 --> 00:04:21,080
‫我们不做火焰伤害或任何额外的像毒药伤害｡

61
00:04:21,080 --> 00:04:25,310
‫然后我们要做的就是在这里传递一个空指针.

62
00:04:25,310 --> 00:04:32,330
‫让我们一起构造一个这样的事件, 然后我们称之为take damage事件｡

63
00:04:32,990 --> 00:04:41,510
‫首先要做的是粘贴类型, 我们称之为damage事件, 然后我们要构造它.

64
00:04:41,510 --> 00:04:45,860
‫首先, 损坏的数量, 我们还没有一把枪的损坏数量｡

65
00:04:45,860 --> 00:04:48,140
‫我们不知道它造成了多大的伤害｡

66
00:04:48,140 --> 00:04:51,050
‫因此, 我们可以继续在那里创建一些信息｡

67
00:04:51,050 --> 00:04:52,730
‫我们已经有最大射程了｡

68
00:04:52,730 --> 00:04:54,740
‫我们想在这里多买些房子｡

69
00:04:54,770 --> 00:05:00,440
‫这将是一个编辑任何地方, 这将允许我们说浮动损坏｡

70
00:05:00,440 --> 00:05:01,400
‫我们能造成多大的伤害？

71
00:05:01,400 --> 00:05:05,750
‫我将造成10点的伤害然后我们可以在C++中使用这个｡

72
00:05:05,750 --> 00:05:09,320
‫所以损伤是我们要传递的第一个参数｡

73
00:05:09,440 --> 00:05:11,510
‫第二个是那个命中结果？

74
00:05:11,510 --> 00:05:13,670
‫幸运的是, 我们已经得到了命中结果

75
00:05:14,470 --> 00:05:23,290
‫接下来是发射方向, 我们已经计算了发射器的发射方向｡

76
00:05:24,060 --> 00:05:29,730
‫然后我们来看看子类, 它是一个空指针.

77
00:05:30,230 --> 00:05:31,800
‫好了, 就这样了｡

78
00:05:31,800 --> 00:05:36,060
‫接下来的事情就是找到我们要伤害的演员｡

79
00:05:36,060 --> 00:05:38,620
‫从你的攻击来看, 这是相当简单的｡

80
00:05:38,670 --> 00:05:41,610
‫点击点, 让演员在这里｡

81
00:05:42,090 --> 00:05:48,630
‫但是你需要检查它是否为空, 因为我们不想以一个空参与者结束, 我们试图破坏它,

82
00:05:48,630 --> 00:05:52,620
‫否则我们会崩溃｡

83
00:05:53,100 --> 00:05:58,800
‫所以你的挑战是调用take damage函数检查actor是否为空.

84
00:05:58,830 --> 00:06:04,690
‫首先, 我们不需要一个空的参与者, 并调用take damage, 看看你是否能让它编译｡

85
00:06:04,710 --> 00:06:06,360
‫暂停视频, 开始体验｡

86
00:06:08,480 --> 00:06:08,720
‫好吧, 我会的

87
00:06:08,720 --> 00:06:09,470
‫欢迎回来｡

88
00:06:09,620 --> 00:06:12,260
‫我们的客串演员来了｡

89
00:06:12,300 --> 00:06:15,710
‫我把它叫做我给予它一个变量.

90
00:06:15,710 --> 00:06:23,960
‫所以一个参与者指针就是命中参与者, 然后我们在这里做一个if语句,

91
00:06:23,960 --> 00:06:31,790
‫基本上就是说如果命中参与者不等于一个空指针, 那么我们就用这个命中参与者调用take

92
00:06:31,790 --> 00:06:37,970
‫damage函数.

93
00:06:38,390 --> 00:06:43,040
‫我们要做的是, 第一个参数是损失量｡

94
00:06:43,040 --> 00:06:44,630
‫第二个是什么？

95
00:06:44,630 --> 00:06:49,250
‫我将导航回“获取损坏”并进行查看｡

96
00:06:49,250 --> 00:06:54,650
‫下一个是我们把这个损坏事件放在一起的结构体｡

97
00:06:54,650 --> 00:06:56,660
‫让我们把这个放在第二｡

98
00:06:56,660 --> 00:07:00,800
‫然后我们来看看创建这个的控制器｡

99
00:07:00,800 --> 00:07:02,450
‫那是我们的控制器

100
00:07:02,450 --> 00:07:05,210
‫枪的控制器才是造成伤害的人｡

101
00:07:05,210 --> 00:07:11,210
‫然后这是煽动者在我们取伤害的最后一个参数｡

102
00:07:11,210 --> 00:07:19,010
‫如果actor不等于空指针, 我们可能只想在this中构造这个结构体, 因为如果我们没有一个actor来应用这个损坏,

103
00:07:19,010 --> 00:07:23,750
‫就不需要它了｡

104
00:07:24,410 --> 00:07:28,760
‫让我们来编译一下, 看看这是否可行｡

105
00:07:28,760 --> 00:07:30,290
‫所以我的日志出错了｡

106
00:07:30,290 --> 00:07:31,880
‫让我们看看发生了什么｡

107
00:07:31,880 --> 00:07:33,680
‫我只是少了一个分号｡

108
00:07:33,680 --> 00:07:34,820
‫这很简单

109
00:07:34,820 --> 00:07:37,040
‫一个要在拿到演员那里后才能修好｡

110
00:07:37,040 --> 00:07:38,330
‫我们再去试试｡

111
00:07:38,870 --> 00:07:39,320
‫好的, 谢谢

112
00:07:39,320 --> 00:07:46,760
‫一切都编译成功, 我们可以继续玩,

113
00:07:46,760 --> 00:07:52,220
‫只是检查射击不会给予我们任何零错误或尝试和崩溃的引擎｡

114
00:07:52,250 --> 00:07:53,900
‫看起来没问题｡

115
00:07:53,990 --> 00:08:02,810
‫所以我们将进入下一节课, 我们将试着接收这个演员的伤害, 我们已经把它放在了这个层次上｡

116
00:08:02,810 --> 00:08:03,560
‫所以你在那里｡

