Unreal Engine 4 и C ++. Функция атаки хороша, пока оператор не используется, чтобы атаковать, только когда оружие экипировано. - PullRequest
0 голосов
/ 05 апреля 2020

Я новичок в этом, но я почти уверен, что это вопрос кодирования. В настоящее время я следую учебному пособию по созданию игры-гладиатора в нереальном движке. (https://www.youtube.com/watch?v=NyBO4p4k_vY&t=2s)

Я следовал всем точным инструкциям. Проблема, с которой я столкнулся, заключается в том, что я кодирую своего персонажа для атаки оружием. Я вывел это к этому.

void APlayerCharacter::TriggerAttack()
{   
  Attack();
}

Запускает анимацию для атаки с оружием и без него. Это означает, что атака работает. Следующий шаг в уроке - атаковать только тогда, когда у вас есть оружие. Это та часть, которая ставит меня в тупик.

void APlayerCharacter::TriggerAttack(){ 

  if (MyWeaponActor){
    Attack();
  }
}

Оператор if при добавлении не позволяет мне атаковать вообще, даже когда я столкнулся и вооружил оружие. Что заставляет меня верить, что это сам Оружейный предмет. ArenaCharacter. cpp содержит функции для подбора предметов и атаки, а PickableWeapon. cpp - это закодированное мной оружие. Есть что-то, чего мне не хватает, чего я не делаю?

// ArenaCharacter.cpp

bool AArenaCharacter::PickWeapon(APickableWeapon * pickedWeapon)
{

if (!pickedWeapon)
    return false;

if (!MyWeaponActor) {

    if (pickedWeapon->AttachItemTo(GetMesh(), TEXT("WeaponPoint")) == true) {

        MyWeaponActor = pickedWeapon;
        WeaponCollider = MyWeaponActor->GetDamageBox();

        WeaponCollider->SetCollisionEnabled(ECollisionEnabled::NoCollision);

        return true;

    }
}
return false;
}


// PickableWeapon.cpp

#include "PickableWeapon.h"
#include "Components/SphereComponent.h"
#include "Components/SkeletalMeshComponent.h"
#include "Components/BoxComponent.h"

APickableWeapon::APickableWeapon() {

RootComponent = CreateDefaultSubobject<USceneComponent>(TEXT("Root"));

MySphere = CreateDefaultSubobject<USphereComponent>(TEXT("Sphere"));
MySphere->AttachToComponent(RootComponent, FAttachmentTransformRules::KeepRelativeTransform);

MySkeletalMesh = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("Skeletal Mesh Hammer"));
MySkeletalMesh->AttachToComponent(MySphere, FAttachmentTransformRules::KeepRelativeTransform);


DamageBox = CreateDefaultSubobject<UBoxComponent>(TEXT("Damage Box"));
DamageBox->AttachToComponent(MySphere, FAttachmentTransformRules::KeepRelativeTransform);
}

void APickableWeapon::BeginPlay()
{

}

UBoxComponent * APickableWeapon::GetDamageBox() const
{
  return DamageBox;
}
...