虚幻引擎图文笔记:如何让带骨骼的角色捡东西(Pickup)和扔东西(Drop)

效果

[教程辅助视频]如何让带骨骼的角色实现捡东西(Pickup)

原理

  • 在角色的骨骼上添加Socket作为被捡物的吸附位置
  • 被捡物发生Overlap事件以后判断另一个物体是否为角色对象,如果是则将自身以及要吸附的位置作为参数传给角色
  • 角色接收到参数以后把被捡物Attach到相应的Socket

步骤

本文依旧以第三人称模板为起点实现

1. 定义被捡物体类

组件结构:一个StaticMesh组件

注意:这个被捡物在Collision设置中要对Pawn开启Overlap并且开启产生Overlap事件

在这里插入图片描述
在这里插入图片描述

这个类有2个方法:OnPickupOnDrop,顾名思义它们分别是物件被捡起和扔下时要执行的逻辑。OnPickup不需要参数,OnDrop有一个Vector类型参数,它的作用是被扔下时的初始速度的方向。

BPI_Picker时是所有可以捡东西的类都要实现的接口(在下文中定义)

  • 检测到角色以后仅仅是把必要的参数传过去,并不调用OnPickup,因为到底捡不捡还需要在角色中判断一下

在这里插入图片描述

  • 被捡到以后就要关闭物理模拟和碰撞

在这里插入图片描述

  • 被扔下以后要开启物理模拟和碰撞,并且添加一个初始速度

注意:在Set Collision Enabled中之开启了Physics没有打开Query Collision,因为被检物离角色很近的话被抛弃时还可以和角色发生Overlap,这样没等落地就又被捡起来了。如果游戏设定中物体可以多次被捡可以根据需要以其它方式开启Query Collision

在这里插入图片描述

2. 定义BPI_Picker接口

BPI_Picker接口:所有可捡东西的角色都要实现这个接口,比如:主角啊,怪物啊等等。

在这里插入图片描述

它只有1个方法Pickup,该方法有2个参数:

  • Item:BP_Pickupable类型,被拾取的物体通过这个参数传进来。
  • SocketName:Name类型,这个自然就是物体要吸附的插槽了。

3. 在骨骼上添加插槽(Socket)

本例中我们想让物体吸附在角色的右手,所以在右手添加一个插槽,记住这个插槽的名字:“hand_rSocket”

在这里插入图片描述

4. 角色蓝图

Class Settings中添加BPI_Picker接口

在这里插入图片描述

实现这个接口

我在角色中添加了一个名为"RightHandItem"(BP_Pickupable类型)的成员变量,它的作用:

  • 作为角色右手当前是否已持有物体的标志
  • 保留被捡对象的引用
捡东西

接收到Pickup事件以后,角色要决定是否真的捡起这个物体,这个逻辑可以根据游戏设定来实现,本例中如果已经持有就不再捡新的了。

在这里插入图片描述

扔东西

本例中使用Q 键来扔东西。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开发游戏的老王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值