C++ Game Project for Unreal Engine 4.8 part3:Create and Customized Camera Actor from C++ code

posted in: UnrealEngine | 0

在上一篇我們討論了如何在editor上建立CameraActor,並在C++中找到該actor的instance。這篇將會反過來討論怎麼樣在C++上進行客制化,並將調整完的CameraActor加入到world中。首先我們先建立我們自己的C++類別並繼承自CameraActor:

clip_image001

記得要選Show All Classes,不然會找不到。

在建完我們的MainCameraActor之後,我們必須對裡面的CameraComponent進行設定。

 

AMainCameraActor::AMainCameraActor(const FObjectInitializer& ObjectInitializer)
    : Super(ObjectInitializer)
{
    GetCameraComponent()->ProjectionMode = ECameraProjectionMode::Orthographic;
    GetCameraComponent()->OrthoWidth = 2048.0f;

}
 

跟上一篇不同的是,這裡我們將ProjectionMode調整成Orthographic,並將寬度設為2048。調完之後,我們就可以直接把C++ class拉進我們的editor中,並命名為MainCamera:

clip_image001[4]

從上圖中可以看到在我們的MainCamera的instance底下有一個CameraComponent。上面程式碼中的GetCameraComponent()取到的就是這個物件。在引擎中通常會把Actor中可以隨時抽換組合的功能寫成一個Component,可以很方便我們進行功能的復用及重組。在我們的CameraActor中,預設有一個CameraComponent,主要用來描述我們CameraActor的viewpoint以及各種cmera相關的設定,例:projection type、field of view……。Actor本身並不會有transform相關資訊( location、rotation,、scale),這些資訊是保存在RootComponent中。以下是ACameraActor的建構子內容:

 

ACameraActor::ACameraActor(const FObjectInitializer& ObjectInitializer)
    : Super(ObjectInitializer)
{
    // Setup camera defaults
    CameraComponent = CreateDefaultSubobject<UCameraComponent>(TEXT("CameraComponent"));
    CameraComponent->FieldOfView = 90.0f;
    CameraComponent->bConstrainAspectRatio = true;
    CameraComponent->AspectRatio = 1.777778f;
    CameraComponent->PostProcessBlendWeight = 1.0f;   // Make the camera component the root component
    RootComponent = CameraComponent;   // Initialize deprecated properties (needed for backwards compatibility due to delta serialization)
    FOVAngle_DEPRECATED = 90.0f;
    bConstrainAspectRatio_DEPRECATED = true;
    AspectRatio_DEPRECATED = 1.777778f;
    PostProcessBlendWeight_DEPRECATED = 1.0f;
    // End of deprecated property initialization   PrimaryActorTick.bCanEverTick = true;
}

從上面的code我們可以看到引擎預設建立了一個CameraComponent,並將這個Component設為RootComponent。另外後面有幾個xxxx_DEPRECATED的參數,其實也都是移進到Component中了。

Leave a Reply

Your email address will not be published. Required fields are marked *