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

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

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

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

フィードバックを送信