Я новичок в этом, но я почти уверен, что это вопрос кодирования. В настоящее время я следую учебному пособию по созданию игры-гладиатора в нереальном движке. (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;
}