• P45. 多个角色控制权切换
  • P46. 角色上下车功能
  • P47. 下车减速功能
  • P45

首先把场景中的“player start”和“ThirdPersonCharacter”(小白人)都delete

把“ThirdPersonCharacter”蓝图类放5个到场景中;在右侧“世界大纲视图”中选中这5个 ThirdPersonCharacter,然后点上面工具栏中的“蓝图——打开关卡蓝图”;把新界面缩小,把关卡编辑器 “世界大纲视图”中的5个 ThirdPersonCharacter 拖到蓝图时间图表中:

  

添加节点“Multigate”(搜索gate能找到),“获取玩家控制器”(然后从此节点拉出来一条线,添加“控制”节点),

连线:

  

 

连完线之后,回到关卡编辑界面,点一个我们想用的初始小白人(哪个都行),把他的“自动控制玩家”改成 玩家0

(目前为止,运行之后的出现的问题是:当从第一个小白人依次轮换再一次回到改成“玩家0”的小白人之后,就切换不了角色了)

——————————————————————————————————

针对上面出现的问题,那怎么重置呢?

  

“multigate”节点中:

  “reset”引脚可以重置(前面可以连一个按键,或者一个自定义事件(某个事件发生了自动重置)等等);

  “is random”如果没打勾,则角色切换是按顺序的;打勾之后是随机切换(这个随机不会重复);

  “loop”打勾,则按下相应按键或相应事件发生之后,从0~4循环切换(每次切换1个,不会按一次一直切换);

  右边的“添加引脚”可以给multigate添加输出引脚

 

从“获取玩家控制器”拉出一条线,添加节点“使用混合设置视图目标”(搜索 set view)

“使用混合设置视图目标” 和 “控制” 节点的使用顺序问题

  应该先用“使用混合…”节点,再用“控制”节点;因为如果先用“控制”节点,视角就直接切换到新的角色身上去了,所以先用“使用混合…”,再连接一个和“blend time”相等时间长的“延迟”节点,再连到“控制”节点

 

“使用混合设置视图目标”引脚说明:

  “new view target”:新的视角到哪个蓝图类(选一个 ThirdPersonCharacter 连到这个引脚)

  “blent time”:从当前画面到新的画面,这个过程打算花多少时间

  “blend func”:渐变方法(由慢而快,由快而慢,线性,或者其他一些改变视角的方式)

 

但是如果用户高频按键切换角色,这个切换动画可能会出现问题,所以我们要加个判断:新建一个bool型变量用来判断,默认值为false,添加一个分支:当值为false时执行切换角色的一系列操作,进入执行后把值改为true,并在切换角色完成后把值改为false;值为true时不执行切换角色操作

最终连线(一共有5个 ThirdPersonCharacter,由于图片太大我只截了3个):

  

  

因为线连的太乱了,文字说明一下“multigate”之后的连线:out0~4分别连5个“使用混合…”的执行;“获取玩家控制器”分别连5个“使用混合设置视图目标”的目标和5个“控制”的目标;5个“ThirdPersonCharacter”分别连5个“使用混合…”的“new view target”和5个“控制”的“in pawn”;注意修改“使用混合…”里的“blend time”和“延迟”节点的“duration”

 

(这节课的非必要操作)

选中多个节点,右键:

  

折叠到节点:相当于新建个文件夹放进去,复用等于新建文件夹复制进去

折叠到函数:设置为一个函数,有输入和输出,可多次调用

折叠到宏:有多个输出执行针脚的无法折叠为函数,宏可以做到,宏还可以有延迟节点,函数不行

 

  • P46. 角色上下车功能 

 先新建一个场景(关卡),搭好地形,世界场景设置 里面的 游戏模式重载 选 ThirdPersonGameMode,默认pawn类选 ThirdPersonCharacter

内容浏览器中,“添加/导入——添加功能或内容包——蓝图功能——载具类游戏——添加到项目”

在文件夹“vehicleBP——Sedan”里有个“Sedan”的蓝图类,拖拽进场景中(至此在场景中添加了汽车)

进入汽车的蓝图类(“Sedan”),在“组件”部分,依附于“网格体vehicleMesh”添加一个碰撞盒子(box collision,用于检测小白人是否在汽车周围,如果在周围那小白人就能进行相应的操控),调整碰撞盒子的大小

新建一个“上下车”图表;

“添加自定义事件”,取名为“上车”;

 

(那么怎么在角色的蓝图类里调用这个“上车”的自定义事件呢)

