﻿1
00:00:04,400 --> 00:00:05,720
‫你好, 欢迎｡

2
00:00:05,720 --> 00:00:11,870
‫在这节课中, 我们将学习向量,

3
00:00:11,870 --> 00:00:19,810
‫以及更复杂的东西, 比如C++中的结构体, 以及我们如何访问各个部分, 以从结构体中获取和设置这些部分｡

4
00:00:19,820 --> 00:00:20,720
‫我们开始吧｡

5
00:00:21,260 --> 00:00:29,870
‫我们已经学会了如何在C++中处理基本的数据类型, 创建变量, 给变量赋值, 甚至用变量做一些基本的算术运算｡

6
00:00:29,870 --> 00:00:35,570
‫但是, 如果我们想处理更复杂的类型, 如向量和变换, 该怎么办呢？

7
00:00:35,840 --> 00:00:38,090
‫这个过程其实非常相似｡

8
00:00:38,090 --> 00:00:41,630
‫让我们从清除一些已经得到的测试代码开始｡

9
00:00:41,630 --> 00:00:43,580
‫我要删除我的所有属性｡

10
00:00:43,580 --> 00:00:46,700
‫对我来说, 这是第26行到第51行｡

11
00:00:46,940 --> 00:00:54,350
‫我还将进入C++文件, 删除第19到23行, 在这里,

12
00:00:54,350 --> 00:00:56,900
‫我将对刚才删除的变量进行处理｡

13
00:00:56,900 --> 00:01:01,760
‫所以现在开始播放是完全空的, 我们基本上回到了起点｡

14
00:01:02,570 --> 00:01:06,350
‫所以现在我想做的是添加一个新的you属性｡

15
00:01:06,350 --> 00:01:16,010
‫所有的大写字母都可以在任何地方编辑, 我给它一个F向量, 注意, 大写的F,

16
00:01:16,010 --> 00:01:22,190
‫大写的V, 这就是我们在蓝图中处理向量的方法｡

17
00:01:22,190 --> 00:01:27,470
‫表面下的向量是一样的, 但这是我们在C++中的输入方式.

18
00:01:27,470 --> 00:01:37,010
‫它前面的F只是让我们知道这是一个结构体, 就像移动平台后的A让我们知道这是一个参与者一样｡

19
00:01:37,010 --> 00:01:38,390
‫这不是C++的东西｡

20
00:01:38,390 --> 00:01:44,240
‫对于不同的类､ 结构体和类型, 这是一个不真实的命名约定｡

21
00:01:44,630 --> 00:01:51,080
‫我们要做的就是给予这个变量取一个名字, 它的工作方式和浮点数或者整型数完全一样.

22
00:01:51,080 --> 00:01:53,600
‫例如, 我们可以称之为我的浮动｡

23
00:01:53,600 --> 00:01:55,010
‫它不能有空格｡

24
00:01:55,160 --> 00:01:59,120
‫如果我们把分号放在这一行的末尾, 就这样了｡

25
00:01:59,120 --> 00:02:07,100
‫我们已经声明了一个新变量, 它将在编辑器的详细信息窗格中可见, 但这对我来说还不够｡

26
00:02:07,100 --> 00:02:14,030
‫我想给予它一个默认值, 它不同于默认的000｡

27
00:02:14,150 --> 00:02:17,690
‫要做到这一点, 我们需要用一个新术语更新我们的词汇表｡

28
00:02:17,690 --> 00:02:25,070
‫我们需要一个构造函数, 它在C++中本质上是生成一个新的结构体或类值的东西｡

29
00:02:25,160 --> 00:02:34,700
‫如果我们要为向量创建一个构造函数, 我们需要赋值, 这样我们就可以得到相等的结果.

30
00:02:34,700 --> 00:02:41,330
‫通常, 当我们处理整数或浮点数时, 我们可以只使用1或true之类的值｡

31
00:02:41,330 --> 00:02:46,280
‫有一些内置的值允许我们设置那些基本类型的值｡

32
00:02:46,280 --> 00:02:53,120
‫但是当我们有更复杂的类型时, 比如结构体, 我们需要使用构造函数,

33
00:02:53,120 --> 00:02:56,240
‫构造函数总是和数据类型同名｡

