Я хочу, чтобы при проигрывании анимации перезарядки, персонаж не мог стрелять. Но, как на зло, у меня появляется какая то странная ошибка, что если я ему запрещаю стрелять с помощью bool, то он у меня вообще перестаёт стрелять, то есть не попадает в блок с кодом с Нотифаем. Как решить? Вот код, где ИСПОЛЬЗУЕТСЯ нотифай:
weaponComponent:
h
UFUNCTION()
void OnClipingFinished(USkeletalMeshComponent* MeshComp);
UPROPERTY(EditDefaultsOnly, Category = "Weapon")
UAnimMontage* CurrentReloadAnimation = nullptr;
void InitAnim();
cpp:
void UWeaponComponent::InitAnim()
{
if (!CurrentReloadAnimation) return;
const auto& NotifyEvents = CurrentReloadAnimation->Notifies;
for (const FAnimNotifyEvent& NotifyEvent : NotifyEvents)
{
if (auto ClipingFinishNotify = Cast(NotifyEvent.Notify))
{
ClipingFinishNotify->OnNotified.AddUObject(this, &UWeaponComponent::OnClipingFinished);
break;
}
}
}
void UWeaponComponent::OnClipingFinished(USkeletalMeshComponent* MeshComp)
{
ACharacter* Character = Cast(GetOwner());
if (!Character || MeshComp != Character->GetMesh()) return;
IsClipingInProgress = false;
}
Notify:
h
#pragma once
#include "CoreMinimal.h"
#include "Animation/AnimNotifies/AnimNotify.h"
#include "ClipingAnimNotify.generated.h"
DECLARE_MULTICAST_DELEGATE_OneParam(FOnNotifiedSignature, USkeletalMeshComponent*)
UCLASS()
class MYPROJECT_API UClipingAnimNotify : public UAnimNotify
{
GENERATED_BODY()
public:
virtual void Notify(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation) override;
FOnNotifiedSignature OnNotified;
};
cpp
#include "Animations/ClipingAnimNotify.h"
void UClipingAnimNotify::Notify(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation)
{
OnNotified.Broadcast(MeshComp);
Super::Notify(MeshComp, Animation);
}
Точку остановы ставил в ClipingFinishNotify->OnNotified.AddUObject(this, &UWeaponComponent::OnClipingFinished) и при перезарядке Эдитор не закрывался
Вопрос задан
более года назад
104 просмотра