ue4中模式设定

来源:互联网 发布:office2016激活软件 编辑:程序博客网 时间:2024/05/16 19:15

1、以观察者的视角(Spectator)
那么在Word Setting中Default Pawn和Spectator两者要设置为同一个类

此模式中,摄像机组件是在这个Spectator中create并且控制,还可以绑定Input事件
class AMySpectator : public ASpectatorPawn
{
GENERATED_BODY()

public:
AMySpectator();
virtual ~AMySpectator();

// Begin ADefaultPawn interface 重写这几个方法
virtual void SetupPlayerInputComponent(class UInputComponent* InputComponent) override;
virtual void MoveForward(float Val) override;
virtual void MoveRight(float Val) override;
// End ADefaultPawn interface

实现部分

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
class MYSLATE_API AMyGameMode : public AGameMode
{
GENERATED_BODY()
public:
/**
* Handle new player, skips pawn spawning.
* @param NewPlayer
*/

virtual void RestartPlayer(AController* NewPlayer) override;
};

.cpp

void AMyGameMode::RestartPlayer(AController* NewPlayer)
{
AActor* const StartSpot = FindPlayerStart(NewPlayer);
if (StartSpot != nullptr)
{
// initialize and start it up
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 置空 
void AGameMode::RestartPlayer(AController* NewPlayer) 
NewPlayer->Possess(NewPlayer->GetPawn()); 
void APlayerController::ChangeState(FName NewState) 
void APlayerController::EndSpectatingState() 
void APlayerController::DestroySpectatorPawn() 
SetSpectatorPawn(NULL);



2、以第三人称或第一人称视角
摄像机是绑定在一个实体Character上,测试Spectator Class是无效的

UCLASS()
class AMyPlayerChar : public AMyChar
{
    GENERATED_BODY()

    /** Top down camera */
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true"))
    class UCameraComponent* TopDownCameraComponent;

    /** Camera boom positioning the camera above the character */
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true"))
   class USpringArmComponent* CameraBoom; 



3、c++接收不到绑定事件的原因
  • 在蓝图中由对应事件的实现,必须干掉,在c++才能接收到事件

0 0
原创粉丝点击