ue4中模式设定


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++才能接收到事件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蝶泳奈何桥.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值