大家好,这节呢,我们来介绍一下如何通过蓝图脚本去创建一个按钮,并且呢,通过这个按钮可以与我们场景当中的一些物体,或者是啊这个关卡蓝图里面的一些变量进行交互。 那在这呢,我按照之前的教程已经创建好了一个第三人称实力的啊,这样一个蓝图模板 啊,在上一节教程当中呢,我们是啊,实现了这个视角的缩放,通过鼠标的滚轮滑动,那么这个教程呢,你可以通过微信找到。 然后这节呢,我们先来绘制一个按钮,那么在绘制按钮之前呢,我一定要创建一下自己的 hud 类。在这呢,我们看到有默认的两个蓝图,一个是 microactor 我的角色,还有一个呢是我的游戏类,也就是我们通常所说的 game in。 在这呢,你可以看到 word setting 这个世界设置里面它的 game mode 啊,现在选择的呢,就是 my game, 如果选择根 mode, 这个呢,就是啊,一个啊,飞行视角,这是默认的一个根 mode 啊,由于我们创建的第三人称实力呢,他是 my game 哦,可以双击这个 my game 来看一下他当前使用的啊,这个 pong class, 也就是这里的 micracter, 而指这个,然后 hud 呢,它使用的默认的 hud 类 啊, plain, twitter 是 platantchata 啊,剩下的几个呢,我们不去关心,在这呢,我们先要 啊修改一下 sud, 在创建之前呢啊,在修改之前,我们先要创建一个 sud 类,我们在这点右键选择 blueprint 啊,然后找一下 acud, 如果这没有呢,你可以搜索 acud, 然后我们选择这个,然后 select, 给他一个名称,比如说叫做 testacud。 好,我们保存一下 ctrls, 然后来到这边给他指认一下刚刚创建的这个 tastessud。 好,现在呢,我们就使用了这个刚刚创建的 hud 类啊,在这里面我们绘制一些图画啊,在这里面呢,我们可以绘制一些图形,这时候我们游戏就可以有真实的啊反 的效果。比如说我们来到他的这个 graph 这个图表,然后在事件图表当中呢,点一下右键,我们先要找到这个绘制的事件,也就是 johu d, 我们看到啊,当你输入这个 drowhu, 他就直接显示出来了,如果没显示出来,有可能是这边的 contacts, 算是 tvt 啊,这是一个大小写的敏感。好,我们选择这个装 sud 事件,然后在这个箭头上面引出一条线,然后输入 draw text 啊,他的意思呢,就是在一个位置以什么样的颜色,什么样的字体来绘制一段文字,比如说我们打上 hello, 然后他的位置呢,默认是零, 我们给他一个五十,五十啊,这个大小呢?改成啊,这不是大小,支持阴影。 好,我们先来试一下,编一下,然后我们看到有错误 啊,他说这个,他这,他必须有一个连接啊,我们应该是选择 draw text, 我们看到在这儿 hud 下面有一个 drawtax 函数, canvas 下面也有一个,我们应该选 hud 下面这个,就可以不用输入这个 target。 好,这个 text 呢,是 hello 啊,位置是五十,五十大小,这个 skill, 我们选择两倍的大小,然后编一下啊,这一回没有错误,然后回到游戏当中,我们来测试一下。 哎,没有,是我们 my game 没有变异呢 啊,回到这个 testasud, 我们看到这个文字的颜色现在还是黑色,我们把它改成纯白色啊,再来测试一下。 好,这样呢,我们看到左上角就有一个 hello 这样一个文字被绘制出来,那么这说明我们这个 taste h u d 类是没问题的。下面呢,我们就来绘制一个按钮,绘制按钮呢,很多方法,我们依然可以使用 joe 这个 函数,可以绘制一些三角形或者是图片。在这呢,为了这个简单,我们直接绘制一个 ract, 捉 ract, 绘制一个句型, 好,绘制巨型,它的使用方法呢,跟刚才那个绘制文字差不多啊,这个颜色呢,我改成一个大红色,然后它的位置是五十,五十,它的长宽分别是 一百啊,或者是二百,然后高是一百,我们来测试一下。好,这样呢,绘制了一个红色的句型,这就是我们的按钮,然后下一步呢,我们就是要为他啊创建一个点击的事件。 简单,我们继续在这个主要 suv 事件引出一条线,输入主要 hitbox, add hitbox at the box, 这样呢,他会自动的把它串联起来这两个节点。 这个黑的 boss 呢,就是一个我们看不到的一个啊,正方形区域,在这个区域内呢,我们点击他就会发送一些点击的消息,所以我们一定要保证这个 boss 的位置大小跟这里的 rector 啊基本是重合,所以他的位置呢,也是五十 啊,这个 size 呢,一个是二百,一个是一百。好,如何看到我们这个黑 box 他发出的 消息呢?我们可以在下面继续找到啊黑的 box。 看到这儿有一些疑问的事件,我们选择这个疑问的是 sale 黑的 box click 啊,下面还有这个 release 事件,我们这儿呢使用 click 啊,当我们按下 啊,在这个 box 范围内,按下鼠标左键,他就会发送这个消息,这个消息呢触发,我们为了简单起见,直接打印出一条语句叫 princesstreen 啊,在这里面呢,我们输入黑的 boss, 然后看好 好,我们来编译一下测试,看看有没有效果。你看到你按一下这个鼠标左键之后呢,我们的这个鼠标呢就找不到了, 而且呢也并没有发送这个消息啊,原因呢?是啊,这个默认 的情况下呢,他是啊,这个禁用了我们的这个消息。如何打开这个消息呢?我们首先要找到我们的 ctrl, 但是在这他没有 ctrl 的,需要我们创建一个啊, ctrl, ctrl 蓝图,我们选择 ctrl, 然后叫 taste pc 好,双击来到他的这个 deforth 属性,找到 max interface, 在这呢有很多我们想要的 功能,第一个呢就是显示鼠标他的准星,刚才我们看到啊,在这我们打上这个勾,然后是 a naval click 疑问词,这个允许 click 事件, 下面当然还有啊,相关的这个触碰就是用到手机上的。好,这两个我们勾选之后呢,还要保证我们的跟 mo 的 应用。这个 ctrl 回到 migame, 找到 ctrl class, 选择我们刚刚创建的 testpc, 然后保存一下,我们再来测试一下,我们看到啊,这个鼠标的始终是显示的 好,这时候我们点一下这个按钮,你可你会看到左上角有一个黑的 boss 消息 啊,这说明我们的这个按钮交互已经没有问题了,下一步呢,就是需要在场景当中创建一个灯光好,按下键盘上的 l 键,在这边点鼠标左键创建一个 point light, 好,为了这样这个赖特更显眼,我们给他改一下颜色,比如说是红色,然后, ok, 好,没问题。下面呢,我们就是想办法啊,在我们的 testhud 内当中引用的这个变量 啊,很多朋友说我如何去啊,在我的 hud 内去引用到关卡,或者是关卡蓝图当中的某一个变量呢?那么答案是不可以,为什么呢?因为啊,因为我们在面相对象编程过程当中呢,我们这个 taste hud 呢,其实就是一个独立的类,是一个抽象的, 它里面呢不应该存放任何具体的这个饮用啊,因为如果啊,比如说我们在当前的关卡添加了这样一个 pontilize 这样一个变量,然后再 tastessud 引用它, 如果这时候我们更换了关卡,这时候这个 potata 呢,关卡当中呢是不存在的,那么这时候我们的 hud 类当中依然啊这个发生了引用,那这时候就会出现错误,所以呢是不允许 去这样去做的,但是我们还有别的方法来实现这样一个功能,那就是啊,第一种呢,就是通过这个 hud 类下面添加一个疑问, this patch, 然后在这个关卡当中呢去获取这个事件。 另一种方法呢,就是我们在这创建一个变量,比如说还有一个波尔型变量,叫啊 point light on 这样一个波尔变量,这个变量呢,我们可以把它这个设置为 public, 然后在这个关卡当中获取到 ctrl, 然后再获取到 h u d, 然后再获取到这个 h u d 下面的刚刚的我们添加的这个波尔型变量,然后实时检测这个变量发生变化,一旦发生变化呢,我们就可以在关卡当中做出相应的反应, 但是这样做呢啊,显得非常的啊低效。在这呢,我再介绍一种另一种第三种方法啊,比较通用的方法就是我们直接在 h u d 内当中寻找当前关卡当中的所有的 actor, 一旦发现啊我们的 actor 存在,我们就去控制它,好 回到关卡。我们看到啊,这个 pontlait 可以给他起一个名字。啊,这个名字呢,我们可以搜索啊 tag, 在这他有一个 tag 数组,其实我们只需要他的一个元素就可以添加一个元素,然后输入啊,随便起一个名字,用来标识他叫 pont light 零。好,下一步我们就是要在 suv 当中找到这个 tag, 名为啊 pointer light 零的这样一个 这样一个物体如何寻找呢?好,首先呢,我还是在这添加一个变量叫 point light 零, 然后他的类型我们改成 pontelat, 找到这儿有一个 potata。 好,现在这个变量呢,它在默认的情况下是空的,我们需要在游戏的一开始就寻找这个变量,并把它保存到这个 pontalette 零当中。我们在一开始可以使用 eat begin play 笔跟 play 这个实践啊,当游戏一开始的时候,我们就开始便利所有的 actor 可以使用 get all actors of class, 选择这个节点。好,这个 class 它的类型呢?我们当然是要选 选择 point light, point light 好,它的输出有一个 out actor, 这很明显是一个复数,它是一个这个数组, 然后我们需要去便利这个数组,通过 fall h loop 这个节点,我们看到这个节点的右边呢,有四个输入,第一个呢是一个直行的,就是路包顶,然后最后一个,是啊,这个循环啊,这个 最后一个呢是循环结束,中间一个 arry element, 就是我们当前便利的这个元素,所以呢,我们可以把这个元素转化成一个 point light, 当然了,这个 pentalite 它继承是 x, 那这个之前我们给他起的这个 text 这个变量呢,就存在于他的负累 act 下面,所以呢,我们可以先不用转化,直接通过他的 acctate 这个方法 get a text。 这个方法 好,你看到这个时候呢,我们每次连出来的时候 get a tax, 他并没有把这个连线与我们这个变量进行相连。 好,这其实是一个 bug, 我们要做的呢,就是保存一下,然后重新启动我们的这个工程 啊,如果你遇到这种问题呢,直接重启就可以了。好,我们打开我们的 tastesud 啊,这下我们再来试一下 get tax。 好,这样呢就没问题了。好,遇到这个问题的朋友啊,都注意一下。好,在这呢,我们是获得了一个太个数组啊,这个数组呢,就与我们这里的 啊这个数字对应,我们要获得这个数组的第一个元素,我们可以继续引出一条线输入 get, 那么这个 get 呢,我们看到它是在 twt 下面的 re 啊,这是获取当前数组的某一个元素这个元素的,所以呢,我们可以在这儿去控制我们获取到第零个元素,那么这时候 他获得的就是一个内部类型的变量,这个内幕呢就是一个太,下面我们要对比一下,看看当前获得的这个内是不是我们刚刚输入的,我们可以输入啊 compare 啊,这个 compare 呢,应该在空白 白处书, 这个节点呢,有两个输入点,第一个呢,我们输入啊, target point 来特零啊,就是我们这边的这个名称直接复制过来也可以,然后它的逼节点呢,就需要直接连接,那如果这两个内幕型的变量呢?相等 啊,这说明我们已经找到了我们当前的这个 pointer light。 在场景当中,下面可以通过一个简单的节点叫 branch, 这不认识的有两个输入点,第一个呢啊,就是这个 condition, 这个表达是 一旦这两个成立,那么这个处这个节点会被执行,我们就要执行啊,这里的强制转换,从 every element 这边引出来输入 cost to point light 啊,一旦这个变量相等,我们就执行强制转化了这个功能啊,如果转换成功,我们这个节点将被执行。 好,从这我们直接把这个当前的这个 pontlata 进行开关,可以使用 togo visibility。 好,最后呢,不要忘记这个 loofbody 连接这个 branch。 好,这个强制转换一旦成功,我们就可以把这个变量保存到啊,这个 point light 零。这个变量当中,我们可以直接拖动到这边,然后选择 set 它的方法,然后 把它设置过来,然后执行赛的函数。最后呢不要忘记把录包里连接到不认识这边,保证每一个循环都执行这样一个这个对比的逻辑。 好,这时候呢,如果我们找到了啊这个 pluntlette 零,这个 pentattlelette 零呢就可以使用了。下面我们就是要通过啊,这个点击事件啊,去开关我们的 这个灯,我们可以直接在 princeton 后面啊连出一条线,首先呢把这个 pelang 零使用他的盖的方法获取,然后呢我们使用他的 涛 go vistability, 就是呢对他的这个开关进行切换,最后执行这个啊,为了这个保证安全呢,我们可以 做一个安全检测,叫 is wally 的,那么只有当当前这个变量 存在具体的值,我们才会去执行这个函数啊, 扭过来, 好,我们来试一下啊,有错误啊, target master 啊,这边应该连接过来好编一下啊,没问题来测试 啊,看是有问题,我们检查一遍啊,我们看到啊,这个风 h 六和这个根本没有执行啊,我们需要连接过来啊,再编一下,好, 我们看到这时候我们的这个开关的功能就没问题了,同时打印出一些 文字。好,我们最后重新的再啊回顾一下。首先我要在这个 hud 类当中呢创建一个变量,一旦我们找到这个物体呢,就把它复制到这个 point latte 零这个变量当中。然后接着我们再啊这个接收 按钮事件的时候呢,就可以直接使用了。那如何寻找呢?首先我们通过 get all class, get all actor of class 这样一个节点去通过这个 point 类去过滤,去便利当前 关卡当中所有的 pontilot, 然后他输出一个数组,我们通过一个 for eat 循环来便利这个数组当中的每一个元素,然后对比每一个元素它的这个泰格的名称,如果这个泰格名称跟我们的这个事先在场景当中规定好的 这个泰格名称相同,那么我们就执行强制转换,把它转换成一个 pentalet, 然后把它复制到 pentalet 零当中。那么其实这里面还有一些 需要优化的地方,比如说这个啊,对比的这个名称,我们可以完全啊给他一个 name 变量在这儿呢, new arrival, 我们叫 point light 零 name 啊,他的类型的是 name, 然后把它拖到场景当中,就要用他的盖的方法把它连接过来。 好,然后我们不要忘记把它设置为 public, 点一下,这个眼睛好编一下, 来到我们的 taste h u d, 你可以搜索一下啊,这个变量还没有出现, 我们来看一下 啊,在这我们找不到这这在这呢,我们找不到这个啊,这个变量啊,原因呢是我们的 tastessud 呢,并没有被实力化,他只是一个类。 你像那这种 micro actor, 它是可以直接拖落到场景当中啊,拖到场景当中呢,我们就可以它的通过这个 details 面板呢,找到我们自定义的这些 public 类型的变量。但是呢,在这里的 testasud 呢,它是不可以被实力化的,它被实力化也没有什么意义, 所以呢,这个方案呢,是行不通的,把它直接删除掉。其实解决这个问题还有其他的方法,比如说我们在这啊创建一个新的 actor 来用来管理我们的这些变量,做一个过度, 像这个 at 呢,应该是可以被拖动到场景当中,然后我们可以把这些常用的变量呢啊,放在这个类似于叫做管理器的这样一个蓝图当中,然后把它拖动到场景当中进行实力化,这样呢我们就可以实现刚才的那样一个想法,好在这呢我把它删除掉,大家自己去研究。 好。这节呢我们就介绍了啊,如何通过这个蓝图绘制一个按钮,并且给他一个消息来于场景当中的一些 x 进行交互。好有关后续的教程以及啊教程当中出 什么问题,你都可以扫描我的这个啊微信, 并且回复关键字又进行,并且回复关键字去获取一些最新的教学信息。
粉丝1721获赞3601

