‫你好, 欢迎｡
‫在这节课中, 我们将学习一个特殊的函数, 叫做构造函数,
‫它允许我们给类中的属性给予默认值｡
‫我们将看到它何时被调用到编辑器中｡
‫让我们深入了解一下｡
‫现在, 对于这个触发器组件, 我想在这里添加一个tick组件函数,
‫这样我们就可以检查哪些组件､ 哪些其他参与者当前与这个触发器组件重叠, 如果它是正确的参与者,
‫我们就可以激活它｡
‫问题是, 好吧, 我们会看到问题是什么｡
‫让我们尝试实现一个tick函数｡
‫如果我们转到grab H来查看tick组件函数的声明应该是什么样子的, 它需要在public部分｡
‫这是一个虚拟的空白, 分笔成交点, 时间差｡
‫有很多参数, 所以我们直接复制它｡
‫转到分笔成交点组件标题, 将其添加到“开始播放”下面, 然后我们将复制该定义,
‫并将其转移到触发器组件中｡
‫有一点我们会注意到, 这里有几个关键词可以去掉｡
‫我们可以删除virtual关键字｡
‫这通常是我们可以遵循的规则｡
‫我们还可以删除override关键字｡
‫这些东西不需要在C++文件中｡
‫我们需要添加类名｡
‫所以您触发了冒号组件｡
‫结肠｡
‫然后, 我们用一些大括号替换分号, 并需要调用超级刻度组件｡
‫因为这是一个相当长的调用, 所以我将从我们的抓取CP中复制它, 并将其粘贴到这个CP中｡
‫它实际上是调用父级的tick组件函数｡
‫所以在这个例子中父组件是box组件｡
‫因此, 调用它是很重要的, 以防有任何功能需要使用和启用才能使该组件工作｡
‫如果我们不这样做, 我们基本上绕过了任何功能, 事情可能会中断｡
‫因此, 在实现开始､ play和tick组件时, 务必始终记住调用super｡
‫现在, 让我们从开始Play复制日志消息, 并将其放在tick组件中｡
‫我们不需要在这里说Tick组件日志记录, 也不需要说Tick组件在这里滴答作响, 我们将继续进行编译,
‫并在编译器完成后查看该Tick是否真正工作, 让我们继续单击播放,
‫打开输出日志｡
‫嗯, 好吧, 现在好像什么都没发生｡
‫其原因是优化明智, 他们自动和虚幻的大多数组件有他们的滴答关闭｡
‫所以演员通常默认打开它, 但组件通常关闭它｡
‫事实上, 如果我们看看其他的一些组件, 比如我们的移动,
‫我们知道ticking确实起作用了, 你可以看到在文件的顶部有这样一个｡
‫你移动一个函数, 它有一个主要的组件, 如果你没有在类上设置这个属性的话,
‫点B可以等于真.
‫这是类的一个属性, 作为经典的主成分tick的属性, 它是一个结构体,
‫其中有一个B可以tick属性.
‫我们在这里所做的就是在构造mover类时, 在它上面设置这个默认值｡
‫这就是这个函数｡
‫它被称为构造函数, 每当我们创建一个新的mover组件时, 就会调用它来自动设置默认值,
‫我们可以在头文件中设置一些默认值, 就像我们在should move move time中所做的那样｡
‫但是, 除了在头文件中重新执行之外, 我们还可以在构造函数中设置这些属性｡
‫现在, 我想让您注意一下这里的语法, 我们将进入移动头文件｡
‫您可以看到, 建构函式的名称与类别完全相同｡
‫因此, you mover是我们的mover组件的类名, 它的构造函数也称为you mover notice｡
‫它也没有返回类型｡
‫返回任何内容都没有意义, 因为我们正在构造一个新对象｡
‫我们只是想让这门课发生｡
‫所以我们只需要访问这个类的属性, 并且注意它被设置为public｡
‫所以它在类定义的public部分｡
‫所以我想挑战你, 让你自己实现滴答声｡
‫所以你要在头中创建一个构造函数, 记住我们在mover和grab a
‫lot of H中看到的语法, 你要启用tick,
‫就像我们在CP文件的其他组件中看到的一样｡
‫所以你可以模仿一下｡
‫您也可以从构造函数中记录日志, 以尝试查看何时调用它？
‫难道是喜欢开始打？
‫还是在开始游戏之前就被调用了？
‫去暂停视频, 试试看｡
‫凯｡
‫欢迎回来｡
‫我们将进入trig组件, 在这里创建一个新的public部分｡
‫我们记住了结尾的冒号然后我们需要调用它和类完全一样.
‫所以这不是触发元件｡
‫这不是你触发的, 这是你触发的组件在充分｡
‫然后我们没有任何参数给这个构造函数, 所以我们只放了一个空括号, 然后在行尾放了一个分号｡
‫现在, 我们可以转到CPP文件, 并在此处进行实现｡
‫同样, 我们不需要返回类型｡
‫所以你只需要触发冒号, 冒号, 你触发的组件有点重复, 但这就是它的工作方式｡
‫然后我们用花括号括起来, 在这里我们可以执行任何设置代码, 为类实例给予默认值｡
‫如果我们去抓取CPP, 看看它是怎么做的,
‫你可以看到它的主成分tick点B可以tick等于true｡
‫让我们把它打出来｡
‫主构件勾号B可以勾号｡
‫B只是一个前缀, 我们经常使用, 当事物的布尔类型用小写的t设置为true时｡
‫因此, 由于对构造函数的更改并不总是在实时编码中得到正确传播, 因此我将关闭编辑器｡
‫我将在Visual Studio代码中重新生成, 然后从EU项目文件重新启动｡
‫完成后, 我将点击“播放”, 查看输出日志,
‫我们可以看到触发器组件正在计时｡
‫我将删除该日志消息, 因为它很烦人, 并关闭Visual
‫Studio代码中的输出日志, 删除tick组件中的该日志消息｡
‫我们可以看到它现在正在工作｡
‫我们要做的是在构造函数中做一个日志｡
‫我们来做一个新的日志, 写上构造, 看看实时编码这次是否能找到它, 然后我们将直接转到输出日志,
‫看一看｡
‫这里什么都没有｡
‫好吧, 如果我继续并点击播放, 我会看到我的输出日志｡
‫我可以看到触发器组件在此之前很久就处于活动状态的日志消息｡
‫事实上, 你可以看到它在创造世界的时候, 它正在建设｡
‫它开始建设非常早之前, 显然开始发挥, 因为我们需要让整个世界准备好之前, 我们开始发挥｡
‫所以当我们点击播放时会发生这种情况, 但实际上它也会发生在编辑器中｡
‫因此, 如果我在这里选择某个参与者, 然后向其添加一个组件并添加触发器, 那么请查看我的输出日志｡
‫然后您可以看到构造消息实际上已打印出来｡
‫所以我们需要小心我们在构造函数中所做的事情, 因为它们实际上是在我们编辑的时候被调用的,
‫C++代码是在我们玩游戏的时候被调用的｡
‫这些对象正在被创建, 因此需要调用它们的构造函数｡
‫我将再次删除触发器, 并通过删除构建日志消息和开始播放日志消息来稍微清理一下｡
‫好东西｡
‫在这节课中,
‫我们已经看到了如何设置我们自己的组件, 使它们与在场景组件和ACT组件模板中创建的组件几乎完全相同, 我们已经看到了如何使用构造函数为类中的属性给予默认值｡
‫我们下节课再见｡