﻿1
00:00:04,750 --> 00:00:05,980
‫你好, 欢迎｡

2
00:00:05,980 --> 00:00:12,010
‫在这节课中, 我们将学习如何在C++中, 从函数中得到输出｡

3
00:00:12,010 --> 00:00:19,870
‫我们将用它来大大简化我们的代码, 并开始实现我们已经写好的一些伪代码｡

4
00:00:19,870 --> 00:00:20,800
‫我们开始吧｡

5
00:00:20,980 --> 00:00:26,350
‫因此, 在我们试图理解函数的返回值之前, 让我们先做一个简短的迂回, 了解一下它｡

6
00:00:26,350 --> 00:00:29,290
‫这里的两个概念为我们的词汇表增加了两个概念｡

7
00:00:29,590 --> 00:00:37,060
‫所以第一个是表达式表达式是一段代码, 它产生一个值.

8
00:00:37,060 --> 00:00:43,180
‫这是一个语句, 它是一段代码, 是一个要执行的动作｡

9
00:00:43,570 --> 00:00:51,130
‫这两个表达式实际上是有关系的, 表达式几乎总是一个语句, 要计算一段代码的值,

10
00:00:51,130 --> 00:00:57,100
‫你需要它是一个要执行的操作｡

11
00:00:57,100 --> 00:01:01,030
‫但反过来说, 情况未必如此｡

12
00:01:01,030 --> 00:01:04,780
‫一个语句并不总是能给予你一个值｡

13
00:01:04,840 --> 00:01:10,960
‫让我们来看看一些表达式的例子, 还有一些我们已经写好的代码中没有的东西｡

14
00:01:11,170 --> 00:01:22,510
‫所以当我们在C++中输入my vector时, 这是一个表达式, 因为它的值是存储在my vector变量中的值｡

15
00:01:22,510 --> 00:01:24,730
‫对于局部向量也是如此｡

16
00:01:24,730 --> 00:01:33,850
‫实际上如果你有局部向量加z, 它本身就是一个表达式, 局部向量加100｡

17
00:01:33,850 --> 00:01:41,620
‫它本身也是一个表达式, 因为局部向量z给出了Z成员内部的值｡

18
00:01:41,620 --> 00:01:46,960
‫当你加上100, 就会得到一个新的值｡

19
00:01:46,960 --> 00:01:48,700
‫这些都是表达式｡

20
00:01:48,940 --> 00:01:55,360
‫然而, 当我们声明局部向量时, 我们说F向量, 局部向量等于我的向量,

21
00:01:55,360 --> 00:01:58,870
‫并在行尾放一个分号｡

22
00:01:58,870 --> 00:02:01,000
‫我们不能用它来求值｡

23
00:02:01,000 --> 00:02:02,590
‫没有任何价值｡

24
00:02:02,590 --> 00:02:06,370
‫它只是告诉C++这是一个你要执行的动作.

25
00:02:06,370 --> 00:02:09,310
‫我要你创建一个新的局部向量｡

26
00:02:09,310 --> 00:02:11,980
‫所以这不是一个表达式｡

27
00:02:12,310 --> 00:02:17,020
‫但是, 表达式的内容是获取演员位置｡

28
00:02:17,020 --> 00:02:20,950
‫这是一个我们调用的函数, 因为它的末尾有括号｡

29
00:02:20,950 --> 00:02:22,720
‫我们在这里没有任何争论｡

30
00:02:22,720 --> 00:02:26,290
‫这是一个空的参数列表, 但它正在调用一些内容｡

31
00:02:26,290 --> 00:02:37,810
‫因为这个函数有一个返回值, 这里的代码实际上是一个表达式, 它接受函数返回的值｡

32
00:02:37,810 --> 00:02:44,350
‫这与我们之前在Blueprint中看到的输出引脚基本相同｡

33
00:02:44,350 --> 00:02:50,800
‫与Blueprint不同, 一个函数只能有一个输出值｡

34
00:02:50,800 --> 00:02:52,600
‫只有一个返回值｡

35
00:02:52,600 --> 00:02:59,830
‫这就是我们在这里可以使用的, 我们已经写了伪代码, 它说, 获取当前位置｡