最近在研究一个用 u e 四点幺七开发的游戏,我打算编译一个 u e 四点一七的编辑器。在编译原码之前,需点击 setup, 把安装引擎的依赖库报了一个错误, filter download。 因为从寓意四点二五开始,官方使用新的 c d n, 这导致四点二五以前的版本都无法下载到依赖库。解决的方法很简单,打开最新的 unreal engine 的 d 仓库,找到 engine bill come in keep ups c m l 这是刚下载的 come in get depths cml, 复制这个文件,替换旧的 engine build come in get depths cml 重新运行 set up but 此时可以下载引擎所需的依赖库。学会了吗?


第一步,使用 unado 解包需要替换的模型资源,模型文件结构要选择的是 ps duck, 这里下载很慢,需要等待。 然后我们开始把下载的 ps 模型文件导入 blender 中进行处理。这里注意一点,取消勾选 skill down, 选择导入的模型文件,进入姿态模式 n s 扩大模型, 然后调节手臂和胸轨位置。 下一步,删除所有形态键,紧接着点击应用,然后删除全部顶点足。现在开始分离审理模型和骨骼, 合并审理模型和原游戏骨骼。选择空顶点足,这里我们自己刷权重, 这里进入权重模式,鼠标右键可以选择换 画笔大小和画笔全重深浅,红色是一,蓝色是零。 补充知识可以在编辑界面进行模型的分离,方便刷权重。 seventy five years later 最后放下审理权重刷完的演示,祝大家轻松刷权重。 修改根目录命名为 r nature, 设置单位为厘米。然后我们就可以导出 f b x 格式文件,几何数据页面设置颈围面,骨骼页面取消勾选 i'd leave bones 动画页面取消渲染 模型处理已经基本结束。下一步就是将 m m d 的贴图文件处理为原游戏的贴图文件,游戏模型贴图为普通贴图,高光贴图, 黑白不透明遮罩贴图以及 normal 发现贴图。普通贴图和黑白不透明遮罩贴图就 不细讲了,普通贴图就是 mmd 模型附带的那张贴图色。黑白不透明遮罩贴图就是需要把你需要显示的那部分用白色显示,不想显示的用黑色。 罗尔某贴图用如下这个工具进行处理。 o r m 贴图是由 o c c 贴图、 rough 贴图、 make l 贴图通过 r g b 三通道合成。 o c c 贴图用之前工具可以处理,这里用 p s 工具处理 rough 贴图, made out 贴图, oh i am here to 三通道合成方法,导入 o c c 贴图、 rough 贴图和 mate l 贴图,将这三个贴图转换为灰度图,检查像素是否相同。 所有图片处理并且改明后开始进入下一步。这里我们需要准备虚幻引擎,原子之心是虚幻引擎 四点二七开发仙剑七是虚幻引擎四点二五,其他虚幻引擎可以通过属性查看。 进入虚幻引擎后,根据你要修改的游戏 mod 创建游戏目录仙剑骑尸 skeleton is it character character 人物。 把之前重新刷好全中的 f b x 模型直接导入虚幻引擎,并创建 material 和 texture 文件四类贴图放入到 texture, 根据游戏目录里面的材质名称创建材质文件。把四种贴图依次连接到对应的材质文件 days later, 然后按照之前在 blender 设置的顺序,把材质文件绑定到骨骼网格体, 进入到该虚幻引擎项目文件的 save cook 文件,这个是游戏烘培文件。再另一个文件把该模型进行重新封包,封包代码如图所示。 然后就可以在游戏中试试 mark 是否安装成功。


