相机抖动未激活虚幻C++

Camera Shake Not Activating Unreal C++

本文关键字:C++ 激活 抖动 相机      更新时间:2023-10-16

我正在尝试在虚幻C++中为我的角色设置摄像机抖动。

目前,我在标头类中声明实例变量。

使用日志输出,代码到达 OnFire(( 函数中的正确位置,这意味着没有指针为空。 但是相机抖动不起作用。

UPROPERTY(EditAnywhere)
UCameraShake* CShake;

这就是我怎么称呼它

void AZombieCharacter::BeginPlay(){
    SetUpCameraShake();
}

...
void AZombieCharacter::OnFire() {
...
    auto CTRLR = UGameplayStatics::GetPlayerController(GetWorld(), 0);
    if (CTRLR) {
        auto CM = CTRLR->PlayerCameraManager;
        if (CM) {
            CM->PlayCameraShake(CShake->GetClass(), 1.0f);
        }
        else {
            UE_LOG(LogTemp, Warning, TEXT("CANNOT FIND CM"));
        }
    }
    else {
        UE_LOG(LogTemp, Warning, TEXT("CANNOT FIND CTRLR"));
    }
}
...
void AZombieCharacter::SetUpCameraShake() {

    CShake = UCameraShake::StaticClass()->GetDefaultObject<UCameraShake>();
    CShake->OscillationDuration = 4.f;
    CShake->OscillationBlendInTime = 0.5f;
    CShake->OscillationBlendOutTime = 0.5f;
    CShake->RotOscillation.Pitch.Amplitude = FMath::RandRange(5.0f, 10.0f);
    CShake->RotOscillation.Pitch.Frequency = FMath::RandRange(25.0f, 35.0f);
    CShake->RotOscillation.Yaw.Amplitude = FMath::RandRange(5.0f, 10.0f);
    CShake->RotOscillation.Yaw.Frequency = FMath::RandRange(25.0f, 35.0f);
}

谢谢。

播放相机抖动 接受UClass/TSubClassOf<UCameraShake> 知道这会期望我们认为这个函数最终会构造一个新对象并忽略默认对象选项。

我建议对UCameraShake类进行子类化,并使用TSubClassOf来存储类类型,而不是像CShake那样存储指针。因为它可能是垃圾收集,而你不知道谁知道?

这是关于UCameraShake的C++教程。https://unrealcpp.com/camera-shake/

您的摇杆

没有播放的原因可能是没有将实际参数传递给摇杆。只有默认值 尽管您尝试设置默认值,但它似乎没有考虑到新创建的对象。