﻿1
00:00:04,420 --> 00:00:05,260
‫你好, 欢迎｡

2
00:00:05,260 --> 00:00:12,400
‫在这节课中, 我们将学习C++中的纯蓝图函数, 也就是概念函数｡

3
00:00:12,400 --> 00:00:17,950
‫我们将了解consort关键字是什么, 我们如何使用它, 以及它如何限制我们在代码中可以做的事情,

4
00:00:17,950 --> 00:00:20,200
‫以使我们更安全｡

5
00:00:20,200 --> 00:00:22,000
‫让我们深入了解一下它是如何工作的｡

6
00:00:22,850 --> 00:00:32,570
‫在蓝图中, 我们能够使函数变得纯粹, 这意味着我们可以消除对执行引脚的需要｡

7
00:00:32,600 --> 00:00:38,840
‫现在, 在C++中, 我们可以做一些更强的事情, 那就是使函数成为常量｡

8
00:00:39,230 --> 00:00:41,540
‫那么, 函数const是什么意思呢？

9
00:00:41,570 --> 00:00:51,950
‫这意味着该函数不能修改类的状态, 实际上是由编译器的规则强制执行的｡

10
00:00:51,950 --> 00:00:54,500
‫让我给予你们举个例子｡

11
00:00:54,500 --> 00:01:01,220
‫如果我使用should platform return函数, 这个函数不应该修改类中的任何内容,

12
00:01:01,220 --> 00:01:07,790
‫如果我们忘记了这一点, 那就是一个错误,

13
00:01:07,790 --> 00:01:16,460
‫因为如果调用这个函数, 并在if语句中使用, 实际上改变了平台的位置, 或者它更新了移动距离或平台速度, 那就太奇怪了｡

14
00:01:16,640 --> 00:01:20,540
‫所以为了保持诚实, 我们可以让它转变｡

15
00:01:20,540 --> 00:01:28,610
‫我们的方法是把contact关键字放在函数的括号后面｡

16
00:01:28,610 --> 00:01:30,920
‫我们也经常在这里留一个空间｡

17
00:01:31,220 --> 00:01:41,700
‫现在, 为了让它正确地匹配C++文件中的函数, 我们实际上还必须把const关键字放在那里｡

18
00:01:41,720 --> 00:01:46,730
‫就像我说的, 这使得任何修改类的行为都是错误的.

19
00:01:46,730 --> 00:01:53,480
‫所以如果在应该平台返回的时候, 我就尝试修改一个类变量比如移动距离｡

20
00:01:53,480 --> 00:01:57,050
‫我可能会尝试将移动距离设置为200｡

21
00:01:57,320 --> 00:02:01,700
‫让我们看看当我们转到unreal并点击编译按钮时会发生什么｡

22
00:02:01,700 --> 00:02:02,020
‫好吧, 我会的

23
00:02:02,030 --> 00:02:03,830
‫您可以看到现在有一个错误｡

24
00:02:03,830 --> 00:02:09,230
‫它确实无法构建,

25
00:02:09,230 --> 00:02:15,110
‫如果你看一下这个错误, 你会发现这里有一些关于不能修改的东西, 因为它是通过一个常量指针来访问的｡

26
00:02:15,110 --> 00:02:17,330
‫现在不用担心语言问题｡

27
00:02:17,330 --> 00:02:22,490
‫这有点难解释, 但关键字const在那里, 它说它不能修改某些东西,

28
00:02:22,490 --> 00:02:25,760
‫这是至关重要的｡

29
00:02:25,760 --> 00:02:31,820
‫同样, 如果你调用了任何没有被标记为const的函数, 这也是一个问题｡

30
00:02:31,820 --> 00:02:39,410
‫虽然调用获取演员位置是一个代价函数, 但它不会改变任何东西, 只是获取位置｡

31
00:02:39,410 --> 00:02:48,140
‫不能调用未标记为const的set actor location, 因此它是无效的｡

32
00:02:48,140 --> 00:02:50,270
‫它可能正在修改类｡

33
00:02:50,270 --> 00:02:55,760
‫所以任何未标记为const的函数都不允许从成本函数中调用｡

