3.ワールドに Camera Director を配置する

Camera Director をワールドに配置してカメラを割り当てる

Windows
MacOS
Linux
このページ中
  1. コードのコンパイルが終了すると、新規クラスのインスタンスを コンテンツブラウザ から レベル エディタ へドラッグできます。

    CameraDirectorInContentBrowser.png

  2. 次に CameraOne 変数と CameraTwo 変数を設定しなくてはいけません。ワールドアウトライナー で CameraDirector を検索して [Details (詳細)]パネル で編集します。

    CameraDirectorDetails.png

    ドロップダウンから [None (なし)] をクリックして、これらの変数を既に作成した CubeCameraActor に設定します。

    CameraDirectorDetails2.png

  3. [Play (再生)] を押すと、カメラがこのビューにスナップします。

    CameraOneView.png

    次に、このビューへスムーズにブレンドします。

    CameraTwoView.png

    スナップバックする前に数秒間待機します。

ゲームロジックに完全に基づいてプレイヤーのカメラを動かせるシステムが出来ました。このコードは、プレイヤーがカメラを直接操作しないゲームやカメラビュー間のブレンディングが役立つゲームなど、任意のゲームで使用できるように変更可能です。

完成コード

MyPawn.h

// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.

#pragma once

#include "GameFramework/Actor.h"
#include "CameraDirector.generated.h"

UCLASS()
class HOWTO_AUTOCAMERA_API ACameraDirector : public AActor
{
    GENERATED_BODY()

public:
    // Sets default values for this actor's properties (このアクタのプロパティのデフォルト値を設定)
    ACameraDirector();

protected:
    // Called when the game starts or when spawned (ゲーム開始時またはスポーン時に呼び出されます)
    virtual void BeginPlay() override;
public:
    // Called every frame (フレームごとに呼び出されます)
    virtual void Tick( float DeltaSeconds ) override;

    UPROPERTY(EditAnywhere)
    AActor* CameraOne;

    UPROPERTY(EditAnywhere)
    AActor* CameraTwo;

    float TimeToNextCameraChange;
};

MyPawn.cpp

// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.

#include "HowTo_AutoCamera.h"
#include "CameraDirector.h"
#include "Kismet/GameplayStatics.h"

// Sets default values (デフォルト値を設定) 
ACameraDirector::ACameraDirector()
{
    // Set this actor to call Tick() every frame. (フレーム毎に Tick() を呼び出すようにこのアクタを設定) You can turn this off to improve performance if you don't need it. (必要がなければパフォーマンスを向上させるためにオフにすることができます) 
    PrimaryActorTick.bCanEverTick = true;

}

// Called when the game starts or when spawned (ゲーム開始時またはスポーン時に呼び出されます)
void ACameraDirector::BeginPlay()
{
    Super::BeginPlay();

}

// Called every frame (フレームごとに呼び出されます)
void ACameraDirector::Tick( float DeltaTime )
{
    Super::Tick( DeltaTime );

    const float TimeBetweenCameraChanges = 2.0f;
    const float SmoothBlendTime = 0.75f;
    TimeToNextCameraChange -= DeltaTime;
    if (TimeToNextCameraChange <= 0.0f)
    {
        TimeToNextCameraChange += TimeBetweenCameraChanges;

    //Find the actor that handles control for the local player. (ローカル プレイヤーをコントロールするアクタを探します。) 
        APlayerController* OurPlayerController = UGameplayStatics::GetPlayerController(this, 0);
        if (OurPlayerController)
        {
            if (CameraTwo && (OurPlayerController->GetViewTarget() == CameraOne))
            {
                //Blend smoothly to camera two. (カメラ 2 へスムーズにブレンド) 
                OurPlayerController->SetViewTargetWithBlend(CameraTwo, SmoothBlendTime);
            }
            else if (CameraOne)
            {
                //Cut instantly to camera one.(カメラ 1 に瞬時に切り替え)
                OurPlayerController->SetViewTarget(CameraOne);
            }
        }
    }
}

新しい Unreal Engine 4 ドキュメントサイトへようこそ!

あなたの声を私たちに伝えるフィードバックシステムを含め、様々な新機能について開発をおこなっています。まだ広く使える状態にはなっていないので、準備ができるまでは、ドキュメントフィードバックフォーラムで、このページについて、もしくは遭遇した問題について教えていただけると助かります。

新しいシステムが稼働した際にお知らせします。

フィードバックを送信