36
00:02:59,830 --> 00:03:02,440
‫这就是我们要做的｡

37
00:03:02,440 --> 00:03:08,410
‫我们将使用get active location来获取位置｡

38
00:03:08,410 --> 00:03:11,320
‫因此, 让我们在这里创建一个新的局部变量｡

39
00:03:11,320 --> 00:03:14,650
‫我们会有一个新的局部变量, 叫做, F, 向量类型｡

40
00:03:14,650 --> 00:03:20,350
‫它必须是一个F类型的向量, 因为这是从获取活动位置返回的类型｡

41
00:03:20,440 --> 00:03:29,470
‫我们将调用当前位置, 并将其设置为结果或表达式, 获取演员位置,

42
00:03:29,470 --> 00:03:37,540
‫然后用括号括起一组匹配的括号, 然后用分号结束这行｡

43
00:03:37,540 --> 00:03:44,020
‫如果我们仔细分析一下这一行, 我们可以看到这里的这一位, 获取参与者位置, 括号是表达式,

44
00:03:44,020 --> 00:03:49,990
‫它为我们获取值, 这是参与者的当前位置｡

45
00:03:50,290 --> 00:03:57,040
‫然后我们对当前位置进行赋值, 它也在这里声明.

46
00:03:57,040 --> 00:04:00,550
‫所以在这一行, 这一整行都不是一个表达式｡

47
00:04:00,550 --> 00:04:03,220
‫没有任何价值, 这是一个声明｡

48
00:04:03,220 --> 00:04:09,880
‫通常你可以分辨出一个语句, 因为在C++中它以分号结尾｡

49
00:04:09,880 --> 00:04:16,780
‫好的,

50
00:04:16,780 --> 00:04:29,470
‫这基本上可以让我们去掉之前用过的my向量和局部向量因为我们应该可以更新这里的局部变量, 这个我们从演员的位置得到的当前位置｡

51
00:04:29,470 --> 00:04:34,390
‫我们接下来要做的是, 在这里, 我们有一个注释, 它说, 设置位置｡

52
00:04:34,390 --> 00:04:45,430
‫在注释行之后, 我将使用表达式current location设置演员位置, 也就是使用变量值,

53
00:04:45,430 --> 00:04:51,460
‫然后在行尾放一个分号, 表示这是一条语句.

54
00:04:51,460 --> 00:04:58,990
‫我们希望它在一个位置执行这个动作集, 注意, 虽然我的注释是缩进的,

55
00:04:58,990 --> 00:05:04,120
‫但我决定不缩进代码来匹配, 因为通常我们希望这样｡

56
00:05:04,630 --> 00:05:09,130
‫代码在函数中处于一个缩进级别｡

57
00:05:09,670 --> 00:05:15,490
‫现在我能做的就是删除之前的所有代码, 所有涉及局部向量的代码｡

58
00:05:15,490 --> 00:05:18,430
‫我的向量使用局部向量设置位置｡

59
00:05:18,430 --> 00:05:23,830
‫我可以删除所有这些内容, 这样我们现在得到的就是我们评论周围的内容｡

60
00:05:24,040 --> 00:05:27,100
‫我还将进入头文件, 在这里做一点清理｡

61
00:05:27,100 --> 00:05:31,420
‫我们不再需要向量, 我们不再需要新的属性｡

62
00:05:31,420 --> 00:05:34,440
‫所以我也要把这些删除｡

63
00:05:34,450 --> 00:05:40,000
‫现在很明显, 移动平台CP实际上并没有做太多的事情, 因为我们得到了当前的活动位置,

64
00:05:40,000 --> 00:05:44,680
‫然后我们再次设置它, 这基本上没有任何影响｡

65
00:05:44,680 --> 00:05:52,870
‫所以我希望你能尝试一下更新这个tick函数中移动平台的当前位置｡

66
00:05:52,990 --> 00:05:56,530
‫因此, 请根据需要使用X或Y成员｡

67
00:05:56,530 --> 00:06:03,820
‫一个X将使您向前移动, 一个Y将使您向右移动, 然后您可以添加到它, 并重新分配到成员中,

