‫你好, 欢迎｡
‫在这节课中,
‫我们将建立我们的第一个几何轨迹, 这样当我们去看我们的石像鬼, 并且我们足够接近它的范围时, 它肯定会打印出被轨迹击中的演员的名字｡
‫让我们深入了解一下如何做到这一点, 以便最终准备好逐个通道处理此扫描｡
‫有很多东西, 我们必须到位, 使它的工作｡
‫但最后, 我们还是来了｡
‫让我们来看看这个函数的语法｡
‫因此, 我们在一个更好的地方来了解这里发生了什么, 当在这些类型｡
‫所以返回值是一个布尔值, 它基本上告诉我们是否通过扫描找到了任何东西｡
‫现在第二个参数, 正如你在这里看到的, 它是一个引用｡
‫它有一个“&”符号｡
‫无论是"符号后面有空格,
‫还是变量名之间有空格, 都一样只要"符号后面的类型表示该类型是一个引用, 并且是一个叫做"
‫F命中结果"的类型, 你就能看到它是一个结构体.
‫因此, 这个F命中结果是输出命中｡
‫这就是扫描的结果｡
‫我们可以看到什么东西被击中了, 这是一个结构体, 因为有很多不同的东西,
‫信息片段可以从这个扫描中得到｡
‫然后我们有一个常数f矢量参考｡
‫这是通过引用而不是复制开始向量｡
‫结束向量也是这样, 我们得到了一个旋转｡
‫这是使用f四元数的形状旋转, 这是使用f旋转器的替代结构｡
‫我们来看看, 我们是如何基本上处于零旋转状态的, 因为我们使用的是一个球体｡
‫这并不重要
‫接下来是跟踪通道, 我们将了解如何确定跟踪通道在C++中的名称｡
‫然后我们得到了碰撞形状, 这将是我们需要提供的最后一个参数,
‫我们将看到如何通过这样做来创建一个特定半径的球体｡
‫但在开始之前, 我们需要知道该半径是多少以及如何配置它｡
‫接下来我们将继续讨论grab a, h,
‫我们将删除这些函数, 我们将它们用作引用引用和out参数的例子｡
‫我们将创建一个可在任意位置编辑的新属性,
‫它将是一个名为抓取半径的浮点数, 我们将其设置为101米｡
‫现在让我们进入C++, 删除print damage和has
‫damage的引用, 我们也可以从tick组件中删除这些引用｡
‫整个if语句以及我们传递损坏的位置, 因为这里我们绘制了调试行,
‫现在我们要按通道调用扫描单通道｡
‫所以我们要键入sweep｡
‫所以我们要输入get world括号因为我们知道这是一个关于新的world对象的函数.
‫然后我们可以做一个箭头, 因为我们知道get
‫world返回一个指针, 然后我们将按通道进行一次扫描, 就像这样, 我们将必须输入一个out参数,
‫以便作为这里的第一个参数进行填充｡
‫所以我们要创建一个变量, 它是空的, 它会被填充, 而且它必须有正确的类型.
‫这是一个if, f, hit, 结果, 我们把变量本身叫做hit, 结果,
‫在末尾加一个分号, 因为我们没有初始化它, 也没有给它赋值,
‫但是我们会把它传递进去, 让sweep, single, by, channel函数给它赋值.
‫这就是我们的结果｡
‫然后我们需要传入开始和结束向量, 我们知道它们不会被复制, 而是被引用｡
‫现在我们需要填充旋转, 我们可以用一个简单的冒号, 冒号恒等式来完成,
‫它基本上告诉我们这是一个无旋转｡
‫这只是一个有点奇怪的语言｡
‫这是一个数学上的说法, 意思是这不是旋转｡
‫接下来, 我们需要轨迹碰撞通道｡
‫现在, 我们怎么去寻找轨迹碰撞通道？
‫好吧, 如果我们转到保存项目的文件夹, 进入config, 然后转到默认引擎INI,
‫单击它, 然后使用Visual Studio代码打开｡
‫我想在这里寻找抓钩
‫因此, 您将能够看到抓取器的碰撞响应通道｡
‫它基本上是在默认引擎INI中设置的｡
‫在整个文件中只提到一次, 您可以看到频道名称｡
‫这是C++中的通道名称｡
‫不是很好｡
‫是的, 但它是s｡ e.计算 c.其他
‫游戏跟踪通道2, 我们可以继续复制它, 然后我们可以返回到我们的捕获CP并将其粘贴到这里,
‫作为我们想要的跟踪通道｡
‫现在, 这条线变得相当长了, 我们可以做的是,
‫我们可以把这些参数放在单独的线上, 或者至少把它们分散开｡
‫所以也许开始和结束在同一个地方｡
‫同一性准则在一行上, 跟踪通道在另一行上, 就像这样｡
‫这就给了我们更多的空间来阅读这些长长的论证列表｡
‫现在, 如果我们返回到文档, 我们可以看到,
‫下一个需要传入的是一个F碰撞形状｡
‫所以我们需要构造一个形状｡
‫也许我们可以把它作为一个单独的变量放在上面｡
‫我将在hit结果之前执行此操作, 以明确hit结果实际上是一个out参数.
‫我总是把它作为函数调用之前的最后一项｡
‫所以我们要创建一个F碰撞形状, 我们称之为球体,
‫我们要把它设置为等于F碰撞形状, 冒号, 冒号, 生成球体｡
‫这将创建一个新的球体, 碰撞形状｡
‫这个函数的参数是球体半径, 我们已经把它作为抓取半径变量,
‫我们已经把它配置为U属性,
‫但是在这行的末尾有一个分号, 我们可以把球体作为最后一个参数传递给扫描通道函数, 并在这行的末尾加上一个分号｡
‫现在还有一件事, 这个函数返回一个布尔值, 表示我们是否命中了.
‫所以我会把结果放入一个布尔变量has hit中, 这就是我们在后面的函数中要用到的.
‫所以我想挑战你把这位当红演员的名字印出来｡
‫所以现在我们要进行大扫除了｡
‫我们应该能从中得到一些结果｡
‫因此, 如果我们有任何东西, 就使用if语句来打印｡
‫如果布尔值为真, 我们就打印出演员的名字.
‫你将通过使用hit result结构体得到球体轨迹被击中的演员｡
‫它有一个方法, 你可以用点操作符访问它, 因为它是中的一个结构体｡
‫它不是指向结构的指针｡
‫你可以输入一个点, 得到actor, 然后用括号, 返回一个actor指针.
‫然后使用这个活动指针, 你可以用get actor
‫name或label方法得到演员的名字, 考虑是用点还是箭头操作符, 然后编译和测试, 打印出演员的名字,
‫看看你能在场景中找到什么｡
‫暂停视频, 开始体验｡
‫好吧, 我会的
‫欢迎回来｡
‫我们从创建if语句开始｡
‫如果命中了, 我们就用括号括起来, 我们首先要做的是, 我们要得到参与点｡
‫所以一个演员的星星命中了演员就等于命中了结果｡
‫小点声｡
‫演员｡
‫圆括号｡
‫喜欢｡
‫然后我们要写一个u log, 我们要写hit actor冒号, percent, sx, 我们可以写hit actor,
‫因为这里是一个指针, 我们可以写hit actor, arrow, 得到actor的名字或者标签, 然后是一些括号｡
‫而且因为这是一个字符串, 我们必须在整个shebang的前面放一颗星星, 这样它才能在我们的Yui日志中正确地显示它｡
‫好的, 我们现在需要继续编译｡
‫然后, 一旦我们进入场景, 让我们打开输出日志, 并将其停靠到布局, 以便我们可以在播放时看到它,
‫并点击播放按钮｡
‫马上你就能看到我们撞上了那个石像鬼雕像｡
‫如果我转过身去看你能看到的其他东西, 嗯, 不太清楚我是没有击中任何东西,
‫还是它什么也没有显示｡
‫我要做的就是在if语句中加入一个else, 再加上一些括号, 然后我再做一个U
‫log｡
‫这一次我们会说, 没有演员, 让我们重新编译, 然后在编辑器中播放｡
‫你现在可以看到了｡
‫这是说没有演员击中所有的时间, 直到我去开始看石像鬼｡
‫现在它说石像鬼是被击中的东西｡
‫如果我向后移动太远, 超出了我的范围, 你可以看到我看到它在说没有演员再被击中.
‫好东西｡
‫我们现在已经用一个球形对象进行了几何扫描, 我们可以看到它确实只对我们特定的“轨迹”通道中的参与者做出反应,
‫例如石像鬼是我们目前设置的唯一一个｡
‫所以这是它唯一找到的｡
‫我们下节课再见｡