1、以观察者的视角(Spectator)
那么在Word Setting中Default Pawn和Spectator两者要设置为同一个类
1 2 3 4 5 6 7 8 9 10 11 12 13 class AMySpectator : public ASpectatorPawn{ GENERATED_BODY () public : AMySpectator (); virtual ~AMySpectator (); virtual void SetupPlayerInputComponent (class UInputComponent* InputComponent) override ; virtual void MoveForward (float Val) override ; virtual void MoveRight (float Val) override ;
实现部分
1 2 3 4 5 6 7 8 9 10 11 void AMySpectator::SetupPlayerInputComponent (class UInputComponent* InputComponent) { Super::SetupPlayerInputComponent (InputComponent); check (InputComponent); InputComponent->BindAction ("ZoomOut" , IE_Pressed, this , &AMySpectator::OnMouseScrollUp); InputComponent->BindAction ("ZoomIn" , IE_Pressed, this , &AMySpectator::OnMouseScrollDown); InputComponent->BindAxis ("MoveForward" , this , &AMySpectator::MoveForward); InputComponent->BindAxis ("MoveRight" , this , &AMySpectator::MoveRight); }
*此处有坑
使用观察这模式下,必须 禁止 引擎去生成默认的 SpectatorPawn 。反之, 以第三人称 或 第一人称 则 不能禁止
通过重写 AGameMode的一个方法 .h
1 2 3 4 5 6 7 8 9 10 class MYSLATE_API AMyGameMode : public AGameMode{ GENERATED_BODY () public : virtual void RestartPlayer (AController* NewPlayer) override ; };
.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 void AMyGameMode::RestartPlayer (AController* NewPlayer) { AActor* const StartSpot = FindPlayerStart (NewPlayer); if (StartSpot != nullptr ) { InitStartSpot (StartSpot, NewPlayer); AMyPlayerCtrler* const NewPC = Cast<AMyPlayerCtrler>(NewPlayer); if (NewPC != nullptr ) { NewPC->SetInitialLocationAndRotation (StartSpot->GetActorLocation (), StartSpot->GetActorRotation ()); } } else { UE_LOG (GameLogger, Warning, TEXT ("Player start not found, failed to restart player" )); } }
RestartPlayer
SpectatorPawn
SetSpectatorPawn(NULL);
2、以第三人称或第一人称视角
摄像机是绑定在一个实体Character上,测试Spectator Class是无效的
1 2 3 4 5 6 7 8 9 10 11 UCLASS ()class AMyPlayerChar : public AMyChar{ GENERATED_BODY () UPROPERTY (VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true" )) class UCameraComponent * TopDownCameraComponent ; UPROPERTY (VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true" ))
class USpringArmComponent* CameraBoom;
3、c++接收不到绑定事件的原因
在蓝图中由对应事件的实现,必须干掉,在c++才能接收到事件