﻿1
00:00:04,310 --> 00:00:05,270
‫你好, 欢迎｡

2
00:00:05,270 --> 00:00:12,020
‫在这节课中, 我们将研究局部变量的概念, 变量只存在于一个给定的函数中｡

3
00:00:12,020 --> 00:00:21,560
‫我们要看看如何用这个来设置我们的位置, 和存储在my向量中的值不同｡

4
00:00:21,590 --> 00:00:22,460
‫我们开始吧｡

5
00:00:22,640 --> 00:00:28,520
‫到目前为止, 我们一直在处理属于类的变量｡

6
00:00:28,520 --> 00:00:31,760
‫我们已经在Blueprint中完成了这一点, 现在我们已经在C++中完成了这一点｡

7
00:00:31,760 --> 00:00:37,190
‫这意味着变量的有效期与类的实例的有效期一样长｡

8
00:00:37,190 --> 00:00:43,970
‫每个实例都有自己的变量副本, 但当类实例处于活动状态时, 变量为2｡

9
00:00:43,970 --> 00:00:47,690
‫我刚才讲的这个概念其实有个名字｡

10
00:00:47,690 --> 00:00:49,130
‫它叫“范围”｡

11
00:00:49,460 --> 00:00:52,640
‫它的意思是这个变量能活多久？

12
00:00:52,640 --> 00:01:00,710
‫我刚刚描述了一个实例变量, 它的寿命和类的一个特定实例的寿命一样长｡

13
00:01:00,860 --> 00:01:03,890
‫现在还有其他类型的变量｡

14
00:01:03,890 --> 00:01:07,490
‫有些变量的寿命和函数一样长｡

15
00:01:07,490 --> 00:01:13,220
‫基本上, 当你调用一个特定的函数时, 该函数就会运行, 而函数一结束,

16
00:01:13,220 --> 00:01:14,960
‫变量就会消失｡

17
00:01:15,050 --> 00:01:23,660
‫所以在C++中, 一般来说, 变量是一个在大括号之间有效的语法｡

18
00:01:23,660 --> 00:01:25,520
‫所以这是一个很好的经验法则｡

19
00:01:25,520 --> 00:01:31,520
‫它并不总是完全正确的, 但是对于tick函数,

20
00:01:31,520 --> 00:01:39,740
‫我们这里有一些括号, 如果我们在这个tick函数中声明一个变量, 那么它只能存在一次｡

21
00:01:39,740 --> 00:01:44,120
‫调用tick函数, 下次将重新创建它｡

22
00:01:44,390 --> 00:01:46,070
‫移动平台｡

23
00:01:46,370 --> 00:01:48,650
‫如果我们看一下移动的平台, 就能看出这一点｡

24
00:01:48,980 --> 00:02:02,390
‫你可以看到my向量是在属于类定义的花括号中声明的, 这就是为什么这些变量和类的实例一样长｡

25
00:02:02,390 --> 00:02:04,610
‫所以我想证明给你看｡

26
00:02:04,610 --> 00:02:11,210
‫让我们进入移动平台DHCP, 在其中创建一个局部变量｡

27
00:02:11,210 --> 00:02:15,050
‫所以我要用和我们一样的方法来创建它｡

28
00:02:15,050 --> 00:02:20,960
‫当我们在头文件中声明错误时, 我们会有一个F向量, 然后是向量的名称,

29
00:02:20,960 --> 00:02:23,090
‫我会把它叫做局部向量｡

30
00:02:23,720 --> 00:02:28,130
‫然后我们可以在创建它的时候给它设置一个值｡

31
00:02:28,130 --> 00:02:32,960
‫我们可以使用F向量的构造函数来实现, 或者我们可以从另一个变量来实现,

32
00:02:32,960 --> 00:02:35,540
‫就像我们可以将一个变量传递给一个函数一样.

33
00:02:35,540 --> 00:02:38,870
‫所以我们可以首先使用构造函数方法｡

34
00:02:38,870 --> 00:02:46,040
‫所以我们会有一个F向量, 我会给予它一个1到3的值, 然后在行尾加分号｡

35
00:02:46,040 --> 00:02:48,230
‫这样一来, 现在就是一个局部变量｡

36
00:02:48,230 --> 00:02:55,070
‫它只存在于这个函数中, 并且每次调用该函数时都会重置｡

37
00:02:55,070 --> 00:03:01,010
‫所以如果我做这样的事情, 如果我做这样的事情,

38
00:03:01,010 --> 00:03:09,410
‫就像我们在第29行, 我的向量被更新了, 我们可以得到一个局部向量, 我们可以得到局部向量z,

39
00:03:09,410 --> 00:03:12,740
‫等于局部向量z加1｡

40
00:03:12,920 --> 00:03:26,240
‫如果我把我的位置设置到这个局部向量上, 每一帧都是一样的, 因为我们从同一个位置重新开始｡

41
00:03:26,240 --> 00:03:28,940
‫一､ 二､ 三, 每一个功能都打勾｡

