在上一篇我们讨论了如何在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