‫你好, 欢迎｡
‫在这节课中, 我们将研究局部变量的概念, 变量只存在于一个给定的函数中｡
‫我们要看看如何用这个来设置我们的位置, 和存储在my向量中的值不同｡
‫我们开始吧｡
‫到目前为止, 我们一直在处理属于类的变量｡
‫我们已经在Blueprint中完成了这一点, 现在我们已经在C++中完成了这一点｡
‫这意味着变量的有效期与类的实例的有效期一样长｡
‫每个实例都有自己的变量副本, 但当类实例处于活动状态时, 变量为2｡
‫我刚才讲的这个概念其实有个名字｡
‫它叫“范围”｡
‫它的意思是这个变量能活多久？
‫我刚刚描述了一个实例变量, 它的寿命和类的一个特定实例的寿命一样长｡
‫现在还有其他类型的变量｡
‫有些变量的寿命和函数一样长｡
‫基本上, 当你调用一个特定的函数时, 该函数就会运行, 而函数一结束,
‫变量就会消失｡
‫所以在C++中, 一般来说, 变量是一个在大括号之间有效的语法｡
‫所以这是一个很好的经验法则｡
‫它并不总是完全正确的, 但是对于tick函数,
‫我们这里有一些括号, 如果我们在这个tick函数中声明一个变量, 那么它只能存在一次｡
‫调用tick函数, 下次将重新创建它｡
‫移动平台｡
‫如果我们看一下移动的平台, 就能看出这一点｡
‫你可以看到my向量是在属于类定义的花括号中声明的, 这就是为什么这些变量和类的实例一样长｡
‫所以我想证明给你看｡
‫让我们进入移动平台DHCP, 在其中创建一个局部变量｡
‫所以我要用和我们一样的方法来创建它｡
‫当我们在头文件中声明错误时, 我们会有一个F向量, 然后是向量的名称,
‫我会把它叫做局部向量｡
‫然后我们可以在创建它的时候给它设置一个值｡
‫我们可以使用F向量的构造函数来实现, 或者我们可以从另一个变量来实现,
‫就像我们可以将一个变量传递给一个函数一样.
‫所以我们可以首先使用构造函数方法｡
‫所以我们会有一个F向量, 我会给予它一个1到3的值, 然后在行尾加分号｡
‫这样一来, 现在就是一个局部变量｡
‫它只存在于这个函数中, 并且每次调用该函数时都会重置｡
‫所以如果我做这样的事情, 如果我做这样的事情,
‫就像我们在第29行, 我的向量被更新了, 我们可以得到一个局部向量, 我们可以得到局部向量z,
‫等于局部向量z加1｡
‫如果我把我的位置设置到这个局部向量上, 每一帧都是一样的, 因为我们从同一个位置重新开始｡
‫一､ 二､ 三, 每一个功能都打勾｡
‫所以这个函数只存在于局部｡
‫所以我想让你们做个小实验, 挑战一下, 用我的向量来设置局部向量｡
‫所以你要做的不是从构造函数中设置它, 而是从向量中的当前值设置它.
‫它会把这个向量的一个副本复制到你的本地向量中｡
‫然后我想让你用局部向量把它定位｡
‫因为我们尝试在每一帧更新局部向量, 让我们看看效果如何｡
‫平台是否移动？
‫你会期望它, 并去尝试它, 编译代码播放, 看看它是否真的这样做｡
‫暂停视频, 开始体验｡
‫好吧, 我会的
‫欢迎回来｡
‫所以我不再用这里的构造函数来设置局部向量, 而是用我的向量来设置｡
‫所以我们取当前存储在向量中的值, 把它放到局部向量中,
‫然后更新局部向量.
‫我们每一帧都增加一个, 然后我想设置演员的位置, 而不是从我的向量,
‫我们要从局部向量来设置｡
‫你觉得这件事会怎么样？
‫让我们去看看吧｡
‫我将点击编译按钮,
‫然后继续点击播放, 我们将看到平台仍在向右移动, 但不在Z方向向上移动｡
‫所以你可以看到, 这并没有真正产生影响, 局部向量的增加,
‫因为它是从我的向量中的当前值重置的, 每一帧｡
‫不过, 我的向量仍在更新中｡
‫每一帧的y值都在增加｡
‫这就是为什么我们看到了向右的运动｡
‫所以我们可以看到, 局部向量的变化是局部的, 方法之一就是把这个值从1增加到100｡
‫所以我们要把局部向量值加100｡
‫我们可以进行编译, 然后点击播放｡
‫你会看到这个平台实际上在空中高出了100个单位｡
‫让我们在这里花一秒钟, 用F八弹出, 用主工具栏中的暂停按钮暂停游戏,
‫然后选择我们的移动平台, 在详细信息窗格中查看它｡
‫为此, 出于某种原因, 我不得不在视口中单击它｡
‫有时候它不工作, 只是在大纲中点击它｡
‫我想向你们指出, 向量中的值, 向量中的z值,
‫比变换的Z位置小100个单位｡
‫因此, 你可以看到, 添加到本地向量已经产生了影响｡
‫我们得到了一个位置, 比我的向量高100个单位｡
‫局部变量的真正好处是当函数完成特定的执行时, 它们会被清除并重置｡
‫因此, 您始终可以知道局部变量的预期结果｡
‫你总是知道它的值是什么, 不像类变量, 它可以随时从任何其他函数更新｡
‫所以我们会在几节课的时间里, 把这些局部变量, 放一放｡
‫我们继续吧｡