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

在上一篇我们讨论了如何在editor上建立CameraActor,并在C++中找到该actor的instance。这篇将会反过来讨论怎么样在C++上进行客制化,并将调整完的CameraActor加入到world中。首先我们先建立我们自己的C++类别并继承自CameraActor:

记得要选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:

从上图中可以看到在我们的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中了。

转载自:http://dorgon.horizon-studio.net

Author: 90cg