3.UE -蓝图可视化编程 - 云笔记

📅 2026/7/14 9:44:17
3.UE -蓝图可视化编程 - 云笔记
目录UE介绍蓝图的介绍蓝图的命名蓝图的界面介绍蓝图节点介绍对应的数学知识向量虚幻的游戏框架引擎的输入操作室内场景资产导入后的检查开门交互电梯升降碰撞盒Box Collision蓝图接口蓝图类的继承后期处理材质媒体开关处理灯的开关交互 模型的更换交互 材质更换动态创建材质实例UE4蓝图UE介绍UE可以做游戏, 影视, 动画, 舞台, AR. 游戏是一个完整的系统, 所以顺便就能很容易进而的开发影视, 动画, AR等蓝图的介绍蓝图的命名Blueprint蓝图的界面介绍菜单 工具栏类里面添加的叫组件场景里面添加的叫对象创建一个蓝图并双击进去和世界差不多蓝图节点介绍第一个节点Event BeginPlay 当一个Actor出生的时候会自动调用这个事件如何进行验证打印到屏幕打印到日志文件打印到屏幕持续的时间为2s蓝图写好了记得编译这样可以看出是否有错误蓝图中的运行和关卡中运行的区别蓝图运行会在玩家出生点的位置关卡运行是在摄像机的位置红色的事件节点无法产生两份如何让蓝图中的模型往前走如何走就是调整坐标节点名字set actor Location这个坐标是绝对坐标这两个节点是设置相对坐标也就是设置自己的偏移这两个节点的区别是什么Add Actor World Offset: actor相对于自己的世界坐标设置世界坐标的偏移Add Actor Loaction Offset: actor相对于自己的模型坐标设置自己模型坐标的偏移对其世界坐标进行打印我们接下来的任务就是让这个模型能移动起来Event Tick每一帧都会调用这个TickDelta Time表示每帧运行的时间这样就能让他移动起来了和下面等效的能显示出物体的朝向Vector对应的数学知识向量向量和坐标的关系是什么坐标(位置向量)是向量的一种向量不一定是坐标向量是一个更全的概念我们一般最常用的是坐标位置向量这个表示的就是方向向量打印的是100表示的是单位向量所以x, y, z不一定表示的是坐标坐标和坐标相减的几何意义会得到一个新的向量。游戏中的意义: 我面对你的方向坐标和向量相加的几何意义就是将坐标沿着该向量方向平移向量的长度。游戏中的意义让我向某个方向进行移动在关卡蓝图中将这两个蓝图的坐标相减进行打印看结果然后我们用相减得到的这个向量即盒子朝着圆球的方向和距离用这个向量加上盒子的坐标就可以将盒子移动到圆球的位置向量和标量相乘的集合意义不会改变原有的向量方向长度进行标量被的缩放向量和向量相加的集合意义游戏中意义不大向量和向量相减的集合意义游戏中意义不大用向量进行物体的移动获取当前的坐标当前的单位方向向量这样就能每帧移动1个单位再乘以2就表示每帧移动两个单位现在我想让你走到一定的距离停下介绍一下这个节点branch就是if的意思声明一个变量变量是什么变量的命名对这个变量按住ctrl拖进来就是get 按住alt托进来就是set这样就能运行200cm就能停下了现在我想按某个键再进行移动有一个节点Any Key按下任何键触发的事件但是这个节点的事件触发默认只能由player接收或playercontroller接收但还是有方法使它能接收到不建议将这个改为player0当你实例化多个的时候你让player0的对象触发这个事件所以不建议这样用。只有将这个设置到玩家里面才合理因为你控制的玩家只有一个这样就实现了按一个键再使物体移动如果要使物体旋转呢不能直接对rotation进行运算需要分割结构体引脚分为单独的三个字段然后对这些单独的进行操作虚幻的游戏框架框架是什么GameMode结构就是游戏的规则一个游戏是怎么运行的就写在这里面当你游戏运行的时候会出现右边的默认的游戏模式当我不想要wasd来移动想用其他按键来移动怎么办创建一个文件夹再次运行的时候游戏模式就改变了不再是原来的GameModeBase了这两个有什么区别pawn本身不提供pawn的移动功能能被controller接收除非你自己写出来而character就能被移动选择character将Default Pawn Class给替换掉运行的时候就被替换了选择HUD选择playercontroller这四个就是后面主要要用到的接下来就是要让我们设置的character给动起来进入character蓝图官方给我们提供了几个组件第一个是碰撞第二个是人物的方向第三个是模型主要是用于人物的跑动等动作的模型交互这个是用于各种移动逻辑我们先讲如何控制控制无非分为wasd鼠标的左右键和上下左右移动引擎的输入操作打开项目设置映射分为操作映射和轴映射操作映射:是单次执行比如攻击跳跃你点一下它执行一下快速点不行它是由冷却时间的轴映射:是循环执行你按W则会一直不停的往前跑代表W S 在MoveForward信号里的影响Scale建议只设置三个数值0-11 其它的数值你通过运算来调整即可代表A D 在MoveRight信号的影响在蓝图中点击右键输入你刚才设置的节点选择第一个第一个有逻辑线能驱动后面的节点第二个没有这样当你按W的时候就会触发这个节点了比如我们打印一个字符串不点击就输出0点击W就输出1S就输出-1我们能看到一直在打印说明它具有event Tick的能力这就是轴映射的特点如何才能起到移动效果呢需要用Add Movement Input节点并且要有Character Movement组件这个是给我已经实现好了的直接用即可否则自己写起来很复杂连接的意思输入的值赋值给Scale Value并且获取到当前前后的方向向量乘以Scale Value 赋值给Add Movement Input节点的Target对象我们写了前后移动同理我们再来写左右的逻辑注意角色除了上下左右走动还有相机。Cine Camera 相机主要是做效果的我们主要用Camera如果这个相机在这个胶囊体里面的我们称这个游戏为第一人称相机在外面的我们称为第三人称转动视角不需要设置Scale数值往右就是1 左是-1如果你想鼠标向下移动是抬头向上移动是低头就可以改变这个数值鼠标左右 上下移动分别会触发的事件这样就能上下看了这样连接之后我们发现不能上下看为什么呢因为事件触发的对象是Pawn不是pawn里的相机因为pawn默认设置鼠标左右移动会改变模型Yaw模型的Yaw改变了相机就改变了。鼠标上下移动不会改变模型的Pitch所以我们上下就没法改变模型的Pitch相机也就没跟着改变。所以如果你把Use Pawn Control Rotation的勾给去掉则你再运行旋转的就只是相机了就不会旋转Pawn的Yaw本身了如何解决呢我们让pawn对象里的摄像机移动即可把这个选项给勾上就能单独的控制pawn里面的相机了。如果没有控制pawn里的Rotation则会转而控制相机的RotationPlayerStart有什么用是你玩家出生时的坐标以及朝向至于之后怎么移动就是来源你上面蓝图里写的。室内场景创建一个新项目进行项目设置新建一个基本关卡然后给他保存起来调整输入调整渲染这个就需要根据你的项目来确定是调整静态光还是动态光这些灯光有的是固定的有的是可移动的有的是静态的只要有静态的就需要吧lumen给关掉然后把这个给勾选上这样反射才能清晰然后我们把框架给设置上设置一个GameMode设置一个playerController设置一个HUD设置一个character添加一个Camera组件相机能够被pawn控制并设置相机的高度我们可以看到半高有88全高就有176半径有34直径68如果出现BADsize这个字样出生的时候就有可能移动不了胶囊体运动的最大速度配置好移动并测试好接下来就是导入资源导资源分为三种情况第一种拿到手的资源是完整的有项目图标有content文件夹这种是最简单的可以直接将资源复制过去打开这个资源项目选中这些文件点击迁移直接迁移到我们的项目里面去导入之后再重新打开该项目也可以直接复制粘贴过来第二种没有项目图标只有一个content需要先检查一下这些文件的后缀是否是uassert是否都导入过虚幻确定是导入过虚幻的你才能复制过去将这些给复制过去第三种没有项目图标没有content文件夹只有这种这种情况我们就需要将这些资源手动导入按照之前的方式还有一种导入过虚幻但是路径不明确如果材质的资源丢失说明你放的content下的文件夹的路径不对这个就需要你来排查手动把这些资源放到正确的content下的文件夹解压到…拖拽所有的文件进content要么解压到当前文件夹后将这些文件拖进content资产导入后的检查资产导入后检查是否能使用首先检查Maps或Level打开关卡蓝图如果有蓝图则建议全部删掉打开窗口里的关卡这个是为了叠层用的把下面所有的关卡图全部给叠起来显示。所以我们需要把所有眼睛给打开有小圆点的运行的时候是看不到的。我们要将光转为动态光所以就需要转为固定加载这样前面的小圆点就没有了检查所有的模型对象上的模型和材质是不是空的如果有一个是空的就不行都要检查一遍如果场景里有蓝图对象我们需要进去编译一次检查是否有致命的错误如果要把所有的灯光改成动态光则需要调整把所有有关灯光的都改为可移动的然后把不需要的给删除比如lightmassimportance静态光照体积静态的已经不需要了比如反射球我们用了自动lumen的反射然后调整光照体积把这些给打开光照贴图不建议删如果删了可能会导致项目崩溃用不了如果想删除呢我们将这个勾上就不会使用这些图了构建一次这些贴图就不在了然后将这些给删除这样处理完后就可以了还有一个补充知识点如果你不想要那么明显的灯光放光你可以调 软半径显示数据可以看到50帧左右最开始调之前的静态光帧率有110左右将游戏模式给换成自己的游戏模式之前不是设置过了吗之前设置的另一个地图关卡的并不是当前的并不会在当前的地图关卡生效所以你需要在这个地图里重新设置一遍。有人发现运行后不还是能动吗这是因为我们用的是官方给你提供了默认的游戏模式设置好自己的游戏模式后运行发现自己不能穿墙因为我们设置了胶囊体如果把Panw下的Use Controller Rotation Yaw给去掉则会出现一种情况你视角朝前但是按W会往后走。如何解决这种情况有一个数据流程 外设-》controller-》player。玩家输入Wcontroller接收到controller改变pawn的rotation这样我们就直接拿到controller的rotation来自己控制角色的rotation这样就是用controller的Yaw转换为Forward和Right的Vector从而来控制角色添加Arrow1 坐标调到外面渲染的隐藏给取消掉运行的时候就能看到箭头并且方向是不会变的因为我们改变的是摄像机对于角色的控制如果出现多个player并且控制的方式相同我们一般不写到character里面我们写到控制器里面。如果出现多个player并且他们的控制方式不同我们就可以对于不同的character写不同的控制方式在控制器里写的控制方法和在角色里写的控制方法会有些许不一样 Add Movement Input(在这里面搜不到但是可以从 BP_Player的蓝图里面复制过来)但是复制过来一定要改变Target。Get Player Character 的作用是 能自动的获取到玩家控制的角色对象蓝图箭头也可以连接Add Movement Input此时能搜到World Direction 怎么写主要看你Player对象下的Panw属性的Use Controller Rotation Yaw是否勾选如果勾选了就可以这么放往上放节点不一样了用的是这两个Add Yaw Input 节点和 Add Pitch Input节点这两个是来控制Controller的Controller来控制Player。当然你也可以使用Add Contoller yaw Input但是目标要选对需要选择玩家当前控制的角色Controller里面也有这个节点意思是找到自己的RotationPlayer里的节点的意思是找到目标为Pawn的Controller的Rotation如果你Player对象下的Panw属性的Use Controller Rotation Yaw没有勾选就这样连接开门交互下面我们来实现开门创建一个Actor蓝图然后我们要给这个蓝图添加一个模型Static Mesh事静态的网格模型组件如果事Skeletal Mesh就是动态的有骨骼的模型组件我们给他重命名我们选择一个模型这个模型可能是这么旋转的不符合我们的要求这种情况是最常见的需要我们手动来调整1.用其他软件来改比如3DMax2.用虚幻5的功能来改虚幻5提供了建模的功能虚幻5如何更改选择建模有的人可能没有这个按钮需要调一下当你改门的时候也会改这个文件我们需要让门沿着这条线进行旋转选中门然后选择编辑点击Bottom中心轴就被改到了底部然后你也可以改到左侧然后手动调一调把这个中心轴调到底部最后点击接受就会改变中心轴的位置了就可以在这里进行旋转了这种门由三个部分组成门把手钉子我们旋转的时候需要将这些都进行旋转所以我们要将这三个模型变成一个整体这就是之前我们在Max要进行解组之后再上传的原因因为在虚幻里是可以合并的将这些模型合并之后会变成一个新的模型文件所以我们建一个新的文件夹左边的默认属性可以不用管然后点击接受这个时候就出来了一个文件选中了发现中心轴又回去了因为这个轴是其它模型的所以我们建议先合并再改中心轴我们再重新改一次然后我们把这个模型添加到蓝图里你也可以添加模型组件后再加上模型想让这个们旋转不建议是直接修改门的世界rotation坐标这是蓝图里获取世界坐标的方法而是修改蓝图类的相对坐标系。你调整蓝图类的相对坐标系并不会影响这个模型在世界场景的坐标系但是仍然是有效果的。所以可以理解为一个是针对整体一个是针对局部这个是Set World Location这是门(模型组件)的坐标系而Set Actor Location该Actor自身的坐标系下面来实现门的旋转这个节点会自动运行这是一个不用红色节点来运行的方式第一个字段play的意思是播放/继续播放的意思如果暂停了再play则按暂停的位置继续播放并不是从头开始播放第二个字段play from Start的意思是从头播放第三个字段Stop是暂停第四个字段Reverse 是反向播放第五个字段Reverse from End 是从结尾处反向播放最后的两个字段不常用不用管需要注意一个点: 如果Play到结尾了继续Play并不会从头开始播放如果这个时间轴设置为2s 字段 Update的意思是这2s内每一帧都会执行一次该Update当你2s时间执行完了之后Finish字段会自动执行direction字段是控制正方向移动还是反方向移动时间轴可以进行编辑我们双击打开它进行编辑一般用浮点就足够解决很多事了将这个进行命名长度代表有多少秒你只能编辑灰色区域对着这个灰色区域右键添加一个关键帧就是打点打点的目的就是在哪一个时刻输出什么样的值这个值是给其它节点用的在2s的时候输出一个90指可以在外面表示90度最好不要在这里的值设置为90因为不通用我们可以将这个值设置为1在外面用90乘以这个1就更通用了Lerp节点表示从A的值开始一直运行到B的值结束然后实现一下开门逻辑运行也可以不用红色节点来驱动播放把自动播放和循环选上运行的时候就能一直循环播放了如果我们想实现开门关门为一体就可以这样设置这种模式可以做 比如恐怖游戏的灯会一闪一闪的现在我不想这么做我想按一个键开门再按一个键关门这个按键也可以放到角色里也可以放到控制器里当你触发按键的时候Get Actor Of Class 节点就会获取BP Door节点然后返回这个对象事件驱动不能再用游戏开始就触发的事件节点了我们用自定义节点Flip Flop节点第一次会走A第二次会走B第三次走A。。。然后在player里触发这个模型的自定义事件这样就能通过按键来实现开门关门了电梯升降下面我们做一个升降电梯可以开门关门先做一个模型出来选中之后添加我们用Any Key节点设置1234让事件能接收参数然后实现电梯的开门关门然后我们用一个自定义事件来调用这一串这样就是实现了开关门但是还是有一点bug就是能在运行的过程中再次运行。我们应该阻止用户按下时间轴的Is Playing 当前是否在运行给两个时间轴命好名字实现但是如何调整电梯升降的速率呢时间轴的Set Play Rate 控制播放速率 0是暂停1是正常的播放速度2是加倍播放速度这个节点最好是在播放之前设置实现还有一个问题这里的复用率不高声明一个对象类型变量赋值给这个变量按键事件的InputAction ElevatorKey的Get Key Display Name 能获得到按下键的名字我们能根据这个名字来设置要去楼层的高度我们可以看一下按下Q打印的是什么实现完成电梯的多个楼层的门是否打开实例化出多个门将BP_ElevatorDoor类里的Floor变量公开让外部能直接访问到设置该变量的值调用该事件的时候将楼层参数给传进去如果相等才将该楼层的门给打开碰撞盒Box Collision现在我们来优化一下开门关门无论我们距离多远都能开门关门我们希望靠近门的时候才能开门关门添加一个组件Box Collision。下面有一个Capsule就是我们之前提到过的 character蓝图类里自带的胶囊体不建议这样把Box作为Door的子类因为这样会导致门旋转的时候Box会跟着一起旋转调整该Box的检测区域我们可以从细节面板上看到有哪些事件这些也是蓝图能给我们提供的事件节点当你点击的时候会自动的跳转并创建一个事件过去Begin Overlap当你的人和进入到这个Box时候会触发这个事件End Overlap当你的人和离开这个Box时候会触发这个事件这样就是实现了当你靠近这个门的时候会自动的开门关门这种情况现在还有一个问题实例化多个门的时候开门时你不知道会打开哪个门用碰撞Box就可以解决这个问题走到哪个门前哪个门就开门不仅仅是人进入了这个Box里会触发这个事件一个模型比如球进入这个Box也会触发这个事件不仅仅是球会触发连自己的门模型也会触发所以如果Box盒子没有包围打开门时的状态则会出现一种情况会抖动。因为开门关门时门会触发Box事件怎么判断哪个物体会触发这个事件呢打开门这个模型打开简单碰撞只要有绿色的框就会触发Box事件人有这个胶囊体的框所以也会触发这个事件当触发这个事件的时候那我怎么区分人和球和其它模型呢Get Player Character 能获取到好现在我们想让走进哪个门然后按E哪个门再开门如何实现方法一让所有门都执行相同的逻辑方法二准确的找到某一个门再让他执行后面的逻辑将Other Actor返回的Actor对象转换为BP_Player类型并将BP_Player对象下的变量Door Actor设置为自己完整实现第二种方法的好处就是不用搜索不会消耗搜索的时间蓝图接口让这个门和人进行交互还有一种方法蓝图接口的作用就是把消息给转换一下双击重命名将这个类型作为参数进行传递当进入到这个门的时候调用蓝图接口并将自己作为参数传进去关联蓝图接口此时就会触发Set Player Door事件并会接收到BP_Door传的参数蓝图类的继承一个场景里面不仅仅门可以开关灯也可以开关电视也可以开关我们不能每一个物品都给他写一遍相同的逻辑所以我们可以用蓝图继承只需要写一遍其它物品只需继承它就有这个功能了然后不同的部分可以重写一遍即可创建一个Actor类并命好名字然后写通用的逻辑添加Box以及触发事件创建子蓝图类这个子类里就默认有Box了点进去看我们就能看到自动有一个Box了再添加一个模型再添加一个蓝图接口然后需要不同的模型就添加不同的模型以下是完整的实现基类的实现触发Overlap的事件参数为BP_BaseClass类型基于BP_BaseClass 创建一个子类后期处理材质添加一个材质球叫做后期处理材质就是边缘会有描边的效果原理就是把这个形状里的像素全给去了只留下一个边这个可以调整一个是边缘的颜色另一个是边缘的粗细度创建材质实例双击打开可以看到提供了两个参数一个是宽度另一个是颜色材质球调完之后如何看到这个材质的效果放到后期处理体积里直接将这个材质给拖拽进去这里勾选上就能显示勾选上就会显示但是我们一般不在这里面设置我们一般在蓝图里面设置这样就实现了走到门附近的时候就会显示边框媒体开关处理下面我们来处理媒体电视准备好一个MP4文件MP4文件是不能直接导入到虚幻的虚幻规定MP4等媒体文件必须要放到Content的Movies目录下将文件拖拽过来否则会出现这种情况也可以这样导入然后这里再选择然后重命名MP4文件播放需要有媒体播放器勾选上媒体纹理这个纹理是干什么的呢模型上只能显示纹理播放的视频会转换为图片纹理重命名然后把图片创建为材质球重命名双击打开将材质球扔上去我们发现这个纹理反了是镜像的怎么给他挪正通道0是负责表面的纹理要么你自己转UV要么在材质里写快捷键U这样设置后连接然后实现电视的开关将电视所有模型进行选中合并创建一个子类BP_Television添加电视模型将地图里的电视替换为你自己的模型添加一个声音组件这个位置指定你自己的播放器声明一个播放器变量实现播放Open Source是打开视频源文件并从头播放 Play是播放必须打开了源文件才能播放Pause是暂停Close是关闭源文件Auto Clear当源文件被关闭的时候纹理会被清理掉当你勾选上Loop播放到结尾的时候再点击Play会从头开始播放当周围环境很黑的时候你播放电视应该有照射效果添加一个矩形光源并且将材质设置为T_Video这样就会用这个纹理来照亮自己构建一个黑暗的场景就可以看到照亮的效果灯的开关下面来做个灯的开关基于BP_BaseClass 创建一个子类BP_Light选中所有模型进行合并放在Meshes文件里面命好名字然后也可以改变中心点将BaseMesh设置过来并调整一下Box的位置增加一个射灯并调整射灯的位置然后设置和场景的射灯一样的参数然后把场景里的灯给删了然后编写BP_Light类时间轴LightAnim是控制灯的渐亮渐暗的Set Intensity能设置灯的强度交互 模型的更换把瓷瓶的模型合并并设置好中心轴创建BP_Sculpture子类实现在模型编辑器里设置了一次材质如果你在蓝图里面设置了默认用的就是蓝图里的通用模型的材质统一而不是用模型里设置的材质你不想要统一你想要一个模型一个材质你就需要手动设置材质还有一个弊端模型不是合并的你需要换多个模型一个模型的材质可能不止有一个可能有10个材质所以你需要一个一个把材质都给替换。目前在蓝图里没有好的解决方法只能一个一个设置材质最好的方式就是把所有模型都给合并并且给的材质最好是一个否则就需要一个一个来设置。交互 材质更换对这个模型进行合并更换中心点创建一个蓝图类并把这个模型给放进去替换为自己的蓝图类实例创建一个自己的材质球把这个节点转换为参数用这材质球两个实例出来的材质球并设置好材质用这两个实例出来的材质球实现其一这种耗资源因为用了两个实例的材质球其实我们只需要用一个材质球就可以了只需要换材质球的贴图就可以了其二如果你需要有多个材质每个材质都需要创建一个对应的材质球不方便直接用动态加载就可以了动态创建材质实例动态创建一个材质球实例并且把原来模型上的材质球替换为这个材质球实例交互的时候只需要更换材质的贴图即可这两个实例就可以删除了第二种方法在创建动态实例的时候就把材质球给设置好UE4蓝图可视化编程, 官方都直接用中文写蓝图的文档, 可见蓝图可视化编程的易上手性, 不需要你英语有多好, 不需要你有编程水平, 你就可以拿这个引擎做很多事情, 这也是虚幻引擎很火的原因现在我想实现编程, 但是不想敲代码只用蓝图的方式来实现.我们先来介绍一下UE4的界面1.菜单栏(少用)2.工具栏(少用)3.模式(就是官方提供给我们使用的工具)4.内容浏览器(材质的导入等等, 可以理解为仓库)5.视口(所有的交互都在这个视口中呈现)6.世界大纲(和视口进行交互的, 即我视口选中的时候, 这里的选中也会跟着变, 所有物品的列表)7.细节面板(和视口进行交互的, 即我视口选中的时候, 这里的选中也会跟着变, 当前物品的属性调整)再来看, 如何让完全不懂代码的美术来实现编程?刚才在播放的时候, 我们看到了哪些东西?场景, 动作, 特效, 模型, 攻击, 伤害, 我们说的编程肯定不是编程场景和模型, 这两个都有对应的人去做, 我们要做的是什么呢?效果角色AI角色包括:模型, 动作, 特效, 有专门的模型师, 动作师, 特效师来制作, 即所有美术的方面都有人来做, 而我们需要做的是将上面的资源根据实际情况进行控制, 这种东西叫做机制, 也叫交互.如人物开火, 会产生后坐力动画, 开火特效, 弹壳蹦飞的特效, 击中物体的弹坑我们要做成这样应该如何操作呢?1.添加模型资源2.可以控制这个角色3.有交互的逻辑下面我们来进行操作:右键内容浏览器, 选中蓝图类选择角色起一个名字, 并双击打开这个界面, 进入蓝图的内部在布局上面差别不大, 如何添加这个模型?选中Mesh右侧细节窗口中的Mesh选择你的模型对应配套的, 我们需要在场景中看到这个人, 所以就需要有一个摄像机, 当然也需要一个弹簧(配套的), 点击添加组件进行添加这个人物这样傻站着, 如何让他摆一个动作呢?这里就能添加一个动作这样我们就实现了一个资源, 并且能够看见的然后把defaultpawn给替换为我们自己的我们的第一步添加就做完了下面第二步控制点击事件图表, 右键, 输入前后移动右键, 添加移动输入获取GetActorforward现在进行播放就能实现前后移动了, 还差一个左右移动和鼠标移动这样就能控制上下左右了选择摄像机, 并设置使用pawn控制旋转这样我们实现了第二步控制下面我们来实现交互, 左键开火有一些列对应的事件这里选择对应的资源, 这样就实现了开火时的开火动作