‫你好, 欢迎｡
‫在这节课中, 我们将学习向量,
‫以及更复杂的东西, 比如C++中的结构体, 以及我们如何访问各个部分, 以从结构体中获取和设置这些部分｡
‫我们开始吧｡
‫我们已经学会了如何在C++中处理基本的数据类型, 创建变量, 给变量赋值, 甚至用变量做一些基本的算术运算｡
‫但是, 如果我们想处理更复杂的类型, 如向量和变换, 该怎么办呢？
‫这个过程其实非常相似｡
‫让我们从清除一些已经得到的测试代码开始｡
‫我要删除我的所有属性｡
‫对我来说, 这是第26行到第51行｡
‫我还将进入C++文件, 删除第19到23行, 在这里,
‫我将对刚才删除的变量进行处理｡
‫所以现在开始播放是完全空的, 我们基本上回到了起点｡
‫所以现在我想做的是添加一个新的you属性｡
‫所有的大写字母都可以在任何地方编辑, 我给它一个F向量, 注意, 大写的F,
‫大写的V, 这就是我们在蓝图中处理向量的方法｡
‫表面下的向量是一样的, 但这是我们在C++中的输入方式.
‫它前面的F只是让我们知道这是一个结构体, 就像移动平台后的A让我们知道这是一个参与者一样｡
‫这不是C++的东西｡
‫对于不同的类､ 结构体和类型, 这是一个不真实的命名约定｡
‫我们要做的就是给予这个变量取一个名字, 它的工作方式和浮点数或者整型数完全一样.
‫例如, 我们可以称之为我的浮动｡
‫它不能有空格｡
‫如果我们把分号放在这一行的末尾, 就这样了｡
‫我们已经声明了一个新变量, 它将在编辑器的详细信息窗格中可见, 但这对我来说还不够｡
‫我想给予它一个默认值, 它不同于默认的000｡
‫要做到这一点, 我们需要用一个新术语更新我们的词汇表｡
‫我们需要一个构造函数, 它在C++中本质上是生成一个新的结构体或类值的东西｡
‫如果我们要为向量创建一个构造函数, 我们需要赋值, 这样我们就可以得到相等的结果.
‫通常, 当我们处理整数或浮点数时, 我们可以只使用1或true之类的值｡
‫有一些内置的值允许我们设置那些基本类型的值｡
‫但是当我们有更复杂的类型时, 比如结构体, 我们需要使用构造函数,
‫构造函数总是和数据类型同名｡
‫所以f向量的拼写是一样的, 然后你打开一些括号,
‫在括号里你给予出你想要的值｡
‫所以X, Y, Z构成了一个矢量｡
‫所以我们可以用逗号分隔一, 二, 三, 然后把括号括起来,
‫把分号放在行尾｡
‫这将在X, Y和Z方向上给予出默认值1, 2和3｡
‫我们试试看吧｡
‫返回到Unreal并点击编译按钮｡
‫一旦成功完成, 我们就可以确保在异常值中选择了移动平台参与者, 然后查看详细信息窗格,
‫发现确实有了一个名为“我的浮动”的新属性｡
‫其他的都被拿走了, 在X, Y, Z的不同位置上的值是1, 2, 3,
‫正如我们所期望的那样｡
‫所以这很好｡
‫但是如果我想得到这些值并把它们放在另一个属性中呢？
‫所以如果我有另一个属性, 在任何地方都标记为编辑, 这样我们就可以在float类型的检查器中看到它,
‫叫做my x, 我们将它默认为零, 这样我们就可以看到我们正在修改它｡
‫我要做的是从开始play中的my float中获取x值, 并将其设置到my x变量中｡
‫让我们看一下C++文件, 在开始播放的时候,
‫在播放中, 超级大的那一行之后, 我们要把x设为我们想要从向量中得到的值, 但我们不想要整个向量｡
‫那将是一个错误｡
‫我们不能把一个向量设为浮点数, 我们只需要向量的x部分｡
‫为了理解这一点, 我们需要理解运算符的概念｡
‫运算符是C++中执行某些操作的符号｡
‫我们已经见过几个了｡
‫我们已经看到了加号运算符, 它把两个东西加在一起｡
‫还有一个减号｡
‫有一个相等运算符, equals运算符, 它赋值.
‫的东西｡
‫所以我们在19号线上使用这个｡
‫这是一个把向量的值赋给X的运算符｡
‫然后我们还有一个运算符, 我们需要知道哪个是DOT运算符｡
‫它是一个从结构或类中获取内容的运算符｡
‫所以我们要从向量中得到X｡
‫所以我们用了一个点运算符, 我们用了点x, 现在我们没有在向量和x之间用空格｡
‫我们把它们放在一起, 就像这样, 这是我们通常的做法, 尽管在里面放空格不一定是错误的｡
‫我们得到了向量x, 应该得到向量的x值, 然后把它放到, my, x, float中.
‫所以我们把分号放在这一行的最后, 像往常一样, 我忽略了红色的波浪线, 因为有时它们需要很长时间来更新,
‫有时它们是不正确的｡
‫然后, 我们将进入实时编码, 点击重新编译按钮, 检查是否获得成功结果｡
‫不, 你看, 我们有一个构建失败｡
‫如果你看这个错误, 它说我的向量是一个未声明的标识符, 这是因为我打错了｡
‫我把F向量称为我的浮点数, 你可能会对着屏幕尖叫,
‫但这很好地向你展示了即使是有经验的程序员也会犯错误｡
‫我们想把它命名为my vector,
‫所以我将返回到头文件并将其重命名为my vector, 这应该可以消除我大脑中的问题｡
‫让我们继续, 再次单击编译按钮｡
‫这只是让你体验一下当你犯错误的时候, 你会得到一个编译错误｡
‫这种事经常发生
‫事实上, 不犯错误是很难得的｡
‫当您第一次执行某项操作时, 我们将继续单击“播放”, 然后在详细信息窗格中查看所获得的值｡
‫你现在可以看到my的x被设置为1, 因为这是my向量变量x分量的值｡
‫所以我想挑战你们设定一个向量值｡
‫我们已经从向量中得到了值｡
‫现在, 让我们尝试设置它们｡
‫基本上可以尝试使用点运算符来设置值｡
‫试着把等号的两边翻转一下, 这样我们就有了右边的X和左边的向量｡
‫如果你把它换成Y或Z呢？
‫有什么区别吗？
‫暂停视频, 开始体验｡
‫好吧, 我会的
‫欢迎回来｡
‫所以我要把这两个人翻过来看看｡
‫让我们回到C++, 在开始播放中, 我会说向量点y等于x,
‫然后在行尾加上分号.
‫这也是我们在结构体中设置值的方法｡
‫让我们回到Unreal, 重新编译, 然后我们可以在X中设置一些值｡
‫所以我把值5放在这里｡
‫然后, 我将继续播放并查看移动平台的详细信息窗格｡
‫当然, 向量的y值在开始播放时已经被x的值更新了｡
‫所以恭喜你
‫我们已经看到了如何使用更复杂的类型, 如C++中的结构体｡
‫我们下节课再见｡