相机抖动未激活不真实的C++; 我试图用虚幻的C++来为我的角色设置一个相机抖动。
目前,我在头类中声明实例变量 使用日志输出,代码到达OnFire()函数中的正确位置,这意味着所有指针都不为null。但是相机抖动不起作用相机抖动未激活不真实的C++; 我试图用虚幻的C++来为我的角色设置一个相机抖动。,c++,unreal-engine4,C++,Unreal Engine4,目前,我在头类中声明实例变量 使用日志输出,代码到达OnFire()函数中的正确位置,这意味着所有指针都不为null。但是相机抖动不起作用 UPROPERTY(EditAnywhere) UCameraShake* CShake; //我是这样称呼它的 void AZombieCharacter::BeginPlay(){ SetUpCameraShake(); } ... void AZombieCharacter::OnFire() { ... auto CTRLR
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);
}
void AZombieCharacter::BeginPlay(){
SetUpCameraShake();
}
...
void AZombieCharacter::OnFire(){
...
auto-CTRLR=ugameplaystics::GetPlayerController(GetWorld(),0);
如果(CTRLR){
自动CM=CTRLR->PlayerCameraManager;
如果(厘米){
CM->PlayCameraShake(CShake->GetClass(),1.0f);
}
否则{
UE_日志(日志温度、警告、文本(“找不到CM”);
}
}
否则{
UE_日志(日志温度、警告、文本(“找不到CTRLR”);
}
}
...
void AZombieCharacter::SetUpCameraShake(){
CShake=UCameraShake::StaticClass()->GetDefaultObject();
CShake->振荡持续时间=4.f;
CShake->振荡blendTime=0.5f;
CShake->振荡blendotime=0.5f;
CShake->RotOscillation.Pitch.Amplium=FMath::RandRange(5.0f,10.0f);
CShake->rotsolation.Pitch.Frequency=FMath::RandRange(25.0f,35.0f);
CShake->RotOscillation.Yaw.Amplium=FMath::RandRange(5.0f,10.0f);
CShake->RotOscillation.Yaw.Frequency=FMath::RandRange(25.0f,35.0f);
}
谢谢。Play Camera Shake接受一个
UClass
/TSubClassOf
知道这会让我们认为该函数最终会构造一个新对象,并忽略默认对象选项
我建议对UCameraShake
类进行子类化,并使用tsubclasssof
来存储类类型,而不是像CShake
这样的指针。因为它可能是在你不知道的情况下收集的,谁知道呢
这是UCAMASASHAKE的C++教程。
没有播放抖动的原因可能是没有实际参数传递给抖动。仅默认值尽管您尝试设置默认值,但对于新创建的对象,它似乎没有将其考虑在内。感谢您的回复。我确实看过那个教程,但我正在尝试不创建一个全新的类,就像他们在教程中做的那样。有什么建议吗?正如ue4文档所说,您不应该使用此功能。返回的ptr是不可变的(您不能真正更改希望以这种方式更改的对象的值)。您必须创建自己的类来覆盖默认设置afaikUCameraShake const*const ShakeCDO=GetDefault(ShakeClass)在摄影机修改器类中以这种方式使用shake类这可能会给您一些提示