角色设置
为了使角色能够“抓取”武器,需要在骨骼中添加功能---socket,即插槽。
找到放置武器的位置,右键添加插槽即可(项目不同可能示例截图不一致,但做法相同)
放置后,直接绑定会发现武器位置和想象中不太一样;这里我们右键为socket添加预览,通过预览调整武器。
蓝图实现
武器拿到手中主要通过AttachToComponent方法,既可以在武器蓝图脚本实现也可以在角色脚本中实现,原理相同。
- 首先为武器添加事件OnComponentBeginOverlap;
- 然后检测碰撞物体是否为角色
- AttachToComponent
-
(有时需要取消物体与角色的碰撞或其它调整,视具体情况而定)
如下:
这里注意AttachToComponent的具体设置,target为attach的物体,parent为被attach的scence component,此处为武器的蓝图脚本,因此target为self;parent应设置在角色的mesh上。规则为Snap to Target
代码实现
void AChilikoCollectActor::NotifyActorBeginOverlap(AActor* OtherActor)
{
Super::NotifyActorBeginOverlap(OtherActor);
//碰撞后提示、特效等处理
if (Role == ROLE_Authority)
{
AChilikoCharacter* MyCharacter = Cast<AChilikoCharacter>(OtherActor);
if (MyCharacter)
{
// 拾取前的处理,如播放动画/按键提示等。
AttachToComponent(MyCharacter->GetRootComponent(), FAttachmentTransformRules::SnapToTargetNotIncludingScale, FName(TEXT("hand_rSocket")));
// 拾取后的处理
}
}
}
当然,也可以通过其它碰撞处理方法实现。