我在学习UE5.7官方文档入门教程里的第一人称冒险游戏,在学习到装备角色的时候遇到两个问题。
1.一个武器资源无法同时加载到第一人称和第三人称网格体上,后一个加载的网格体上不会出现武器。我尝试再创建一个武器副本加载到另一个网格体,并且对玩家隐藏来达到只看到第一视角的武器,并且第三视角的影子上有正常的武器影子,可能是我隐藏的的方法不对,无法做到只隐藏武器而保留影子。
2.加载到第三人称的动画不能随镜头上下点头。
这是官网文档链接:用C++工具装备角色 | 虚幻引擎 5.7 文档 | Epic Developer Community
下面是武器绑定到角色部分的代码:
void AMyCharacter::AttachTool(UEquippableToolDefinition* ToolDefinition)
{
// 只有角色没有该工具时才允许添加
if (not IsToolAlreadyOwned(ToolDefinition))
{
AEquippableToolBase* ToolToEquip = GetWorld()->SpawnActor(ToolDefinition->ToolAsset, this->GetActorTransform());
// 将工具附加到角色
// 当为true时,虚幻引擎会将两个物体接合在一起,以便它们在移动时作为一个整体交互。 一些常用的附加规则包括KeepRelative(保持与父级的相对变换)、KeepWorld(保持世界变换)和SnapToTarget(对齐到父级变换)
FAttachmentTransformRules AttachmentRules(EAttachmentRule::SnapToTarget, true);
// 将工具附加到角色的右手
ToolToEquip->AttachToActor(this, AttachmentRules);
ToolToEquip->AttachToComponent(FirstPersonMeshComponent, AttachmentRules, FName(TEXT(“HandGrip_R”)));//AEquippableToolBase* ToolToEquip2 = GetWorld()->SpawnActor<AEquippableToolBase>(ToolDefinition->ToolAsset, this->GetActorTransform()); ToolToEquip->AttachToActor(this, AttachmentRules); ToolToEquip->AttachToComponent(GetMesh(), AttachmentRules, FName(TEXT("HandGrip_R"))); ToolToEquip->OwningCharacter = this;
GEngine->AddOnScreenDebugMessage(-1, 500.0f, FColor::Blue, GetOwner()->GetName()); // 将工具添加到角色的物品库中 InventoryComponent->ToolInventory.Add(ToolDefinition); // 设置工具的动画实例类 GetMesh()->SetAnimInstanceClass(ToolToEquip->ThirdPersonToolAnim->GeneratedClass); FirstPersonMeshComponent->SetAnimInstanceClass(ToolToEquip->FirstPersonToolAnim->GeneratedClass); EquippedTool = ToolToEquip; // Get the player controller for this character if (APlayerController* PlayerController = Cast<APlayerController>(Controller)) { if (UEnhancedInputLocalPlayerSubsystem* Subsystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(PlayerController->GetLocalPlayer())) { // 添加工具输入映射,因为设置优先级为1高于默认输入映射,所有有相同输入的映射,优先执行此映射,优先级数字越大的优先级越高 Subsystem->AddMappingContext(ToolToEquip->ToolMappingContext, 1); } ToolToEquip->BindInputAction(UseAction); }}
}
向各位大佬求教。