Unreal Engine 4切換默認Camera實現

默認的,UE4,會以AGameMode中設置DefaultPawnClass對象中攝影機作爲默認攝影機。有時候我們想要一個全局的攝影機對場景進行觀察,這就需要重新創建一個攝影機,並在這兩個攝影機直接切換。下面看下如何實現。

在APlayerController類中,有一個SetViewTarget方法,參數是一個AActor指針,就是實現此功能的。因爲參數必須是AActor,即必須是AActor中包含的Camera組件纔有效,所有,先創建一個AActor對象。

FreeCameraActor.h

UCLASS()
class NANTOPDOWN_API AFreeCameraActor : public AActor
{
GENERATED_UCLASS_BODY()


public:
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera)
TSubobjectPtr<class UCameraComponent> TopDownCameraComponent;


UFUNCTION(BlueprintCallable, Category = "View Target")
void ChangeViewTarget();


virtual void BeginPlay() override;

private:
AActor* OldActor;
};


ChangeViewTarget()方法提供給Blueprint調用,用於在Character的Camera和FreeCamera之間切換。


FreeCameraActor.cpp


AFreeCameraActor::AFreeCameraActor(const class FPostConstructInitializeProperties& PCIP)
: Super(PCIP)
{
TopDownCameraComponent = PCIP.CreateDefaultSubobject<UCameraComponent>(this, TEXT("TopDownCamera"));
this->RootComponent = TopDownCameraComponent;
OldActor = NULL;
}


void AFreeCameraActor::ChangeViewTarget()
{
AActor* pActor = this->GetWorld()->GetFirstPlayerController()->GetViewTarget();
if (pActor != OldActor)
{
this->GetWorld()->GetFirstPlayerController()->SetViewTarget(OldActor);
}
else
{
this->GetWorld()->GetFirstPlayerController()->SetViewTarget(this);
}
}


void AFreeCameraActor::BeginPlay()
{
Super::BeginPlay();


OldActor = this->GetWorld()->GetFirstPlayerController()->GetViewTarget();


this->GetWorld()->GetFirstPlayerController()->SetViewTarget(this);
}


在Editor中創建一個從AFreeCameraActor繼承的Actor,並拖放到場景中去。可以看到一個包含了攝影機的對象。然後編輯Level Blueprint,加入腳本代碼



Play場景,按下1鍵,就能看到攝影機在character和剛纔新建的攝影機間進行切換了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章