打开小白人的蓝图类,新建一个变量,取名为“VehicleRef”,变量类型更改为汽车的蓝图类的名字(Sedan),然后选“对象引用”

  

 

在小白人的蓝图类里,添加节点“F”(搜“F”+空格+“键盘”);按住ctrl 把变量“vehicleRef”拖进图表里,然后从此节点拖出一条线添加节点“?Is valid”(搜索is valid 就有,得是前面带问号的那个节点);添加节点“上车”(在Sedan蓝图类中我们新建的 自定义事件节点)

小白人的事件图表新加的节点连完线后:

  

 

为了让上图中的“vehicle Ref”有效:

切换到“Sedan”蓝图类的“上下车”图表,在此图表中添加碰撞盒子(box)的两个节点“组件开始重叠时”和“组件结束重叠时

添加节点“类型转换为 ThirdPersonCharacter”(cast to thirdpersoncharacter),添加节点“设置 Vehicle Ref

  

但此时,“vehicle ref”仍然是空的,我们给它添加一个对自身的引用:从引脚“vehicle ref”拉出一条线添加节点“self”(搜索 self就有,但是节点名字是个中文,大概是 添加一个对自身的引用)

    

添加节点“Gate”(Gate后面就要实现角色控制权的切换,把控制权从小白人切换到汽车),节点“获取玩家控制器”,从“获取玩家控制器”拉出一条线添加节点“控制”,给“控制”传入一个我们想要控制的新的对象,从引脚“in pawn”拉出一条线添加节点“self”(指的是 获得对此蓝图类实例的一个引用,就是汽车);这时控制权就从小白人切换到了汽车的身上

至今为止的“上下车”图表:

  

 

还是在 Sedan 蓝图类中,添加一个球形碰撞(sphere collision)(用于确定小白人上车之后的位置)(和盒体碰撞(box)同级,在网格体 vehiclemesh 下级);把这个 sphere 的“细节——形状——球体半径”改成16,“细节——碰撞——碰撞预设”改成“NoCollision”

(现在来写控制权切换之后(从小白人换到汽车),小白人的位置应该如何)

切换到“上下车”图表,把刚刚添加的组件“sphere”左键拽住拖到此图表中,从“sphere”拉出一条线添加节点“获取场景变换”,然后从新节点的引脚“return value”添加节点“拆分变换”;

添加节点“设置Actor变换”,把引脚“new transform”右键 分割结构体引脚;把“拆分变换”节点的“location”和“rotation”分别与此节点的“new transform location”和“new transform rotation”连接(为什么不连scale:scale是缩放,不用连而且连了小人会变小(因为球体的尺寸被我们进行了改变))

“设置Actor变换”节点中的引脚“目标”连到节点“上车”(上图中红色的自定义事件),这时自定义事件“上车”会多出一个“目标”引脚:

  

 

切换到“ThirdPersonCharacter”蓝图类的事件图表,发现这里的节点“上车”也多了一个“目标”引脚:

  

 

我们把节点“self”(在ThirdPersonCharacter蓝图类中这个self也就是小白人)传给这个“目标” 

(这时编译完蓝图运行,小白人上车后,看到汽车在空中旋转!这时因为小白人有碰撞体积,汽车也有碰撞体积,两个碰撞相互排斥;所以我们要把小白人上车后的碰撞关闭)

切换到“上下车”图表,从节点“上车”的目标添加节点“设置actor启用碰撞”,然后把新加的节点的前面的执行和“设置actor变换”的后面的执行相连,而且不勾选“enable collision”(小白人上车后关闭小白人的碰撞)

  

 

 为了方便区分、不易混淆,我们把自定义事件“上车”中的“目标”右键改成“小白人”(右键之后在右侧的“细节——输入”中改);又为了每次用“小白人”的时候不用每次都连到“上车”的“小白人”,从“小白人”引脚左键拉出一条线,选择“提升为变量”,把此新增的变量重命名为“小白人Ref”;

上一步操作完多出一个节点“设置小白人Ref的值”,视频中把这个节点连到了“控制”和“设置Actor变换”的中间(看不懂为什么这么做)

  

(上图中间节点set的引脚“小白人Ref”连的是节点“上车”的引脚“小白人”(提升为变量的时候它自己连的))

(给用于上车的组件sphere改个名字,改成“Up”(一会还要区分上下车))

把组件“Up”拉到“上车”图表,从“Up”添加节点“附加actor到组件”(为什么是actor:因为我们要附加到“Up”的是小白人,小白人是actor)