好,我们紧接着上一节,在上一节呢,我们已经通过跟帽子的比根 play 函数呢打印出了一句话,现在我接着为这个 game 呢添加其他的一些类。我首先要添加这个 character, 好,回到编辑器,找到文件, add the code to project。 在这呢,他有两个,一个是 character, 一个是 point。 其实我们之前已经讲过了, character 是继承字 point, 所以呢,在这我可以选择 pony 当做负累,也可以选择 character。 但是啊,我最终还是选择 cracker, 因为这个 character 里面已经包含了一些现有的功能,比如说我们这个角色的移动,还有自动的旋转,这些都是比较 啊方便的。所以我选择 character 作为我的负累,然后点击 next 给他一个名称呢,叫 fs cracker, 然后创建类 现在就编辑。我们看到啊,在我们通过这个 vs 二零一三编辑模式下运行的这个编辑器啊,添加完代码之后,他会显示出啊,这个 fs game 已经在环境外部被修改。 他的意思呢,就是说我们其实这个 fs game 这个项目下面已经多出了其他的头文件或者 cpp, 但是我们现在已经运行着二零一三, 这就需要我们重新的这个加载啊这里的项目,然后才能刷新出新创建的几个文件。我们点重新加载,重新加载 说是否停止调试,我们先停止调试好,重新加载之后,我们看到在这有一个 fs crackt 和点 h 同文件被添加进来了,然后下面他会重新扫描。啊,其实在这面呢,他又打开了一个这个 fsk, 我们可以把它关掉。 现在呢,我发现啊,添加完这个类之后,在这出现了很多这个红色的 波浪线,然后上面显示着 arrow。 之前用塞压编成的朋友知道这是在提示错误,其实在虚幻四当中呢,这个提示是一个错误的提示, 并不代表着这里的语法有错误,而是因为虚幻词使用自己的呃,这个编译器,它有着自己的一套这个语法格式。为了解决 这个问题呢,我们直接点击工具选项,把这个错误的波浪线提示呢,给它禁用掉啊。选择这里的文本编辑器,找到下面有很多语言,我们选择 cc 加加, 在下面呢,有一个高级选项,右边就列出了他的一些功能的这个是否启动,我们把这里的禁用错误报告改为处, 也就是说我们要禁用,禁用之后,同时这里的禁用波行曲线也被禁用了,然后点击确定保存,我们看到这里的波浪曲线呢,就没有了。 好在添加完这个类之后呢,我们还是要做同样的一件事情,先实现这个龌龊这个虚函数, begin play。 在这输入这个关键字的时候呢,有一个小技巧,比如我们现在按下键盘上的 vir, 他会有一个啊智能提示,现在呢,我不想再啊继续输入后面的 tvl 了,有两个方法,一个呢是用这个鼠标或者是上下键选中这个这个提示,然后按下回车, 他就给我们自动补全了。这一种方式还有一种呢,就是输入 vi 二, 我不选择,直接按下这个键盘上的推不见也是可以自动补全的。我个人更喜欢第二种方式, again play, 然后是 override, 好,然后去实现啊,更喜欢这个复制代码。 同样,我们还是先判断一下 f jn, 然后是遮瑕。那么在一开始,天下还是他没有这个四种歧视,因为我们的这个 下面呢,他正在解析对这个智能提示的功能呢,会有一些迟钝,所以说在这种情况下呢,如果你的电脑配置比较低的话,那这个反应时间会更长。 所以我建议大家在平常书写一开,特别是刚开始的时候,书写代码的时候,尽量的不要去 copy, 而是能记多少就记多少。这些常用的函数是如何写出来的?爱的啊。 screen 第八个 message, 然后第一个参数还是要负一,然后是显示时间八点 f of color red txt i m using ffs cracker 这样我们看一下我们这个盲打这些有没有错误。 好,没有错误。然后呢,我直接启动,看一下他能不能打印出这个 i'm using fs character 啊,我们看到并没有打印出,只打印出第一句话,就是 i'm using fs。 根毛的原因在哪呢?原因是我们虽然自定义了这样一个 character lay, 但是我们并没有告知这里的根毛的,我要使用自定义的这个 fs character。 如何告知根毛 我要使用自定义的 correctly 呢?我们来到跟 mode 的构造函数在这儿呢,我们输入 default point class, 然后按下 table 键,自动补全,等于 afs corrector。 我们看到啊,它这并没有跟我们智能提示出 afs corrector 这个类,原因是我们并没有包含它的同文件啊,我们只需要在这儿添加一句话, included, 要包含这里的我们创建的 fs crater 点 h fs cracker 点儿 h 好,然后保存一下 a fs。 啊,这有一个错误, characteraifs, 我们看到他有还是有一个这个延迟 static class。 好,这样呢,我们就告知了 game mode, 我将要使用 fm crater 这个类。好,在这儿呢,我们看到啊,是使用的 这个 vs 去调试下启动的编辑器,在这呢,我修添加了一句话,此时呢,我就可以使用这个又一次新添加的一个功能,也就是热编译。所谓的热编译呢,就是说你在啊不关 b 当前编辑器的情况下,可以直接重新编译我刚刚修改的这些代码,但是前提条件是什么呢?我没有添加新的函数或者是新的变量,只是在现有的函数当中对某个变量的值修改,或者是添加啊几行代码, 这是前提条件。在这呢,我并没有添加新的这个函数或者是变量,只是添加了这样一句话。这时候我们啊选择 这上面有一个编译,旁边呢有一个编译选项的箭头在这呢,我选择这 recompel game code, 你看到上面还有两个是 recompel a level editor, 还有瑞瑞 low 的。来,我来艾力特,因为在这呢,我们并没有修改这个编辑器的一些代码, 我们只修改了这个游戏的代码,所以我选择下面或者是按下键盘上的快捷键, ctrl alt 加 shift 加 p。 好,个人更喜欢按下这个快捷键。好,我们按下之后呢, 右下角就会弹出一个运行框,正在编译三角加代码。 第一次编译呢,就时间会稍微有些长啊,如果我们编译完这一次,然后再紧接着修改这里的代码再编译呢,这个时间大概就是十几秒钟的时间,第一次可能会达到一两分钟, 但是如果你重启这个编辑器啊,再这个重新热编译,他又会啊编译几分钟。 好,我们的这个代码成功的编译完成,然后再按下 alt 加 p, 我们看到啊,这个地方已经显示出我们的 i'm using a fs character, 但是我们发现现在我的这个 视角是无法旋转以及无法行走了,原因是我们刚刚使用的啊,这里的 afs correct 这个类呢,并没有这个对这个行走还有视角的控制做一些定义。 好,这节呢,我们就先到这啊,就这样一个小小的功能呢,我讲的时间还是比较长的啊,就是希望没有接触过啊虚幻编程的朋友们能够快速的理解这里面的一些代码。好,这节先到这,谢谢大家。