34
00:02:56,240 --> 00:03:02,660
‫所以f向量的拼写是一样的, 然后你打开一些括号,

35
00:03:02,660 --> 00:03:05,930
‫在括号里你给予出你想要的值｡

36
00:03:05,930 --> 00:03:08,600
‫所以X, Y, Z构成了一个矢量｡

37
00:03:08,600 --> 00:03:15,050
‫所以我们可以用逗号分隔一, 二, 三, 然后把括号括起来,

38
00:03:15,050 --> 00:03:17,000
‫把分号放在行尾｡

39
00:03:17,000 --> 00:03:23,480
‫这将在X, Y和Z方向上给予出默认值1, 2和3｡

40
00:03:23,480 --> 00:03:24,590
‫我们试试看吧｡

41
00:03:24,740 --> 00:03:27,470
‫返回到Unreal并点击编译按钮｡

42
00:03:27,560 --> 00:03:34,550
‫一旦成功完成, 我们就可以确保在异常值中选择了移动平台参与者, 然后查看详细信息窗格,

43
00:03:34,550 --> 00:03:40,730
‫发现确实有了一个名为“我的浮动”的新属性｡

44
00:03:40,730 --> 00:03:47,510
‫其他的都被拿走了, 在X, Y, Z的不同位置上的值是1, 2, 3,

45
00:03:47,510 --> 00:03:49,700
‫正如我们所期望的那样｡

46
00:03:50,090 --> 00:03:51,170
‫所以这很好｡

47
00:03:51,170 --> 00:03:57,680
‫但是如果我想得到这些值并把它们放在另一个属性中呢？

48
00:03:57,680 --> 00:04:04,250
‫所以如果我有另一个属性, 在任何地方都标记为编辑, 这样我们就可以在float类型的检查器中看到它,

49
00:04:04,550 --> 00:04:13,160
‫叫做my x, 我们将它默认为零, 这样我们就可以看到我们正在修改它｡

50
00:04:13,640 --> 00:04:22,370
‫我要做的是从开始play中的my float中获取x值, 并将其设置到my x变量中｡

51
00:04:22,460 --> 00:04:29,450
‫让我们看一下C++文件, 在开始播放的时候,

52
00:04:30,020 --> 00:04:38,600
‫在播放中, 超级大的那一行之后, 我们要把x设为我们想要从向量中得到的值, 但我们不想要整个向量｡

53
00:04:38,600 --> 00:04:39,860
‫那将是一个错误｡

54
00:04:39,860 --> 00:04:44,780
‫我们不能把一个向量设为浮点数, 我们只需要向量的x部分｡

55
00:04:44,930 --> 00:04:48,740
‫为了理解这一点, 我们需要理解运算符的概念｡

56
00:04:48,770 --> 00:04:53,090
‫运算符是C++中执行某些操作的符号｡

57
00:04:53,090 --> 00:04:54,590
‫我们已经见过几个了｡

58
00:04:54,590 --> 00:04:57,950
‫我们已经看到了加号运算符, 它把两个东西加在一起｡

59
00:04:57,950 --> 00:04:59,510
‫还有一个减号｡

60
00:04:59,510 --> 00:05:03,770
‫有一个相等运算符, equals运算符, 它赋值.

61
00:05:03,980 --> 00:05:04,310
‫的东西｡

62
00:05:04,310 --> 00:05:06,740
‫所以我们在19号线上使用这个｡

63
00:05:06,740 --> 00:05:12,020
‫这是一个把向量的值赋给X的运算符｡

64
00:05:12,230 --> 00:05:18,850
‫然后我们还有一个运算符, 我们需要知道哪个是DOT运算符｡

65
00:05:18,860 --> 00:05:23,360
‫它是一个从结构或类中获取内容的运算符｡

66
00:05:23,360 --> 00:05:27,260
‫所以我们要从向量中得到X｡

67
00:05:27,260 --> 00:05:34,040
‫所以我们用了一个点运算符, 我们用了点x, 现在我们没有在向量和x之间用空格｡

68
00:05:34,040 --> 00:05:42,200
‫我们把它们放在一起, 就像这样, 这是我们通常的做法, 尽管在里面放空格不一定是错误的｡

69
00:05:42,200 --> 00:05:51,560
‫我们得到了向量x, 应该得到向量的x值, 然后把它放到, my, x, float中.

