1. カメラをポーンにアタッチする

スプリング アームとカメラを作成する

Windows
MacOS
Linux
On this page

Unreal Engine 4 初心者の方は、最初に プログラミング クイック スタート ガイド tutorial をお読みください。このドキュメントでは、Unreal Engine のエディタでプロジェクトの作成、プロジェクトへの C++ コードの追加、コードのコンパイル、アクタ への コンポーネント の追加に慣れている方を対象として想定しています。

  1. まず「HowTo_PlayerCamera」という名前のスターター コンテンツを使用して、新しい Basic Code プロジェクトを作成します。まず、カスタムの Pawn クラスを作成します。このチュートリアルでは、新規 Pawn クラスに対して、PawnWithCamera という名前を使います。

    NamePawnClass.png

  2. Visual Studio で 「PawnWithCamera.h」 ファイルを開いて、以下のコードをクラス定義の下に追加します。

    protected:
        UPROPERTY(EditAnywhere)
        USpringArmComponent* OurCameraSpringArm;
        UCameraComponent* OurCamera;

    こうした変数を使って、端に CameraComponent をアタッチした SpringArmComponent を作成します。スプリングアームは、カメラ (または他のコンポーネント) をアタッチする単純な方法であり、ある程度の柔軟性を持って、滑らかな動きをすることができます。

  3. その後、コンストラクタで実際にコンポーネントを作成する必要があります。次のコードを APawnWithCamera::APawnWithCamera 内の PawnWithCamera.cpp に追加します。

    //Create our components (コンポーネントを作成)
    RootComponent = CreateDefaultSubobject<USceneComponent>(TEXT("RootComponent"));
    OurCameraSpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("CameraSpringArm"));
    OurCameraSpringArm->SetupAttachment(RootComponent);
    OurCameraSpringArm->SetRelativeLocationAndRotation(FVector(0.0f, 0.0f, 50.0f), FRotator(-60.0f, 0.0f, 0.0f));
    OurCameraSpringArm->TargetArmLength = 400.f;
    OurCameraSpringArm->bEnableCameraLag = true;
    OurCameraSpringArm->CameraLagSpeed = 3.0f;

    これで基本的な空の SceneComponent がコンポーネント階層のルートとして作成されます。次に、SpringArmComponent を作成してアタッチします。Spring Arm はデフォルトのピッチ、 -60 度 (すなわち 60 度下向き) およびルートから 50 ユニット上の位置になります。SpringArmComponent クラス特有の値もいくつか設定します。こうした値でその長さと動きの滑らかさを決めます。設定したら、CameraComponent を作成して、SpringArmComponent の終端のソケットにアタッチします。

    OurCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("GameCamera"));
    OurCamera->SetupAttachment(OurCameraSpringArm, USpringArmComponent::SocketName);
  4. 最後に、以下のコードを追加することで、デフォルトのローカル プレイヤーによって自動的にポーンがスポーン時に制御されるように設定することができます。

    //Take control of the default Player (デフォルトプレイヤーをコントロール)
    AutoPossessPlayer = EAutoReceiveInput::Player0;

これでカメラを快適に制御可能にするシンプルなポーンが用意できました。次に Unreal Engine エディタで入力を設定し、それに反応するコードを作成します。

作業中のコード

PawnWithCamera.h

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

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Pawn.h"
#include "PawnWithCamera.generated.h"

UCLASS()
class HOWTO_PLAYERCAMERA_API APawnWithCamera : public APawn
{
    GENERATED_BODY()

public:
    // Sets default values for this pawn's properties (このポーンのプロパティのデフォルト値を設定) 
    APawnWithCamera();

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

public:
    // Called every frame (フレーム毎に呼び出されます)
    virtual void Tick( float DeltaSeconds ) override;

    // Called to bind functionality to input (機能を入力にバインドするために呼び出されます)
    virtual void SetupPlayerInputComponent(class UInputComponent* InputComponent) override;

protected:
    UPROPERTY(EditAnywhere)
    USpringArmComponent* OurCameraSpringArm;
    UCameraComponent* OurCamera;
};

PawnWithCamera.cpp

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

#include "HowTo_PlayerCamera.h"
#include "PawnWithCamera.h"

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

    //Create our components (コンポーネントを作成)
    RootComponent = CreateDefaultSubobject<USceneComponent>(TEXT("RootComponent"));
    OurCameraSpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("CameraSpringArm"));
    OurCameraSpringArm->SetupAttachment(RootComponent);
    OurCameraSpringArm->SetRelativeLocationAndRotation(FVector(0.0f, 0.0f, 50.0f), FRotator(-60.0f, 0.0f, 0.0f));
    OurCameraSpringArm->TargetArmLength = 400.f;
    OurCameraSpringArm->bEnableCameraLag = true;
    OurCameraSpringArm->CameraLagSpeed = 3.0f;
    OurCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("GameCamera"));
    OurCamera->SetupAttachment(OurCameraSpringArm, USpringArmComponent::SocketName);

    //Take control of the default Player (デフォルトプレイヤーをコントロール)
    AutoPossessPlayer = EAutoReceiveInput::Player0;
}

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

}

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

}

// Called to bind functionality to input (機能を入力にバインドするために呼び出されます)
void APawnWithCamera::SetupPlayerInputComponent(class UInputComponent* InputComponent)
{
    Super::SetupPlayerInputComponent(InputComponent);

}
Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback