Language:
Page Info
Engine Version:
The translation of this page is out of date. Please see the English version for the latest version of the page.

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

アンリアルエンジン 4 初心者の方は、最初に プログラマ向けクイックスタート tutorial をお読みください。このドキュメントでは、アンリアル エンジン のエディタでプロジェクトの作成、プロジェクトへの 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;

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

作業中のコード

PawnWithCamera.h

// Copyright 1998-2017 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-2017 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);

}