节点“附加actor到组件”的引脚“目标”和小白人的引用(读取变量小白人Ref的值)相连(ctrl 拉出变量“小白人Ref”)

(为了简洁和美观,把之前和“上车”节点的“小白人”引脚相连的线断掉,ctrl拉出几个变量“小白人Ref”连到断掉的引脚上)

节点“附加actor到组件”的引脚“location rule”和“rotation rule”和“scale rule”选择“保持场景”(切记是“保持场景”不是“保持相对”)

上车部分到此结束,蓝图:

  

  

 

下面做下车

在 Sedan 蓝图类 “上下车”图表中,添加“键盘F”(“F”+空格+“键盘”)(为什么这个键盘F在Sedan蓝图类里加,不在ThirdPersonCharacter蓝图类里加:因为上车之前控制权在小白人上,上车之后控制权在汽车(Sedan)上)

  • (判断汽车里面有没有人)

ctrl 拖出来变量“小白人Ref”,添加节点“?is valid”

(让小白人不要附加到汽车上)

从节点“小白人Ref”添加节点“从actor分离”(下面三个引脚都选“保持场景”)

在视图里复制一个组件“Up”,改名为“Down”,把组件“Down”移动到合适的位置(小白人下车的位置)

  

 

切换到“上下车”图表,把组件“Down”拉出来,从这个节点添加组件“获取场景变换”,从新节点添加节点“拆分变换

添加节点“读取小白人Ref的值”(ctrl拖左边的变量),“设置Actor变换”;把“拆分变换”的“location”引脚连“设置actor变换”的“new transform location”(可能需要分割结构体引脚)

(为什么“rotation”不连“new transform rotation”:因为如果车在左右转(视角不水平)下车时,控制权切换到小白人 视角也会不水平并且一直不水平)

把“拆分变换”的“rotation”引脚 分割结构体变换(“设置actor变换”的“new transform rotation”也要分割结构体变换),“拆分变换”和“设置actor变换”的相应的rotation引脚只连接“Z”轴

  

(开启小白人的碰撞)

ctrl拖拽变量“小白人Ref”,添加节点“设置actor启用碰撞”(引脚“new actor enable collision”打勾)

(添加镜头过渡)

添加节点“获取玩家控制器”,“使用混合设置视图目标”(“Blend time”设置成0.4(别的时间也行))

添加节点“延迟”,“duration”也改成0.4

(控制权切换)

从节点“获取玩家控制器”(刚才添加的)拉出一条线,添加节点“控制

 

 (ctrl拖拽“小白人Ref”,想连到“控制”的“in pawn”,但是连不上:)

  

 

(为什么不能连:两个类型不对等,“小白人Ref”的类型是actor,“in pawn”要传入的类型是pawn(有pawn这个类型吗?)) 

点一下上车逻辑中的自定义事件“上车”,在右侧的细节面板中把引脚“小白人”的类型改成“pawn”

    

把变量“小白人Ref”的变量类型改成“pawn”

  

然后再连“小白人Ref”和引脚“in pawn”就可以连上了

  

 

下车部分的蓝图:

  

 

  

 

  • P47. 下车减速功能

 切换到“Sedan”蓝图类——“上下车”图表,在下车这部分,拖拽一个组件里的“载具移动”节点到图表中:

  

从此节点拉出一条线,添加节点“设置手制动输入”(搜hand可以找到),然后把引脚“new handbrake”打勾(开启手刹)

再从“载具移动”添加节点“设置油门输入”,把引脚“throttle”设置为0(不给油)

  

 

(视频中说有一个小问题,油门设置什么的会冲突?我没懂。然后为了解决这一冲突,有了下面的部分)

新建一个布尔型变量“下车”,细节面板中的默认值打勾:

  

 

去到“上下车”图表,在上车这部分的最后面连一个“set下车”节点,并且不打勾:

  

 

在下车部分,在节点“使用混合设置视图目标”和“设置手动输入”之间连一个“set下车”节点,并打勾:

  

 

然后切换到“sedan”蓝图类的 事件图表 的“throttle input”部分,ctrl拖出“下车”变量 ;添加“分支”节点(快捷键 B + 鼠标左键)(“下车”连引脚“condition”)

因为上车时才启动油门输入,所以“分支”节点的false连“设置油门输入”的执行

  

原文地址:http://www.cnblogs.com/wjjgame/p/16848603.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性