这里写目录标题
- p46角色上下车功能
- 上车(控制权切换)
- 让角色和汽车一起移动
- GetWorldTransform(获取场景变换)
- break(拆分变换)
- AttachActorToComponent(附加Actor到组件)
- 下车
p46角色上下车功能
添加一个车的蓝图(可以添加官方的载具游戏的车),在内容浏览器-》添加-》功能包-》载具类游戏
在VehicleBP-》Sedan-》Sedan,拖拽到视口中
先给车添加一个碰撞盒子,使玩家靠近可以交互开车,打开Sedan蓝图
在Sedan蓝图类中添加新事件图表,重命名为上下车
上车(控制权切换)
添加变量VehicleRef(车辆裁判),变量类型更改为汽车的蓝图类Sedan,对象引用
创建蓝图
在玩家第三人称蓝图中创建键盘 F,拖出Vechile Ref,拖出引脚搜索‘?is valid’,从Vechile Ref急促拖出引脚搜索自定义事件“上车”
当角色靠近车,ThirdPersonCharacter蓝图的Vechile Ref会被赋值,如果赋值了按F走Is Valid ,如果没有赋值按F走Is Not Valid
创建组件开始重叠(Box)和组件结束重叠(Box),这是为了让角色在触碰到盒体后给ThirdPersonCharacter蓝图的Vechile Ref赋值
怎么使触发盒子通信ThirdPersonCharacter蓝图的Vechile Ref呢?
使用类型转换,并使用“设置Vechile Ref”,设置就需要给它一个数值,从“设置Vechile Ref”的Vechile Ref拉出引线搜索self(获得一个对自己的引用)
即在玩家和车重叠时按F就把自己赋给了ThirdPersonCharacter蓝图的Vechile Ref
如下连接蓝图
离开盒体碰撞区域时要取消给ThirdPersonCharacter蓝图的Vechile Ref的赋值,去掉self蓝图即可,什么都不给SET,它就变为空的了
创建Gate,获取玩家控制器,控制,如图连接
蓝图“控制”的对象为汽车,所以,从In Pawn拉出引线,搜索self(获得一个对自己的引用)
当角色靠近车,ThirdPersonCharacter蓝图的Vechile Ref会被赋值,之后再按F间就可以进行蓝图通讯,触发Sedan内的自定义事件上车,
如此,即可在角色靠近车使,按键盘F,进行控制权切换了
但是现在切换后人是没上车的
让角色和汽车一起移动
在组件搜索Sphere Collision(球体碰撞),在细节面板的形状更改球体半径为16,把它放在一个正确的位置上,在collision的碰撞预设改成NoCollision,添加Sphere Collision的目的是定一个位置
GetWorldTransform(获取场景变换)
在Sedan蓝图组件中拖拽Sphere到上下车图表中,拉出引脚搜索GetWorldTransform(获取场景变换)
break(拆分变换)
从GetWorldTransform(获取场景变换)的Return Value引脚拉出引线搜索break(拆分变换)
Location(位置)
Rotation(旋转)
Scale(缩放)
创建蓝图“设置Actor变换”
如图连接
但是现在蓝图“设置Actor变换”没有目标,拖拽住目标伸出引线,拉到自定义事件“上车”处,会显示一个添加引脚到节点,连接
如此会发现ThirdPersonCharacter蓝图的事件上车多了一个目标
从此新增的目标拖拽引线搜索myself(获得对此蓝图实例的引用),此操作可以使ThirdPersonCharacter蓝图类里的变量传到Sedan中
现在上车,车会旋转飞出去,因为卡了碰撞,人也有碰撞,车也有碰撞,两个碰撞相排斥
从事件上车的目标拉出引线搜索设置Actor启用碰撞,注意,不要勾选,如图连接
现在解决了碰撞相斥的问题,而且角色会瞬间到达上车位置,但是角色不会随着车进行移动
选中自定义事件上车的目标,拖出引线,选择提升为变量
如图连接
AttachActorToComponent(附加Actor到组件)
Socket Name(骨骼名字):当玩家如果带枪,此节点输入骨骼的名字,可以把枪贴到此骨骼上
Location Rule选择以什么为参考
Rotaion Rule选择以什么为参考
Scale Rule选择以什么为参考
保持相对:相对于父类,在此问题中相对于SphereUp,会造成角色不知道跑到哪了
保持场景:相对于世界坐标,在此问题中应使用此
对其到目标
将Sphere重命名为SphereUp,拉出SphereUp,拉出引线搜索attach to,可以看到两个附加Actor到组件,附加组件到组件,这两个目标不一样,一个是Actor,另一个是组件,选择AttachActorToComponent(附加Actor到组件)
将变量目标重命名为小白人
连接蓝图
如此把角色附加到了SphereUp上
附加到汽车上不好调整角色位置,不如先在车上定位一个点,把角色附加到此点上
AttachActorToComponent(附加Actor到组件)Location Rule、Rotaion Rule、Scale Rule选择以场景为参考,如此角色就会和车一起移动了
上车蓝图总览
下车
下车的蓝图创建思路正好和上车相反
在Sedan蓝图类内创建“键盘 F”,为什么在Sedan蓝图类创建?因为上车时已经切换了控制权,所以只会在切换了控制权的这个蓝图类里才能响应,所以“键盘 F”创建在Sedan蓝图类内
如图连接蓝图,此蓝图是为了规避bug风险
和AttachActorToComponent(附加Actor到组件)相对应的是DetachFromActor(从Actor分离),在Location Rule、Rotation Rule、Scale Rule选择保持场景
现在如果在开车的状态下,按下F键,角色会脱离汽车
放置一个下车位置
如图连接蓝图
注意不要直接连接设置Actor变换的Rotation,如果连接,下车时如果车是倾斜的,角色下车后也会是倾斜的,一定要分割结构体引脚,连接z轴
开启角色碰撞,注意,要打勾
使镜头有过渡
切换回控制权
将小白人的变量类型转换成pawn,不要忘记自定义事件上车的小白人引脚,也要改成pawn(这是之前的失误)