70
00:05:51,560 --> 00:05:57,500
‫所以我们把分号放在这一行的最后, 像往常一样, 我忽略了红色的波浪线, 因为有时它们需要很长时间来更新,

71
00:05:57,500 --> 00:06:00,530
‫有时它们是不正确的｡

72
00:06:00,650 --> 00:06:08,630
‫然后, 我们将进入实时编码, 点击重新编译按钮, 检查是否获得成功结果｡

73
00:06:08,630 --> 00:06:11,120
‫不, 你看, 我们有一个构建失败｡

74
00:06:11,120 --> 00:06:17,390
‫如果你看这个错误, 它说我的向量是一个未声明的标识符, 这是因为我打错了｡

75
00:06:17,390 --> 00:06:22,820
‫我把F向量称为我的浮点数, 你可能会对着屏幕尖叫,

76
00:06:22,820 --> 00:06:26,180
‫但这很好地向你展示了即使是有经验的程序员也会犯错误｡

77
00:06:26,180 --> 00:06:30,890
‫我们想把它命名为my vector,

78
00:06:30,890 --> 00:06:35,720
‫所以我将返回到头文件并将其重命名为my vector, 这应该可以消除我大脑中的问题｡

79
00:06:35,720 --> 00:06:38,900
‫让我们继续, 再次单击编译按钮｡

80
00:06:38,900 --> 00:06:44,180
‫这只是让你体验一下当你犯错误的时候, 你会得到一个编译错误｡

81
00:06:44,180 --> 00:06:45,280
‫这种事经常发生

82
00:06:45,300 --> 00:06:48,290
‫事实上, 不犯错误是很难得的｡

83
00:06:48,290 --> 00:06:56,300
‫当您第一次执行某项操作时, 我们将继续单击“播放”, 然后在详细信息窗格中查看所获得的值｡

84
00:06:56,300 --> 00:07:05,990
‫你现在可以看到my的x被设置为1, 因为这是my向量变量x分量的值｡

85
00:07:06,080 --> 00:07:09,800
‫所以我想挑战你们设定一个向量值｡

86
00:07:09,830 --> 00:07:11,930
‫我们已经从向量中得到了值｡

87
00:07:11,930 --> 00:07:13,070
‫现在, 让我们尝试设置它们｡

88
00:07:13,070 --> 00:07:17,240
‫基本上可以尝试使用点运算符来设置值｡

89
00:07:17,480 --> 00:07:27,050
‫试着把等号的两边翻转一下, 这样我们就有了右边的X和左边的向量｡

90
00:07:27,050 --> 00:07:30,500
‫如果你把它换成Y或Z呢？

91
00:07:30,530 --> 00:07:32,090
‫有什么区别吗？

92
00:07:32,120 --> 00:07:33,500
‫暂停视频, 开始体验｡

93
00:07:36,830 --> 00:07:37,430
‫好吧, 我会的

94
00:07:37,430 --> 00:07:37,940
‫欢迎回来｡

95
00:07:37,940 --> 00:07:40,640
‫所以我要把这两个人翻过来看看｡

96
00:07:40,640 --> 00:07:49,010
‫让我们回到C++, 在开始播放中, 我会说向量点y等于x,

97
00:07:49,010 --> 00:07:52,910
‫然后在行尾加上分号.

98
00:07:52,910 --> 00:07:57,770
‫这也是我们在结构体中设置值的方法｡

99
00:07:57,770 --> 00:08:06,890
‫让我们回到Unreal, 重新编译, 然后我们可以在X中设置一些值｡

100
00:08:06,890 --> 00:08:08,960
‫所以我把值5放在这里｡

101
00:08:10,010 --> 00:08:15,650
‫然后, 我将继续播放并查看移动平台的详细信息窗格｡

102
00:08:15,650 --> 00:08:24,620
‫当然, 向量的y值在开始播放时已经被x的值更新了｡

103
00:08:24,740 --> 00:08:26,060
‫所以恭喜你

104
00:08:26,060 --> 00:08:33,080
‫我们已经看到了如何使用更复杂的类型, 如C++中的结构体｡

105
00:08:33,080 --> 00:08:34,910
‫我们下节课再见｡