42
00:03:28,940 --> 00:03:31,640
‫所以这个函数只存在于局部｡

43
00:03:31,640 --> 00:03:38,840
‫所以我想让你们做个小实验, 挑战一下, 用我的向量来设置局部向量｡

44
00:03:38,840 --> 00:03:46,010
‫所以你要做的不是从构造函数中设置它, 而是从向量中的当前值设置它.

45
00:03:46,040 --> 00:03:50,210
‫它会把这个向量的一个副本复制到你的本地向量中｡

46
00:03:50,510 --> 00:03:54,530
‫然后我想让你用局部向量把它定位｡

47
00:03:54,530 --> 00:04:00,380
‫因为我们尝试在每一帧更新局部向量, 让我们看看效果如何｡

48
00:04:00,380 --> 00:04:01,610
‫平台是否移动？

49
00:04:01,610 --> 00:04:07,490
‫你会期望它, 并去尝试它, 编译代码播放, 看看它是否真的这样做｡

50
00:04:07,490 --> 00:04:09,140
‫暂停视频, 开始体验｡

51
00:04:12,040 --> 00:04:12,640
‫好吧, 我会的

52
00:04:12,640 --> 00:04:13,630
‫欢迎回来｡

53
00:04:13,630 --> 00:04:21,100
‫所以我不再用这里的构造函数来设置局部向量, 而是用我的向量来设置｡

54
00:04:21,100 --> 00:04:28,540
‫所以我们取当前存储在向量中的值, 把它放到局部向量中,

55
00:04:28,810 --> 00:04:32,830
‫然后更新局部向量.

56
00:04:32,830 --> 00:04:39,700
‫我们每一帧都增加一个, 然后我想设置演员的位置, 而不是从我的向量,

57
00:04:39,700 --> 00:04:45,070
‫我们要从局部向量来设置｡

58
00:04:45,460 --> 00:04:48,940
‫你觉得这件事会怎么样？

59
00:04:48,940 --> 00:04:51,010
‫让我们去看看吧｡

60
00:04:51,010 --> 00:04:56,620
‫我将点击编译按钮,

61
00:04:56,620 --> 00:05:03,160
‫然后继续点击播放, 我们将看到平台仍在向右移动, 但不在Z方向向上移动｡

62
00:05:03,160 --> 00:05:09,700
‫所以你可以看到, 这并没有真正产生影响, 局部向量的增加,

63
00:05:09,700 --> 00:05:14,680
‫因为它是从我的向量中的当前值重置的, 每一帧｡

64
00:05:14,680 --> 00:05:17,350
‫不过, 我的向量仍在更新中｡

65
00:05:17,350 --> 00:05:19,840
‫每一帧的y值都在增加｡

66
00:05:19,840 --> 00:05:22,840
‫这就是为什么我们看到了向右的运动｡

67
00:05:22,840 --> 00:05:33,820
‫所以我们可以看到, 局部向量的变化是局部的, 方法之一就是把这个值从1增加到100｡

68
00:05:33,820 --> 00:05:38,560
‫所以我们要把局部向量值加100｡

69
00:05:38,770 --> 00:05:42,550
‫我们可以进行编译, 然后点击播放｡

70
00:05:42,760 --> 00:05:47,710
‫你会看到这个平台实际上在空中高出了100个单位｡

71
00:05:47,740 --> 00:05:55,450
‫让我们在这里花一秒钟, 用F八弹出, 用主工具栏中的暂停按钮暂停游戏,

72
00:05:55,450 --> 00:06:01,780
‫然后选择我们的移动平台, 在详细信息窗格中查看它｡

73
00:06:01,780 --> 00:06:05,410
‫为此, 出于某种原因, 我不得不在视口中单击它｡

74
00:06:05,410 --> 00:06:07,540
‫有时候它不工作, 只是在大纲中点击它｡

75
00:06:08,410 --> 00:06:17,440
‫我想向你们指出, 向量中的值, 向量中的z值,

76
00:06:17,440 --> 00:06:21,970
‫比变换的Z位置小100个单位｡

77
00:06:21,970 --> 00:06:27,010
‫因此, 你可以看到, 添加到本地向量已经产生了影响｡

78
00:06:27,010 --> 00:06:34,150
‫我们得到了一个位置, 比我的向量高100个单位｡

79
00:06:34,150 --> 00:06:41,500
‫局部变量的真正好处是当函数完成特定的执行时, 它们会被清除并重置｡

80
00:06:41,500 --> 00:06:44,440
‫因此, 您始终可以知道局部变量的预期结果｡

81
00:06:44,440 --> 00:06:52,720
‫你总是知道它的值是什么, 不像类变量, 它可以随时从任何其他函数更新｡

82
00:06:52,720 --> 00:06:57,190
‫所以我们会在几节课的时间里, 把这些局部变量, 放一放｡

83
00:06:57,190 --> 00:06:58,630
‫我们继续吧｡