68
00:06:03,820 --> 00:06:08,770
‫就像我们之前所做的那样, 以更新我们的移动平台位置｡

69
00:06:08,770 --> 00:06:15,940
‫根据您希望平台移动的速度添加一个或两个变量,

70
00:06:15,940 --> 00:06:23,920
‫然后将平台移动到其起始位置, 因为现在我们没有成员变量来告诉它起始位置, 我们实际上使用的是当前位置｡

71
00:06:23,920 --> 00:06:28,960
‫因此, 无论您将平台放置在何处, 平台都将从何处开始｡

72
00:06:29,200 --> 00:06:35,380
‫然后我希望你编译并测试你的代码, 看看它是否像你所期望的那样在移动｡

73
00:06:35,410 --> 00:06:37,240
‫暂停视频, 开始体验｡

74
00:06:40,030 --> 00:06:40,360
‫好吧, 我会的

75
00:06:40,360 --> 00:06:41,240
‫欢迎回来｡

76
00:06:41,260 --> 00:06:49,210
‫所以我们要把这行代码放在注释的下面, 在这个位置加上向量.

77
00:06:49,600 --> 00:06:52,900
‫我们把它放在这里的原因是因为顺序｡

78
00:06:52,900 --> 00:06:56,830
‫我们要获取当前位置, 更新它, 然后设置它｡

79
00:06:56,860 --> 00:06:59,710
‫我们不希望那里发生任何不正常的事情｡

80
00:07:00,070 --> 00:07:04,790
‫如果我们在创建变量之前更新它, 那么, 这个变量就不存在了｡

81
00:07:04,810 --> 00:07:06,490
‫请记住, 它是一个局部变量｡

82
00:07:06,520 --> 00:07:11,110
‫它只存在于我们在函数的这个特定调用中创建它之后｡

83
00:07:11,110 --> 00:07:16,750
‫如果我们在再次设置演员位置后再做一次, 当我们到达函数的右大括号时,

84
00:07:16,750 --> 00:07:20,210
‫修改就会被丢弃｡

85
00:07:20,260 --> 00:07:29,410
‫所以我们要设置当前位置, 点x, 我会用等于当前位置, 点x加1,

86
00:07:29,410 --> 00:07:34,180
‫然后在行尾放一个分号｡

87
00:07:34,180 --> 00:07:40,180
‫我们将回到Unreal, 然后点击编译按钮｡

88
00:07:40,180 --> 00:07:45,640
‫正如我提到的, 我们现在需要把这个移动平台移到它的起始位置｡

89
00:07:45,640 --> 00:07:51,490
‫我将点击第三人称角色, 并通过右键点击位置, 点击“复制”来复制他的位置, 然后转到移动平台,

90
00:07:51,490 --> 00:07:56,770
‫右键点击其位置, 点击“粘贴”｡

91
00:07:56,770 --> 00:08:01,510
‫所以这就把平台放在了我们的播放器里面, 这实际上并不是我们想要的｡

92
00:08:01,510 --> 00:08:09,790
‫我会像这样把它稍微移到玩家的右边, 这样我就可以看到它是否在正确的高度｡

93
00:08:09,790 --> 00:08:15,400
‫我想我会把它做得更低一点, 这是使用当前位置而不是位置变量的好处之一,

94
00:08:15,400 --> 00:08:20,560
‫就是我可以实际看到这个平台在世界上的位置｡

95
00:08:20,800 --> 00:08:27,130
‫现在, 如果我点击播放, 你会看到平台在X方向上很好地移动,

96
00:08:27,130 --> 00:08:31,510
‫我仍然可以跳到它上面, 跟着它一起移动｡

97
00:08:31,510 --> 00:08:32,450
‫好东西｡

98
00:08:32,470 --> 00:08:36,490
‫现在, 我们已经了解了函数的返回值是如何工作的｡

99
00:08:36,490 --> 00:08:43,160
‫我们真正开始理解C++世界蓝图中的许多概念｡

100
00:08:43,180 --> 00:08:44,890
‫我们下节课再见｡