34
00:02:56,090 --> 00:02:58,730
‫所以你可以看到一个问题出现了｡

35
00:02:58,730 --> 00:03:05,900
‫我们实际上不能在should platform return中调用get distance moved, 因为should platform return是常量,

36
00:03:05,900 --> 00:03:09,620
‫但是get distance moved没有被标记为常量｡

37
00:03:09,620 --> 00:03:16,280
‫所以, 快速充电, 得到移动的距离, const, make, get, distance,

38
00:03:16,280 --> 00:03:22,040
‫move, cost, 所以, 在文件头中, 看到p文件, 你要添加const关键字,

39
00:03:22,220 --> 00:03:26,120
‫让C++知道它不应该修改类, 它现在编译了吗, 暂停视频, 试试看｡

40
00:03:29,320 --> 00:03:29,770
‫好吧, 我会的

41
00:03:29,770 --> 00:03:30,420
‫欢迎回来｡

42
00:03:30,430 --> 00:03:32,830
‫所以我们先来看看头文件｡

43
00:03:32,830 --> 00:03:38,530
‫在右括号后面, 我们要加上一个空格的概念, 然后我们再回到C++文件｡

44
00:03:38,530 --> 00:03:42,670
‫而在括号移动了一段距离之后, 我们就要把空间概念｡

45
00:03:42,670 --> 00:03:47,680
‫现在, 移动距离下的曲线应该会在一段时间内更新｡

46
00:03:47,680 --> 00:03:55,780
‫但是如果我们转到Unreal并点击编译按钮, 这将是编译器是否喜欢我们所做的最终仲裁者｡

47
00:03:55,780 --> 00:04:03,100
‫而这一次编译成功了, 这意味着我们已经正确地更新了我们的代码｡

48
00:04:03,100 --> 00:04:08,860
‫这是有道理的, 因为没有什么东西被称为从得到距离移动, 这不是概念,

49
00:04:08,860 --> 00:04:10,780
‫它不试图改变任何东西｡

50
00:04:10,780 --> 00:04:18,250
‫当我们调用一个函数时,

51
00:04:18,250 --> 00:04:26,230
‫我们只使用常量函数, 这是一种提高代码安全性的方法, 因为函数不会在我们不知道的情况下改变东西｡

52
00:04:26,230 --> 00:04:30,790
‫现在作为一个小练习, 你可能想浏览一下,

53
00:04:30,790 --> 00:04:35,380
‫到目前为止, 我们使用过的所有函数, 看看哪些被标记为常量, 哪些不是｡

54
00:04:35,410 --> 00:04:41,890
‫您只需将鼠标悬停在get actor location之类的函数上, 查看是否包含弹出窗口,

55
00:04:41,890 --> 00:04:46,240
‫以及括号后面是否有联系人, 就可以完成此操作｡

56
00:04:46,240 --> 00:04:53,050
‫你可以看到, 把get active location悬停在上面, 得到const, 把get name悬停在上面,

57
00:04:53,050 --> 00:04:55,360
‫也得到const, 这是有意义的｡

58
00:04:55,360 --> 00:04:59,560
‫这两个都不应该改变我们班的状况｡

59
00:04:59,770 --> 00:05:05,110
‫现在如果我把鼠标悬停在tick上, 你会看到它没有被标记为const,

60
00:05:05,110 --> 00:05:11,350
‫这是有意义的, 因为Tick通常被用来更新类在世界中的位置, 或者类的任何状态｡

61
00:05:11,500 --> 00:05:13,360
‫我们有了向量｡

62
00:05:13,360 --> 00:05:18,880
‫如果我们把鼠标悬停在, get safe, normal上,

63
00:05:18,880 --> 00:05:24,790
‫你可以看到它被标记为const, 这是因为get safe, normal实际上并没有修改向量, 它只是返回一个包含新向量的值｡

64
00:05:24,790 --> 00:05:25,510
‫原来如此｡

65
00:05:25,510 --> 00:05:32,620
‫在这节课中, 我们学习了如何在函数中添加const, 以提高代码的安全性｡

66
00:05:32,620 --> 00:05:34,060
‫下次见｡