设置出入,那我们现在呢已经有了一个主角,这个主角有个摄像机会跟拍他,并且呢我们会有一个其实点,他会在我们啊游戏刚开始的时候,他会在那个地方被生成, 但现在的问题是我们现在还不能控制它,我们希望通过比如说键盘去控制它,在 on 六里面呢,我们就可以设置叫做键绑定, 就当按下某个键的时候,我们就会触发一个四键,什么是四键呢?不要开火啊,爆炸呀这种呢都我们都可以认为这个四键,那四键是当某些操作发生的时候,我们在本地里面就是我们某个键被按下的时候 直行的节点。那我们前面讲过了,我们的蓝图就是通过节点一个个连起来的,你只要这一串节点里面你第一个被触发了,那么他这这些被连接的节点呢?都会被触发啊,我们就可以用这种方 是去完成我们这个逻辑,我们的业务逻辑都可以通过一串节点来完成。 那现在的有一个问题,那我们现在要绑定这个键,也就要做肩膀定,我们绑定在哪里,我们现在有三个选择啊,我们可以直接绑定到我们这个 bp player 里面,那这就是我们的主角啊,我们按一个键去, 他就会按照我们的想法去移动啊,这种想法没有问题,对吧?那就好比是我们的纸杯子,这样做是最直接也最简单的。 但是呢我们想一想,如果我第一次控制的是他,那下一次我切换一个,我切换到另一个物体呢?比如说香蕉,我要是控制香蕉,我把香蕉也做成一个,相当于是一个 player 啊,或者是我又增加了一个新的其他什么一个汽车等等,那这样就不好,所以我们看看有没有别的选择,如果有的话,我们 最好不要给他绑死。我们看看这里面可以吗?这个是我们的 dmo 的,也是个蓝图,那这里面肯定也是可以做一些事情了,对吧?如果我对于我们现在站在 呃安利奥的设计师的角度来说,我们应该怎么去设计这个产品?这样的话我们就更好记忆啊, 那放在这里面,这里面好像好一点,但我这个可以有个下的菜单,我这个可以去选择,比如这次我选择他,下次我选择别的啊,也可以。但是现在如果我们光是把脑袋放在蓝图里面去想的话,放在这些成员里想的话,那格局还是小了,是吧?我们要把格局放大一点, 我们是不是可以直接作为一个项目的设置呢?在项目设置里面,我们设置好了这些键的绑定啊,我们按下某个键,这个键它会产生一个,直 到底这个值怎么用?嗯,我们不把它写进去,不把它写进某个蓝图啊, 那么我们的比如说我们这里面有一个演员 a, 这有个演员 b 啊,这个有个演员 c, 那这几个我们的参与者,尤其的参与者,他里面会写清楚我 被触发了一个什么事件的时候,应该执行什么样的代码,但是我的件的绑定其实我是放在外面的,是放在整个项目里面的。好,具体的细节啊,我们可以慢慢去了解, 包括这个里面我的某一个蓝图里面应该去怎么去?去操作,对吧?但是我们现在要知道,第一步我们要格局大一点啊,我们要把简直的绑定工作放在 整个项目的层面上,而不是需要放在某一个,就哦节偶和吧,比较松偶和,对吧?我们不应该太紧了,我们不应该把具体的间子的绑定写死在某一个啊,某一个框里面,然后就某一个小兵里面啊,某一个蓝图里面, 这是我们第一步需要了解的,这个很重要啊。然后呢,我们就看啊,是不是这样设计的。确实是他有一个项目设置,我们只要去点编辑项目,就项目设置点了以后,这里面有个输入点,输入了以后这有个绑定,那我们在这里绑定, 所以我们是在项目层面上进行绑定的。那绑定里面有两个,一个是操作映射,一个是走映射。那我们现在要学习一下,区分一下,有两种绑定方式,操作映射操 做吗?你按或不按,这是操作。所以呢,他就好像一个开关一样的,和零和一这两个状态,他像两个状态字或者 q 或 forse 啊,可以这样去理解他, 那待会我们看一下就知道了。当,当然他还会有一些别的,比如说你按下一个键的时候,是不是还要附着的一个 shift 啊, ctrl 啊, art 啊等等,对吧?那我们大伙可以看一下,那这个就适合什么呢?比如像开枪这样的,开或者不开啊,我们看这个 只能是两种状态,按下或者是未按下,我们操作刺激呢,仅在按下或释放的时候被触发。 那我们还有一种,我们有两种,还有一种绑定呢,叫轴绑定轴,比如说我们前面说的 xyz 轴啊,像这种轴那里面是有刻度的,比如说 这是零到一,一点零,这是零,那我就可以取中间的值,这里面返回的呢是一个数值, 那就不光是零和一了,他可以是零点一,对吧?他可以是零点五,他可以是中间的一些值,那我们具体待会操作的时候看一下就就很清楚了啊。 那 x 是事件将每每针触发一次,通常用于需要手柄或游戏的操作,那我们可以看一下,如果我们用的是一个 ps 的这样的游戏手柄,这个东西 你按多按少,他的值是不一样的,比如你打到头他是一点零啊,你按一半呢,他可能是零点五, 那通过这样我们就可以有更多的输入,那我们的游戏里的这个效果呢,就会更好点,玩家的这种感受就会更好。那在本 利里面,那我们下面呢都会使用这个走印色。 好,那具体怎么做?那我们确定走印色了,我们就点走印色里面这个加号,我们给他加两个,加一个 move forward 的一个 move right, 总之两个方向呢,我们现在做建立个坐标系,对吧?我们是,哎,这个是 y 轴,这和句 open 区额不一样, open 区额跟它的轴是不一样的, 那我们这个是 x 轴,对吧?那这里面的应该是啊,统治字有三个轴, d 轴,那我们现在是什么呢? move forward 应该是对 j j 头的操作, move right 呢?是对 x 轴的操作,那歪着我们不能动,我们是在平地里移动的,那在 open g l 里面它是,这个是。 呃,写错了,写错了,写错了,这个走,这个写错了, 跟欧文学校有点搞反了。这个是 y 轴,这个是 z 轴,在我们的 l、 u、 e 里面,在大部分都是这样的,在欧文 g 二里面,不是欧文 g 幺里面,这个是 y 轴,这个是 x 轴,那 z 轴是这样的,这是 z 轴,是吧? 所以坐标系其实不一样,那我们是这样的,那也就是说我们他是歪轴, 他呢是 x 轴的直,那我们说轴嘛,轴印色,那印色呢?他会有个直。 好,这个值我们待会再去设置。他可能现在出来的是一个默认的值,因为我们这里按什么键都没有选, 我们只是选了两个,都起了两个名字而已。一个我们将会控制的是上下移动,也不是上下移动啊,是前后移动,同时是 y 轴的一个移动,这个呢是 x 轴的移动,这就是轴。音色 好,有了这个以后,我们要增加整整的键了啊,我们在 y 移动上面增加两个,一个 w, 一个 s, 那你只要去在这里面点一下,去选个 w 就可以很能选到,那下面呢?选 a 和 d, 那选完了这个以后,我们知道是要绑定哪个键了,但是你的键返回的值是什么呢?你这里面叫设定,那我按 w 的时候,它返回的是一点零,按 s 的时候返回的是,呃,负一,也就是说我们的 y 轴啊,比如说 y 轴,这是 x, 那我们就不画,不画 d 轴了,他就直接电话,那我们就可以画个正焦的啊,垂直的啊,这是 y 轴,对吧?那你按 w 的时候,他往上走一, 你按 s 走,他其实感觉就是给的也不是往上走一,他给的是一个正一,正一你 s 的时候他是负一,是吧?这 w, 那这边呢?就是 我们是往右,往右的话是当我们看键盘上啊,往右应该是 d 啊,这个是 a, 所以 a 是负一,对吧? d 呢是正义,所以这几个字就是这样设置的。 ok, 那么知道这个以后,我们就可以先实际操作一下,对吧?先把这几个值我们先给他设置好,那这一部分呢,也是非常简单的,而我们现在 点这个无锡的无所谓,这里面无所谓,我们编辑项目设置,我们在项目的层面上啊,我们要格局大一点,我们在这里面找一个 input, 一个输入啊,这里面有个输入,这里面有映射了操作吗?不是,我们要轴,我们需要轴的具体值,那给两个。哎,这点错了, 点一个,点两个,我们需要两个,那这个名字呢?我们可以用上面的一个是木 forward 的,一个是木。 right, 我们把这个两个都烤下来, 这是木 forward, 那下面这个呢?我们叫做木, 所以这只是一个名字,你取什么都可以,并不是说你取了目无佛,我的他就是上下移动,对吧?那我们只是反馈的一个值啊,都要记住, 具体他是不是上下,这是我们后面要在我们 bt player 蓝图里面决定的啊,我们是一个松偶盒的东西,我们现在只是返回一个值,你就这样想就好了啊,这里面啊,看不到了,那我们往下一点。哎,不是 我们把这个拿下来一点,那我们这里面按个 w 啊,就选啊这个 w 键盘就好了,那下面的一样啊,我们就快速的操作一下, 那我们这里面还可以加一个,对吧?那 w 还可以是什么呢? s s, 那 w 是正的 s 呢?这个我们就写成负一就好了。那木 rat 呢? rat 我们的 a a 是往左多,相对于我的 rit 来说右来说那就是负一了。 好,那我们这几个值就就设好了。这里面并没有告诉我们的奥利奥引擎,并没有告诉我们的引擎你是向前移动还是向后移动这个变量的啊?我们这个名称只是示意性的,对吧?我们具体 从哪个方向走,这个还是要在蓝图里面设置的,我们只是给个值,这里面我们要记住我们仅仅是有一个键给会给出一个值而已啊,我们这个绑定的意义啊,就是一个键会给出一个输出一个值,你按下一个键会输出一个值,仅此而已。