2.7 - カメラビューの変更

FPS キャラクターのカメラビューの変更方法を学びます。

Windows
MacOS
Linux

前回の手順の最後で、デフォルトのカメラがメッシュのネックの内側に配置されました。このステップでは、カメラのプロパティ (位置やFOV (視野角) など) を調整するために使用可能な FPS カメラをセットアップします。

Camera コンポーネントをアタッチする

  1. Visual Studio に切り替えて、FPSCharacter.h を開き、以下のコードを追加します。

    // FPS camera (FPS カメラ)
    UPROPERTY(VisibleAnywhere)
    UCameraComponent* FPSCameraComponent;
  2. FPSCharacter.h は以下のようになります。

    // Fill out your copyright notice in the Description page of Project Settings. (Project Settings の Description ページに著作権情報を入力してください) 
    #pragma once
    
    #include "GameFramework/Character.h"
    #include "FPSCharacter.generated.h"
    
    UCLASS()
    class FPSPROJECT_API AFPSCharacter : public ACharacter
    {
        GENERATED_BODY()
    
    public:
    // Sets default values for this character's properties. (このキャラクターのプロパティのデフォルト値を設定) 
        AFPSCharacter();
    
    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* PlayerInputComponent) override;
    
        // Handles input for moving forward and backward. (前後方向の移動の入力を処理) 
        UFUNCTION()
        void MoveForward(float Value);
    
    // Handles input for moving right and left. (左右の移動の入力を処理)       UFUNCTION()
    void MoveRight(float Value);
    
        // Sets jump flag when key is pressed.
        UFUNCTION()
        void StartJump();
    
    // Clears jump flag when key is released (キー解放時のジャンプフラグをクリア)
        UFUNCTION()
        void StopJump();
    
    // FPS camera (FPS カメラ)
        UPROPERTY(VisibleAnywhere)
        UCameraComponent* FPSCameraComponent;
    };
  3. FPSCharacter.cpp を開いて次のコードをコンストラクタに追加します。

    // Create a first person camera component. (first person camera コンポーネントを作成)
    FPSCameraComponent = CreateDefaultSubobject<UCameraComponent>(TEXT("FirstPersonCamera"));
    // Attach the camera component to our capsule component. (camera コンポーネントを capsule コンポーネントにアタッチします)
    FPSCameraComponent->SetupAttachment(GetCapsuleComponent());

    前述のコードは、UCameraComponent を作成し、それをキャラクターの`CapsuleComponent` にアタッチします。

  4. 以下のコードをコンストラクタに記述したブロックの下に追加します。

    // Position the camera slightly above the eyes. (目の高さより少し上にカメラを設定)
    FPSCameraComponent->SetRelativeLocation(FVector(0.0f, 0.0f, 50.0f + BaseEyeHeight));
    // Allow the pawn to control camera rotation. (ポーンがカメラの回転を制御できるようにします)
    FPSCameraComponent->bUsePawnControlRotation = true;

    このコードは、カメラの位置をキャラクターの目の位置より少し高めに調整します。

  5. FPSCharacter.cpp は以下のようになります。

    // Fill out your copyright notice in the Description page of Project Settings. (Project Settings の Description ページに著作権情報を入力してください) 
    
    #include "FPSProject.h"
    #include "FPSCharacter.h"
    
    // Sets default values (デフォルト値を設定) 
    AFPSCharacter::AFPSCharacter()
    {
        // Set this character to call Tick() every frame. (このキャラクターがフレーム毎に Tick() を呼び出すように設定します) You can turn this off to improve performance if you don't need it. (必要がなければパフォーマンスを向上させるためにオフにすることができます) 
        PrimaryActorTick.bCanEverTick = true;
    
        // Create a first person camera component. (first person camera コンポーネントを作成)
        FPSCameraComponent = CreateDefaultSubobject<UCameraComponent>(TEXT("FirstPersonCamera"));
        // Attach the camera component to our capsule component. (camera コンポーネントを capsule コンポーネントにアタッチします)
        FPSCameraComponent->SetupAttachment(GetCapsuleComponent());
        // Position the camera slightly above the eyes. (目の高さより少し上にカメラを設定)
        FPSCameraComponent->SetRelativeLocation(FVector(0.0f, 0.0f, 50.0f + BaseEyeHeight));
        // Allow the pawn to control camera rotation. (ポーンがカメラの回転を制御できるようにします)
        FPSCameraComponent->bUsePawnControlRotation = true;
    }
    
    // Called when the game starts or when spawned (ゲーム開始時またはスポーン時に呼び出される)
    void AFPSCharacter::BeginPlay()
    {
        Super::BeginPlay();
    
        if (GEngine)
        {
            // Put up a debug message for five seconds. (デバッグ メッセージを 5 秒間表示) The -1 "Key" value (first argument) indicates that we will never need to update or refresh this message. ( -1 のキー値 (最初の引数) は、このメッセージを更新、リフレッシュする必要がないことを示しています) 
            GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TEXT("We are using FPSCharacter."));
        }
    }
    
    // Called every frame (フレームごとに呼び出される)
    
    void AFPSCharacter::Tick( float DeltaTime )
    {
        Super::Tick( DeltaTime );
    }
    
    // Called to bind functionality to input (機能と入力をバインドするために呼ばれます)
    
    void AFPSCharacter::SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent)
    {
        Super::SetupPlayerInputComponent(PlayerInputComponent);
    
    // Set up "movement" bindings. (移動のバインディングをセットアップ) 
        PlayerInputComponent->BindAxis("MoveForward", this, &AFPSCharacter::MoveForward);
        PlayerInputComponent->BindAxis("MoveRight", this, &AFPSCharacter::MoveRight);
    // Set up "look" bindings. (look のバインディングをセットアップ) 
        PlayerInputComponent->BindAxis("Turn", this, &AFPSCharacter::AddControllerYawInput);
        PlayerInputComponent->BindAxis("LookUp", this, &AFPSCharacter::AddControllerPitchInput);
    
    // Set up "action" bindings. (アクションのバインディングをセットアップ) 
        PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &AFPSCharacter::StartJump);
        PlayerInputComponent->BindAction("Jump", IE_Released, this, &AFPSCharacter::StopJump);
    }
    
    void AFPSCharacter::MoveForward(float Value)
    {
        // Find out which way is "forward" and record that the player wants to move that way. (前進方向を確認し、プレイヤーがそちらの方向に移動するように記録) 
        FVector Direction = FRotationMatrix(Controller->GetControlRotation()).GetScaledAxis(EAxis::X);
        AddMovementInput(Direction, Value);
    }
    
    void AFPSCharacter::MoveRight(float Value)
    {
        // Find out which way is "forward" and record that the player wants to move that way. (右方向を確認し、プレイヤーがそちらの方向に移動するように記録) 
        FVector Direction = FRotationMatrix(Controller->GetControlRotation()).GetScaledAxis(EAxis::Y);
        AddMovementInput(Direction, Value);
    }
    
    void AFPSCharacter::StartJump()
    {
        bPressedJump = true;
    }
    
    void AFPSCharacter::StopJump()
    {
        bPressedJump = false;
    }

新しいカメラをテストする

新たに実装したカメラのコードをコンパイルし、テストします。

  1. Visual Studio に FPSCharacter のヘッダ (*.h) と CPP (*.cpp) ファイルを保存します。

  2. [Solution Explorer (ソリューション エクスプローラ)][FPSProject] を探します。

  3. [FPSProject] 上で右クリックして [Build] を選択してプロジェクトをコンパイルします。

    BuildProject.png

  4. ビルドが終了したらアンリアル エディタで FPSProject を開きます。

  5. レベル エディタのツールバー で、[Play (プレイ)] ボタンをクリックします。

    NewCameraComponent.png

    これで、カメラはキャラクターの頭の少し上に位置するようになります。

  6. [PIE (Play In Editor)] モードを終了するには、レベル エディタで Escape キーを押すか、[Stop] ボタンをクリックします。

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