Character Movement (キャラクターの動き) を設定する

この操作ガイドでは、さまざまなフォームのキャラクターの動きを示すプレイ可能な キャラクターを作成します。

Windows
MacOS
Linux

Character Movement ではヒューマノイド キャラクターがワールドを移動するためのロコモーション システムを提供します。Character Movement コンポーネントActor コンポーネント です。歩行、落下、水泳、飛行など Character クラスの動作モードを提供します。さらに、Character Movement コンポーネントはネットワーク ゲームプレイ向けの堅固な統合機能を備えており、デベロッパーがネットワークでの動作をカスタムで作成できるフレームワークを提供します。

Unreal でのネットワーク レプリケーションに関するその他のドキュメントについては、「Networking (ネットワーキング)」および「Actor Replication (アクタ レプリケーション)」を参照してください。

この操作ガイドでは、Character クラスを作成し、その動きのロジックである Input をスクリプトで作成して、キャラクターがどのステートにあるかを判断し、対応するアニメーションを再生するアニメーション ブループリントを作成します。

Character movement in action

実装方法を選んでください。

Blueprints

C++

新規プロジェクトを作成する

  1. まず、 Epic Games Launcher にサインインして、 [New (新規)] > [Games (ゲーム)] > [Blank] > [Project (プロジェクト)] の順に選択して、 CharacterMovement という名前のプロジェクトを作成します。

    Create new Blueprint project

  2. キャラクターをアニメートするには、 Epic Games マーケットプレイス から無料でダウンロードできる Animation Starter Pack が必要です。[Free (無料)] ボタンをクリックして、Animation Starter Pack をダウンロードして、 Epic Games Library に追加します。[Free (無料)] ボタンをクリックして、アニメーション スターター パックを Epic Games ライブラリ に追加します。

    Get Animation Starter Pack

  3. ライブラリ から アニメーション スターター パック を検索して [Add to Project] をクリックします。次に [Select the Project to Add the Asset to] メニューから「CharacterMovement」ファイルを見つけて選択したら [Add to Project] をクリックします。

    Add Animation Starter Pack to project

  4. プロジェクトに Animation Starter Pack を追加すると、 コンテンツ ブラウザ で表示されていることがわかります。

    Animation Started Pack in the Content Browser

  1. まず [New (新規)] > [Games (ゲーム)] > [Blank (ブランク)] > [C++] の順に選択して、「CameraComponents」という名前のプロジェクトを作成します。

    New C++ project

  2. キャラクターをアニメートするには、Epic Games Marketplace から無料でダウンロードできる アニメーション スターター パック が必要です。[Free (無料)] ボタンをクリックして、アニメーション スターター パックを Epic Games ライブラリ に追加します。

    Get Animation Starter Pack

  3. ライブラリ から アニメーション スターター パック を検索して [Add to Project] をクリックします。次に [Select the Project to Add the Asset to] メニューから「CharacterMovement」ファイルを見つけて選択したら [Add to Project] をクリックします。

    Add Animation Starter Pack to project

  4. アニメーション スターター パックをプロジェクトに追加すると、コンテンツ ブラウザ に表示されるようになります。

    Animation Started Pack in the Content Browser

プレイヤー キャラクターを作成する

プレイヤーをコントロールするためには Character クラスが必要です。キャラクターは、ヒューマノイド キャラクターが自分のワールドを横断できるようにする移動システムを提供するための Character Movement コンポーネントを備えたポーンです。以下の手順に従って、キャラクターを設定します。

  1. [Add/Import (追加/インポート)] ボタンをクリックして新規ブループリントの Character クラスを「BP_PlayerCharacter」という名前で作成します。

    Add new Blueprint Character class

  2. Bp_PlayerCharacter をダブルクリックして [Class Defaults (クラスのデフォルト)] を開き、 [Components (コンポーネント)] タブで Mesh (CharacterMesh0) Skeletal Mesh コンポーネント を選択して、 [Details (詳細)] パネルに移動します。

    拡大表示するには、画像をクリック。

  3. Mesh カテゴリで Skeletal Mesh variable の横のドロップダウン矢印を選択して、ドロップダウン メニューから SK_Mannequin を選択します。

    Select Skeletal Mesh

  4. [Details (詳細)] パネルから [Transform (トランスフォーム)] カテゴリに移動して、メッシュの LocationRotation を「0」、「0」、「-90」 に設定します。

    Transform settings

  5. キャラクターの スケルタルメッシュ が以下の画像のように前を指している 矢印コンポーネント の方向を向いて表示されます。

    Skeletal Mesh orientation

  6. [Components (コンポーネント)] タブ に移動して Mesh コンポーネントを選択し、 [Add Component (コンポーネントを追加)] をクリックして、ドロップダウン メニューで SpringArm を検索して選択し、 Spring Arm コンポーネント の名前を「SpringArmComp」にします。

    Add Spring Arm Component

  7. [Details (詳細)] パネルの [Camera Settings (カメラの設定)] カテゴリで Use Pawn Control Rotation をオンにします。

    Camera settings

    Use Pawn Control Rotation をオンにすると、カメラがスプリング アームを基準に回転します。

  8. [Camera (カメラ)] カテゴリ で、 Socket Offset を「0」、「0」、「30」に設定し、 [Transform (トランスフォーム)] カテゴリ に移動して、 SpringArmComp の Location を「0」、「0」、「50」に設定します。

    Spring Arm Component settings

  9. SpringArmComp を選択した状態で、 [Add Component (コンポーネントを追加)] ボタンをクリックして、ドロップダウン メニューで [Camera (カメラ)] を検索して選択し、 CameraComp という名前の Camera コンポーネントを追加します。

    Add Camera Component

  10. [Components (コンポーネント)] タブで、 Character Movement コンポーネント を選択して、 [Details (詳細)] パネル に移動し、 [Character Movement(Rotation Settings) (キャラクターの動き(回転設定)] カテゴリで、 Use Controller Desired Rotation および Orient Rotation To Movement をオンにします。

    Character Movement Rotation settings

  11. Character Movement:Walking カテゴリで、 Ignore Base Rotation 変数をオンにします。

    Enable Ignore Base Rotation

    Ignore Base Rotation をオンに設定すると、キャラクターは現在のワールドの回転を維持し、自分が立っているベースの回転の変化を無視します。

  12. [Character Movement Nav Movement] カテゴリの Movement Capabilities で、ドロップダウン メニューを選択して、追加の変数設定を表示し、ブール型 Can Crouch に移動して、このチェックボックスをオンにします。

    Enable Can Crouch Boolean

  13. コンパイル して 保存 します。

    Compile and Save buttons

プレイヤーをコントロールするためには Character クラスが必要です。キャラクターは、ヒューマノイド キャラクターが自分のワールドを横断できるようにする移動システムを提供するための Character Movement コンポーネントを備えたポーンです。以下の手順に従って、キャラクターを設定します。

  1. [C++ Class Wizard (C++ クラス ウィザード)] で、新規 Character クラスを「PlayerCharacter」という名前で作成してから、「CameraCharactor.h」ファイルに移動して、次のクラス定義を宣言します。

    protected:
    
    //Spring Arm Component to follow the camera behind the player
    UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
    class USpringArmComponent* SpringArmComp;
    
    //Player follow camera
    UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
    class UCameraComponent* CameraComp; 
  2. PlayerCharactor.cpp」ファイルに移動して、次のクラス ライブラリを追加します。

    #include "Camera/CameraComponent.h"
    #include "GameFramework/SpringArmComponent.h"
    #include "GameFramework/CharacterMovementComponent.h"
  3. APlayerCharactor::APlayerCharacter コンストラクタ メソッドで、次のコードを宣言します。

    // Instantiating your class Components
    
    SpringArmComp = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArmComp"));
    
    CameraComp = CreateDefaultSubobject<UCameraComponent>(TEXT("CameraComp"));
    
    //Set the location and rotation of the Character Mesh Transform
    
    GetMesh()->SetRelativeLocationAndRotation(FVector(0.0f, 0.0f, -90.0f), FQuat(FRotator(0.0f, -90.0f, 0.0f)));
    
    // Attaching your class Components to the default character's Skeletal Mesh Component.
    
    SpringArmComp->SetupAttachment(GetMesh());
    
    CameraComp->SetupAttachment(SpringArmComp,USpringArmComponent::SocketName);
    
    //Setting class variables of the spring arm
    
    SpringArmComp->bUsePawnControlRotation = true;
    
    //Setting class variables of the Character movement component
    
    GetCharacterMovement()->bOrientRotationToMovement = true;
    
    GetCharacterMovement()->bUseControllerDesiredRotation = true;
    
    GetCharacterMovement()->bIgnoreBaseRotation = true;
  4. コードを コンパイル します。

  5. エディタC++ Classes フォルダ へ移動して、PlayerCharacter クラスをクリックし、C++ Class Actions ドロップダウン メニューで [Create Blueprint class based on PlayerCharacter] を選択します。ブループリントに「Bp_PlayerCharacter」と名前を付けます。

    拡大表示するには、画像をクリック。

  6. BP_PlayerCharacter をダブルクリックすると class defaults が開きます。[Components] タブで Mesh(CharacterMesh0) Skeletal Mesh コンポーネント を選択して [Details] パネルを開きます。

    拡大表示するには、画像をクリック。

  7. Mesh カテゴリで Skeletal Mesh variable の横のドロップダウン矢印を選択して、ドロップダウン メニューから SK_Mannequin を選択します。

    Select Skeletal Mesh

  8. キャラクターの スケルタルメッシュ が以下の画像のように前を指している 矢印コンポーネント の方向を向いて表示されます。

    Skeletal Mesh orientation

  9. コンパイル して 保存 します。

    Compile and Save buttons

Input Key マッピングと Input Movement イベントを作成する

W、A、S、D などの入力キーが押されたときにキャラクターを動かすカスタム ロジックを設定する必要があります。

  1. [Edit (編集)] > [Project Settings (プロジェクト設定)] > [Input (インプット)] に移動してから、 [Bindings (バインディング)] カテゴリで [Action Mappings (アクション マッピング)] の隣にある + マークをクリックして次を追加します。

    アクション マッピング

    キー値

    Jump

    Space Bar

    Crouch

    Left Ctrl

    Sprint

    Left Shift

    Movement Action Mappings

  2. [Bindings (バインディング)] カテゴリで [Axis Mappings] の隣にある [+] マークをクリックし、以下の 軸マッピング を追加します。

    軸マッピング

    キー値

    スケール

    MoveForward

    W

    1.0

    S

    -1.0

    MoveRight

    D

    1.0

    A

    -1.0

    Turn

    Mouse X

    1.0

    LookUp

    Mouse Y

    -1.0

    Input Action Mappings

  3. コンテンツ ブラウザBp_PlayerCharacter をダブルクリックして [Class Defaults (クラスのデフォルト)] を開き、 [Event Graph] を右クリックして、ドロップダウン メニューで、 MoveForward を検索して選択します。

    拡大表示するには、画像をクリック。

  4. InputAxis MoveForward ノードの 実行ピン を引き出して、ドロップダウン メニュー から Add Movement Input ノードを検索して選択します。次に InputAxis MoveForward ノードの Axis Value ピンを引き出して、 Add Movement Input ノードの Scale Value ピンに接続します。

    拡大表示するには、画像をクリック。

  5. [Event Graph] で右クリックして、コンテキスト メニューで Get Control Rotation を検索して選択します。次に ローテータ型の Return Value ピンを引き出して、ドロップダウン メニューで Break Rotator を検索して選択します。

    拡大表示するには、画像をクリック。

  1. Break Rotator ノードの Z(Yaw) ピンを引き出して、ドロップダウン メニューで Make Rotator を検索して選択します。次に Make Rotator ノードの Rotator の Return Value ピンを引き出して、ドロップダウン メニューで Get Forward Vector を検索して選択します。

    拡大表示するには、画像をクリック。

  2. Get Forward Vector ノードの Vector の Return Value ピンを引き出して、 Add Movement Input ノードの World Direction ピンに接続します。

    拡大表示するには、画像をクリック。

  3. もう一度グラフで右クリックして Input Axis Event として Move Right を検索し、選択します。

    拡大表示するには、画像をクリック。

  4. InputAxis MoveRight ノードの 実行ピン を引き出して、ドロップダウン メニュー から Add Movement Input ノードを検索して選択します。次に InputAxis MoveRight ノードの Axis Value ピンを引き出して、 Add Movement Input ノードの Scale Value ピンに接続します。

    拡大表示するには、画像をクリック。

  5. Make Rotator ノードの Rotator の Return Value ピンを引き出して、ドロップダウン メニューで Get Right Vector ノードを検索し、選択します。次に Vector の Return Value ピンを引き出して Add Movement Input ノードの World Direction ピンに接続します。

    拡大表示するには、画像をクリック。

  6. 完成した Movement Input Events ブループリントのグラフは以下の画像のようになります。

    拡大表示するには、画像をクリック。

  7. [Event Graph]右クリック して InputAxis LookUp イベント ノードを検索し、選択します。次に右クリックして Add Controller Pitch Input ノードを検索して選択します。

    拡大表示するには、画像をクリック。

  8. Input Axis LookUp ノードから Axis Value ピンを引き出して、 Add Controller Pitch Input ノードの Val ピンに接続します。Input Axis LookUp ノードの 実行出力ピン を引き出して、 Add Controller Pitch Input ノードの 実行入力ピン に接続します。

    拡大表示するには、画像をクリック。

  9. [Event Graph] で右クリックして Input Axis Turn イベント ノードを検索して選択します。次に右クリックして Add Controller YawInput ノードを検索して選択します。

    拡大表示するには、画像をクリック。

  10. Input Axis Turn ノードの Axis Value ピンを引き出して、 Add Controller Yaw Input ノードの Val ピンに接続します。Input Axis Turn ノードの 実行出力ピン を引き出して、 Add Controller Yaw Input ノードの 実行入力ピン に接続します。

    拡大表示するには、画像をクリック。

  11. [Compile][Save] を順にクリックします。

    Compile and Save buttons

作成中のブループリント

この時点では、ブループリント グラフは以下の画像のようになります。

拡大表示するには、画像をクリック。

W、A、S、D などの入力キーが押されたときにキャラクターを移動するカスタム ロジックを設定する必要があります。

  1. [Edit] > [Project Settings] > [ Input] に移動してから、 [Bindings (バインディング)] カテゴリで [Action Mappings] の隣にある [+] マークをクリックし、以下の アクション マッピング を追加します。

    アクション マッピング

    キー値

    Jump

    Space Bar

    Crouch

    Left Ctrl

    Sprint

    Left Shift

    Movement Action Mappings

  2. [Bindings (バインディング)] カテゴリで [Axis Mappings] の隣にある [+] マークをクリックし、以下の 軸マッピング を追加します。

    軸マッピング

    キー値

    スケール

    MoveForward

    W

    1.0

    S

    -1.0

    MoveRight

    D

    1.0

    A

    -1.0

    Turn

    Mouse X

    1.0

    LookUp

    Mouse Y

    -1.0

    Input Action Mappings

  3. PlayerCharacter.h で以下のクラス メソッドを宣言します。

    protected:
    
    //Called for forwards/backward input
    
    void MoveForward(float InputAxis);
    
    //called for left/right side input
    
    void MoveRight(float InputAxis);
  4. PlayerCharacter.Cpp で APlayerCharacter::MoveForwardAPlayerCharacter::MoveRight クラス メソッドに以下のロジックを実行します。

    void APlayerCharacter::MoveForward(float AxisValue)
    {
        if ((Controller != nullptr) && (AxisValue != 0.0f))
        {
            // Find out which way is forward
            const FRotator Rotation = Controller->GetControlRotation();
            const FRotator YawRotation(0, Rotation.Yaw, 0);
    
            // Get forward vector
            const FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X);
            AddMovementInput(Direction, AxisValue);
        }
    }
    
    void APlayerCharacter::MoveRight(float AxisValue)
    {
        if ((Controller != nullptr) && (AxisValue != 0.0f))
        {
            // Find out which way is right
            const FRotator Rotation = Controller->GetControlRotation();
            const FRotator YawRotation(0, Rotation.Yaw, 0);
    
            // Get right vector 
            const FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y);
    
            // Add movement in that direction
            AddMovementInput(Direction, AxisValue);
        }
    }
  5. 次に APlayerCharacter::SetupPlayerInputComponent メソッドに移動して、以下のコードを実装します。

    //Called to bind functionality to input
    void APlayerCharacter::SetupPlayerInputComponent(UInputComponent*)
    {
        Super::SetupPlayerInputComponent(PlayerInputComponent);
    
        PlayerInputComponent->BindAxis("MoveForward", this, &APlayerCharacter::MoveForward);
        PlayerInputComponent->BindAxis("MoveRight", this, &APlayerCharacter::MoveRight);
        PlayerInputComponent->BindAxis("Turn", this, &APawn::AddControllerYawInput);
        PlayerInputComponent->BindAxis("LookUp", this, &APawn::AddControllerPitchInput);
    
    }
  6. コードを コンパイル します。

Work-In-Progress Code

PlayerCharacter.h

    #include "CoreMinimal.h"
    #include "GameFramework/Character.h"
    #include "PlayerCharacter.generated.h"

    UCLASS()
    class CHARACTERMOVEMENT_API APlayerCharacter : public ACharacter
    {
        GENERATED_BODY()

    public:
        // Sets default values for this character's properties
        APlayerCharacter();

    protected:
        // Called when the game starts or when spawned
        virtual void BeginPlay() override;

        //Spring Arm Component to follow the camera behind the player
        UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
        class USpringArmComponent* SpringArmComp;

        //Player follow camera
        UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
        class UCameraComponent* CameraComp; 

        //Called for forwards/backward input
        void MoveForward(float InputAxis);

        //called for left/right side input
        void MoveRight(float InputAxis);

    public: 
        // Called every frame
        virtual void Tick(float DeltaTime) override;

        // Called to bind functionality to input
        virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
    };

PlayerCharacter.Cpp

    #include "PlayerCharacter.h"
    #include "Camera/CameraComponent.h"
    #include "GameFramework/SpringArmComponent.h"
    #include "GameFramework/CharacterMovementComponent.h"

    // Sets default values
    APlayerCharacter::APlayerCharacter()
    {
        // Set this character to call Tick() every frame.You can turn this off to improve performance if you don't need it.
        PrimaryActorTick.bCanEverTick = true;

        // Instantiating your class Components
        SpringArmComp = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArmComp"));
        CameraComp = CreateDefaultSubobject<UCameraComponent>(TEXT("CameraComp"));

        //Set the location and rotation of the Character Mesh Transform
        GetMesh()->SetRelativeLocationAndRotation(FVector(0.0f, 0.0f, -90.0f), FQuat(FRotator(0.0f, -90.0f, 0.0f)));

        // Attaching your class Components to the default character's Skeletal Mesh Component.
        SpringArmComp->SetupAttachment(GetMesh());
        CameraComp->SetupAttachment(SpringArmComp,USpringArmComponent::SocketName);

        //Setting class variables of the spring arm
        SpringArmComp->bUsePawnControlRotation = true;

        //Setting class variables of the Character movement component
        GetCharacterMovement()->bOrientRotationToMovement = true;
        GetCharacterMovement()->bUseControllerDesiredRotation = true;
        GetCharacterMovement()->bIgnoreBaseRotation = true;

    }

    // Called when the game starts or when spawned
    void APlayerCharacter::BeginPlay()

    {
        Super::BeginPlay();

    }

    void APlayerCharacter::MoveForward(float AxisValue)

    {
        if ((Controller != nullptr) && (AxisValue != 0.0f))
        {
            // Find out which way is forward
            const FRotator Rotation = Controller->GetControlRotation();
            const FRotator YawRotation(0, Rotation.Yaw, 0);

            // Get forward vector
            const FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X);
            AddMovementInput(Direction, AxisValue);
        }
    }

    void APlayerCharacter::MoveRight(float AxisValue)
    {
        if ((Controller != nullptr) && (AxisValue != 0.0f))
        {
            // Find out which way is right
            const FRotator Rotation = Controller->GetControlRotation();
            const FRotator YawRotation(0, Rotation.Yaw, 0);

            // Get right vector 
            const FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y);

            // Add movement in that direction
            AddMovementInput(Direction, AxisValue);
        }
    }

    // Called every frame
    void APlayerCharacter::Tick(float DeltaTime)
    {
        Super::Tick(DeltaTime);

    }

    // Called to bind functionality to input
    void APlayerCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
    {
        Super::SetupPlayerInputComponent(PlayerInputComponent);
        PlayerInputComponent->BindAxis("MoveForward",this, &APlayerCharacter::MoveForward);
        PlayerInputComponent->BindAxis("MoveRight", this, &APlayerCharacter::MoveRight);
        PlayerInputComponent->BindAxis("Turn", this, &APawn::AddControllerYawInput);
        PlayerInputComponent->BindAxis("LookUp", this, &APawn::AddControllerPitchInput);
    }

Input Key マッピングと Input Action イベントを作成する

これで入力イベント Move Forward、Move Right、Look Up、および Turn のブループリント スクリプト ロジックが完成したので、今度は入力イベント Jump、Crouch、Sprint のアクション マッピングの実装を完成させる必要があります。

  1. [Event Graph] を右クリックして、 All Actions for this Blueprint ドロップダウン メニューで、 Jump Action Event を検索して選択します。

    拡大表示するには、画像をクリック。

  2. InputAction Jump ノードの Pressed 実行ピン を引き出して、ドロップダウン メニューで Character 関数 Jump を検索して選択します。

    Add Jump Character function

  3. InputAction Jump ノードの 実行ピンJump ノードの 実行ピン に接続します。

    拡大表示するには、画像をクリック。

  4. InputAction Jump ノードの Released 実行ピン を引き出して、ドロップダウン メニューで Character 関数 Stop Jumping を検索して選択します。

    拡大表示するには、画像をクリック。

  5. [Event Graph] を右クリックして、ドロップダウン メニューで、 Input Action Sprint を検索して選択します。

    Add Input Action Sprint

  6. [Components (コンポーネント)] タブに移動して、 Character Movement コンポーネント をクリックして、 イベント グラフ にドラッグします。

    拡大表示するには、画像をクリック。

  7. Character Movement ピン を引き出して、ドロップダウン メニューで Set Max Walk Speed を検索して選択します。Max Walk Speed の float 値 を「1000」に設定して、 InputAction Sprint ノードの Pressed 実行ピンSet Max Walk Speed入力実行 ピンに接続します。

    拡大表示するには、画像をクリック。

  8. Character Movement ピン を引き出して、もう 1 つの Set Max Walk Speed ノードを検索して選択します。Max Walk Speed の float 値 を「600」に設定して、 InputAction Sprint ノードの Released 実行ピンSet Max Walk Speed の実行入力ピン に接続します。

    拡大表示するには、画像をクリック。

  9. [Event Graph] を右クリックして、ドロップダウン メニューで、 Input Action Crouch を検索して選択します。

    Add Input Action Crouch

  10. InputAction Crouch ノードの Pressed 実行ピン を引き出して、ドロップダウン メニューで Character クラス関数 Crouch を検索して選択します。

    拡大表示するには、画像をクリック。

  11. InputAction Crouch ノードの Released 実行ピン を引き出して、Actions ドロップダウン メニューで Character クラス関数 Un Crouch を検索して選択します。

    拡大表示するには、画像をクリック。

  12. ブループリントを コンパイル して 保存 します。

    Compile and Save buttons

完成したブループリント

完成したブループリントは以下の画像のようになります。

拡大表示するには、画像をクリック。

Move ForwardMove RightLook UpTurn の入力イベントに対するコード スクリプト ロジックが完了しました。次に JumpCrouchSprint に対する入力イベントの実装を完了する必要があります。

  1. PlayerCharacter.h ファイルに移動して以下のクラス メソッドを宣言します。

    protected:
    
        //Sets Character Movement Speed to Sprint values.
        void BeginSprint();
    
        //Sets Character Movement Speed back to default speed values.
        void EndSprint();
    
        //Request for Character to Crouch
        void BeginCrouch();
    
        //Request for Character to EndCrouch
        void EndCrouch();
  2. PlayerCharacter.cpp ファイルで**APlayerCharacter::BeginSprint and APlayerCharacter::EndSprint** クラス メソッドに対して次のロジックを実装します。

    void APlayerCharacter::BeginSprint()
    {
        GetCharacterMovementComponent()->MaxWalkSpeed = 1000.0f;    
    }
    
    void APlayerCharacter::EndSprint()
    {
        GetCharacterMovementComponent()->MaxWalkSpeed = 600.f;
    }
  3. APlayerCharacter::BeginCrouch メソッドと APlayerCharacter::EndCrouch メソッドに以下のロジックを実装します。

    void APlayerCharacter::BeginCrouch()
    {
        Crouch();
    }
    
    void APlayerCharacter::EndCrouch()
    {
        UnCrouch();
    }
  4. APlayerCharacter:: ::SetupPlayerInputComponent メソッドに移動して以下のコードを宣言します。

    void APlayerCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
    {
    
        PlayerInputComponent->BindAction("Jump",IE_Pressed,this,&ACharacter::Jump);
        PlayerInputComponent->BindAction("Jump",IE_Released,this,&ACharacter::StopJumping);
        PlayerInputComponent->BindAction("Crouch",IE_Pressed,this,&APlayerCharacter::BeginCrouch);
        PlayerInputComponent->BindAction("Crouch",IE_Released,this,&APlayerCharacter::EndCrouch);
        PlayerInputComponent->BindAction("Sprint",IE_Pressed,this,&APlayerCharacter::BeginSprint);
        PlayerInputComponent->BindAction("Sprint",IE_Released,this,&APlayerCharacter::EndSprint);
    
    }
  5. コードを コンパイル します。

完成コード

PlayerCharacter.h

    #pragma once

    #include "CoreMinimal.h"
    #include "GameFramework/Character.h"
    #include "PlayerCharacter.generated.h"

    UCLASS()
    class CHARACTERMOVEMENT_API APlayerCharacter : public ACharacter
    {
        GENERATED_BODY()

    public:
        // Sets default values for this character's properties
        APlayerCharacter();

    protected:
        // Called when the game starts or when spawned
        virtual void BeginPlay() override;

        //Spring Arm Component to follow the camera behind the player
        UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
        class USpringArmComponent* SpringArmComp;

        //Player follow camera
        UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
        class UCameraComponent* CameraComp; 

        //Called for forwards/backward input
        void MoveForward(float InputAxis);

        //Called for left/right side input
        void MoveRight(float InputAxis);

        //Sets Character Movement Speed to Sprint values.
        void BeginSprint();

        //Sets Character Movement Speed back to default speed values.
        void EndSprint();

        //Request for Character to Crouch
        void BeginCrouch();

        //Request for Character to EndCrouch
        void EndCrouch();

    public: 

        // Called every frame
        virtual void Tick(float DeltaTime) override;

        // Called to bind functionality to input
        virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;

    };

PlayerCharacter.cpp

    #include "PlayerCharacter.h"
    #include "Camera/CameraComponent.h"
    #include "GameFramework/SpringArmComponent.h"
    #include "GameFramework/CharacterMovementComponent.h"

    // Sets default values
    APlayerCharacter::APlayerCharacter()
    {
        // Set this character to call Tick() every frame.You can turn this off to improve performance if you don't need it.
        PrimaryActorTick.bCanEverTick = true;

        // Instantiating your class Components
        SpringArmComp = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArmComp"));
        CameraComp = CreateDefaultSubobject<UCameraComponent>(TEXT("CameraComp"));

        //Set the location and rotation of the Character Mesh Transform
        GetMesh()->SetRelativeLocationAndRotation(FVector(0.0f, 0.0f, -90.0f), FQuat(FRotator(0.0f, -90.0f, 0.0f)));

        // Attaching your class Components to the default character's Skeletal Mesh Component.
        SpringArmComp->SetupAttachment(GetMesh());
        CameraComp->SetupAttachment(SpringArmComp,USpringArmComponent::SocketName);

        //Setting class variables of the spring arm
        SpringArmComp->bUsePawnControlRotation = true;

        //Setting class variables of the Character movement component
        GetCharacterMovement()->bOrientRotationToMovement = true;
        GetCharacterMovement()->bUseControllerDesiredRotation = true;
        GetCharacterMovement()->bIgnoreBaseRotation = true;
    }

    // Called when the game starts or when spawned
    void APlayerCharacter::BeginPlay()
    {
        Super::BeginPlay();

    }

    void APlayerCharacter::MoveForward(float AxisValue)
    {
        if ((Controller != nullptr) && (AxisValue != 0.0f))
        {
            // Find out which way is forward
            const FRotator Rotation = Controller->GetControlRotation();
            const FRotator YawRotation(0, Rotation.Yaw, 0);

            // Get forward vector
            const FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X);
            AddMovementInput(Direction, AxisValue);
        }
    }

    void APlayerCharacter::MoveRight(float AxisValue)
    {
        if ((Controller != nullptr) && (AxisValue != 0.0f))
        {
            // Find out which way is right
            const FRotator Rotation = Controller->GetControlRotation();
            const FRotator YawRotation(0, Rotation.Yaw, 0);

            // Get right vector 
            const FVector Direction = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y);

            // Add movement in that direction
            AddMovementInput(Direction, AxisValue);
        }
    }

    void APlayerCharacter::BeginSprint()
    {
    GetCharacterMovementComponent()->MaxWalkSpeed = 1000.0f;
    }

    void APlayerCharacter::EndSprint()
    {
        GetCharacterMovementComponent()->MaxWalkSpeed = 600.f;
    }

    void APlayerCharacter::BeginCrouch()
    {
        Crouch();
    }

    void APlayerCharacter::EndCrouch()
    {
        UnCrouch();
    }

    // Called every frame
    void APlayerCharacter::Tick(float DeltaTime)
    {
        Super::Tick(DeltaTime);
    }

    // Called to bind functionality to input
    void APlayerCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
    {
        Super::SetupPlayerInputComponent(PlayerInputComponent);
        PlayerInputComponent->BindAxis("MoveForward",this, &APlayerCharacter::MoveForward);
        PlayerInputComponent->BindAxis("MoveRight", this, &APlayerCharacter::MoveRight);
        PlayerInputComponent->BindAxis("Turn", this, &APawn::AddControllerYawInput);
        PlayerInputComponent->BindAxis("LookUp", this, &APawn::AddControllerPitchInput);
        PlayerInputComponent->BindAction("Jump",IE_Pressed,this, &ACharacter::Jump);
        PlayerInputComponent->BindAction("Jump",IE_Released,this, &ACharacter::StopJumping);
        PlayerInputComponent->BindAction("Crouch",IE_Pressed,this,&APlayerCharacter::BeginCrouch);
        PlayerInputComponent->BindAction("Crouch",IE_Released,this,&APlayerCharacter::EndCrouch);
        PlayerInputComponent->BindAction("Sprint",IE_Pressed,this, &APlayerCharacter::BeginSprint);
        PlayerInputComponent->BindAction("Sprint",IE_Released,this, &APlayerCharacter::EndSprint);
    }

Game Mode を設定する

GameMode はゲームのルールを一通り定義します。これらのルールには、ゲームの起動時にプレイヤーがスポーンするデフォルト ポーンが含まれます。作成したプレイヤー キャラクターをスポーンするためにこれらのルールを設定する必要があります。

  1. コンテンツ ブラウザ で、 [Add/Import (追加/インポート)] ボタンをクリックして新しい Blueprint クラスを作成します。[Pick a Parent Class (親クラスを選択)] メニューが表示されたら、 [Game Mode Base (ゲーム モード ベース)] を選択して、新しい Gamemode クラスに「Bp_GameMode」という名前を付けます。

    拡大表示するには、画像をクリック。

  2. Bp_GameMode をダブルクリックして、[Class Defaults (クラスのデフォルト)] を開き、 [Details (詳細)] パネルの [Classes (クラス)] カテゴリ に移動して、 [Default Pawn Class (デフォルト ポーン クラス)] で Bp_PlayerCharacter を選択します。

    Select Default Pawn Class

  3. ブループリントを コンパイル して 保存 します。

    Compile and Save buttons

  4. [Edit] > [Project Settings] > [Maps & Modes] の順に選択し、Default Modes カテゴリで Bp_GameMode を選択します。

    拡大表示するには、画像をクリック。

Game Mode はゲームのルールを一通り定義します。これらのルールには、ゲームの起動時にプレイヤーがスポーンするデフォルト ポーンが含まれます。作成したプレイヤー キャラクターをスポーンするためにこれらのルールを設定する必要があります。

  1. エディタで C++ クラス フォルダへ移動します。CharacterMovementGameModeBase を右クリックし、[C++ Class] アクション メニューのドロップダウンから、[Create Blueprint class based on your CharacterMovementGameModeBase] を選択して「Bp_GameMode」と名前を付けます。

    拡大表示するには、画像をクリック。

  2. Bp_GameMode をダブルクリックして クラス デフォルト を開き、[Details] パネルの [Classes] カテゴリ へ移動して Default Pawn Class に Bp_PlayerCharacter を選択します。

    Select Default Pawn Class

  3. ブループリントを コンパイル して 保存 します。

    Compile and Save buttons

  4. [Edit] > [Project Settings] > [Maps & Modes] の順に選択し、Default Modes カテゴリで Bp_GameMode を選択します。

    拡大表示するには、画像をクリック。

Locomotion ブレンド スペースを作成する

レベル内で動くための入力機能を備えるキャラクターを作成できたので、次は動きのステート (ダッシュ、ジョギング、しゃがみ歩き) に応じた ブレンド スペース を作成する必要があります。

ブレンド スペース は、2 つの入力の値に基づいてアニメーションをブレンドできる特別なアセットです。キャラクターの移動速度や方向に応じて、前後左右に動く独自のブレンド スペースを作成します。

  1. コンテンツ ブラウザ で、 [Add/Import (追加/インポート)] > [Animation (アニメーション)] > [BlendSpace] をクリックします。スケルトンを選択するように求めるプロンプトが表示されたら、 UE4_Mannequin_Skeleton を選択して、ブレンド スペースに「Locomotion_BS」という名前を付けます。

    Creating the Blend Space

  2. ダブルクリックして、 Locomotion_BS ブレンド スペースを開きます。[Asset Details (アセット詳細)] タブの [Axis Settings (軸設定)] カテゴリで、 [Horizontal Axis (横軸)] および [Vertical Axis (縦軸)] の横にある矢印を選択して、変数の詳細を表示します。

    Asset Details Axis settings

  3. [Horizontal Axis (横軸)] 設定で、 Name 変数を Direction に変更して、 Minimum Axis Value を「-180」に、 Maximum Axis Value を「180」に設定します。

    Horizontal Axis settings

  4. [Vertical Axis (縦軸)] 設定で、 Name 変数を Speed に変更して、 Maximum Axis Value を「1000」に設定します。

    Vertical Axis settings

  5. コンパイル して 保存 します。

    Compile and Save buttons

  6. [Asset Browser (アセット ブラウザ)] に移動して、[Filters (フィルタ)] 検索バーに 「Idle_Rifle_Hip」と入力して、 Idle_Rifle_Hip アセットを ブレンド スペースDirection 0.0 および Speed 0.0 のポイントにドラッグアンドドロップします。

    拡大表示するには、画像をクリック。

  7. このステップを繰り返して、 Idle_Rifle_Hip のアセットを以下のポイントに挿入します。

    • Direction 180, Speed 0.

    • Direction 90, Speed 0.

    • Direction -90, Speed 0.

    • Direction -180, Speed 0.

    拡大表示するには、画像をクリック。

  8. [Asset Browser] タブで、[Filters] 検索バーに「_Ironsights」と入力して、 Walk_Fwd_Rifle_Ironsights アセットを ブレンド スペースDirection 0.0 および Speed 250 のポイントにドラッグアンドドロップします。

    拡大表示するには、画像をクリック。

  9. 次に、 [Asset Browser] タブで、 [Filters ] 検索バーに「Walk_Lt_Rifle_Ironsights」と入力して、 Walk_Lt_Rifle_Ironsights アセットを ブレンド スペースDirection -90 および Speed 250 のポイントにドラッグアンドドロップします。

    拡大表示するには、画像をクリック。

  10. [Asset Browser] タブで、[Filters] 検索バーに 「Walk_Rt_Rifle_Ironsights」 と入力して、 Walk_Rt_Rifle_Ironsights アセットを ブレンド スペースDirection 90 および Speed 250 のポイントにドラッグアンドドロップします。

    拡大表示するには、画像をクリック。

  11. [Asset Browser] タブで、[Filters] 検索バーに「Walk_Bwd_Rifle_Ironsights」と入力して、 Walk_Bwd_Rifle_Ironsights アセットを ブレンド スペースDirection 180 および Speed 250 のポイントにドラッグアンドドロップし、さらに Direction -180 および Speed 250 ドラッグアンドドロップします。

    拡大表示するには、画像をクリック。

  12. [Asset Browser] タブで、 [Filters ] 検索バーに「Jog_Fwd_Rifle」と入力して、 Jog_Fwd_Rifle アセットを ブレンド スペースDirection 0.0 および Speed 500 のポイントにドラッグアンドドロップします。

    拡大表示するには、画像をクリック。

  13. [Asset Browser (アセット ブラウザ)] に移動して、[Filters] 検索バーに「Jog_Lt_Rifle」と入力して、 Jog_Lt_Rifle アセットを ブレンド スペースDirection -90 および Speed 500 のポイントにドラッグアンドドロップします。

    拡大表示するには、画像をクリック。

  14. [Asset Browser] に移動して、[Filters] 検索バーに「Jog_Rt_Rifle」と入力して、 Jog_Rt_Rifle アセットを ブレンド スペースDirection 90 および Speed 500 のポイントにドラッグアンドドロップします。

    拡大表示するには、画像をクリック。

  15. [Asset Browser] で、[Filters] 検索バーに「Jog_Bwd_Rifle_Ironsights」と入力して、 Jog_Bwd_Rifle_Ironsights アセットを ブレンド スペースDirection 180 および Speed 500 のポイントにドラッグアンドドロップし、さらにもう 1 つの Jog_Bwd_Rifle_Ironsights アセットを Direction -180 および Speed 500 のポイントにドラッグアンドドロップします。

    拡大表示するには、画像をクリック。

  16. [Asset Browser] で「Sprint_Fwd_Rifle_Ironsights」を検索して選択し、 Sprint_Fwd_Rifle_Ironsights アセットを ブレンド スペースDirection 0 および Speed 1000 のポイントにドラッグアンドドロップして、ブレンド スペースを完成させます。

    拡大表示するには、画像をクリック。

  17. コンパイル して 保存 します。

    Compile and Save buttons

完成した Locomotion_BS は以下の画像のようになります。

Completed Locomotion Blend Space

Crouch Locomotion ブレンド スペースを作成する

Locomotion ブレンド スペースが完成したので、次は Crouch Locomotion ブレンド スペースを作成する必要があります。

  1. コンテンツ ブラウザ で、 [Add/Import (追加/インポート)] > [Animation (アニメーション)] > [BlendSpace] をクリックします。スケルトンを選択するように求めるプロンプトが表示されたら、 UE4_Mannequin_Skeleton を選択して、ブレンド スペースに「LocomotionCrouch_BS」という名前を付けます。

  2. ダブルクリックして、 Locomotion_BS ブレンド スペースを開きます。[Asset Details (アセット詳細)] タブの [Axis Settings (軸設定)] カテゴリで、 [Horizontal Axis (横軸)] および [Vertical Axis (縦軸)] の横にある矢印を選択して、変数の詳細を表示します。

    Asset Details Axis settings

  3. [Horizontal Axis (横軸)] 設定で、 Name 変数を Direction に変更して、 Minimum Axis Value を「-180」に、 Maximum Axis Value を「180」に設定します。

    Crouch Horizontal Axis settings

  4. [Vertical Axis (縦軸)] 設定で、Name 変数を Speed に変更して、 Maximum Axis Value を「300」に設定します。

    Crouch Vertical Axis settings

  5. 前の「Locomotion ブレンド スペースを作成する」セクションの手順を繰り返して、アセットをブレンド スペースの以下の値のポイントに配置します。

    アニメーション アセットの名前

    Speed

    Direction

    Crouch_Idle_Rifle_Hip

    0

    0, 90, -90, 180, -180

    Crouch_Walk_Fwd_Rifle_Hip

    300

    0

    Crouch_Walk_Lt_Rifle_Hip

    300

    -90

    Crouch_Walk_Rt_Rifle_Hip

    300

    90

    Crouch_Walk_Bwd_Rifle_Hip

    300

    180, -180

  6. LocomotionCrouch_BS を保存してコンパイルします。

    Compile and Save buttons

完成した LocomotionCrouch_BS ブレンド スペースは以下の画像のようになります。

Completed Crouch Locomotion Blend Space

Animation ブループリントを作成する

プレイヤーの現在のアクションに基づいて、どのようなキャラクター アニメーションを再生するかを決定する、 Animation ブループリント が必要です。さらに、 Walk ステートおよび Crouch ステートを作成して、ステート間の遷移を設定するためには、 ステート マシン を設定する必要があります。

  1. コンテンツ ブラウザ で、 [Add/Import (追加/インポート)] > [Animation (アニメーション)] > [Animation Blueprint (アニメーション ブループリント)] をクリックします。スケルトンを選択するように求めるプロンプトが表示されたら、 UE4_Mannequin_Skeleton を選択して、アニメーション ブループリントに「PlayerCharacter_AB」という名前を付けます。

    Create Animation Blueprint

  2. PlayerCharacter_AB をダブルクリックして、アニメーション ブループリントを開きます。[My Blueprint (マイ ブループリント)] タブで、 Variables カテゴリ に移動して、横の + 記号を選択し Is Crouched および Is Jumping という名前の 2 つの ブール 変数を作成します。

    Is Crouched and Is Jumping variables

  3. [Event Graph (イベント グラフ)] タブをクリックして、 Try Get Pawn Owner ノードの Return Value ピンを引き出して、ドロップダウン メニューで Cast to BP_PlayerCharacter を検索して選択します。

    拡大表示するには、画像をクリック。

  4. Cast to BP_PlayerCharacter ノードの As BP_PlayerCharacter Return ピンを引き出して、 Get Is Crouched を検索して選択します。

    Get Is Crouched

  5. [My Blueprint] タブに移動して、 Variable カテゴリから Is Crouched 変数を Get Is Crouched ノードの Return ピンにドラッグアンドドロップします。

    拡大表示するには、画像をクリック。

  6. Cast To BP_PlayerCharacter ノードの 出力実行ピン を引き出して、 Set Is Crouched ノードの 入力 実行ピンに接続します。

    拡大表示するには、画像をクリック。

  7. Cast to BP_PlayerCharacter ノードの As BP_PlayerCharacter Return ピンを引き出して、 All Actions ドロップダウン メニューで Get Pressed Jump を検索して選択します。

    Add Get Pressed Jump action

  8. [My Blueprint] から、 Variable カテゴリに移動して、 Is Jumping 変数を Get Pressed Jump ノードの Return ピンにドラッグアンドドロップします。

    拡大表示するには、画像をクリック。

  9. Set Is Crouched ノードの 出力実行ピン を引き出して、 Set Is Jumping ノードの 入力実行ピン に接続します。

    拡大表示するには、画像をクリック。

  10. PlayerCharacter_AB アニメーション ブループリントを コンパイル して 保存 します。

    Compile and Save buttons

  11. Variables カテゴリで横の + 記号を選択して、 Speed および Direction という名前の 2 つの Float 型変数 を作成します。

    Create Speed and Direction variables

  12. Cast to BP_PlayerCharacter ノードの As BP_PlayerCharacter Return ピンを引き出して、 [Context Sensitive] チェックボックスを オン にして、 Get Velocity を検索して選択します。

    Context-sensitive Get Velocity node

  13. Get Velocity ノードの Return Value ピンを引き出して、 Actions ドロップダウン メニューで Vector Length を検索して選択します。

    Add Vector Length node

  14. [My Blueprint] タブで、 Speed 変数を Vector Length ノードの ベクター型の Return Value ピンにドラッグアンドドロップします。

    拡大表示するには、画像をクリック。

  15. 次に、 Set Is Jumping ノードの 実行出力ピンSet Speed ノードの 実行入力ピン に接続します。

    拡大表示するには、画像をクリック。

  16. Cast to BP_PlayerCharacter ノードの As BP_PlayerCharacter Return ピンを引き出して、 Get Actor Rotation を検索して選択します。

    Add Get Actor Rotation node

  17. GetActorRotation ノードのローテータ型の Return Value ピンを引き出して、 Actions ドロップダウン メニューで Calculate Direction を検索して選択します。

    Add Calculate Direction node

  18. 次に、 Get Velocity ノードのベクター型の Return Value ピンを引き出して、 Calculate Direction ノードの Velocity 入力ピンに接続します。

    拡大表示するには、画像をクリック。

  19. [My Blueprint] タブで、 Direction 変数をクリックして、 Calculate Direction ノードの float 型の Return Value ピンにドロップします。

    拡大表示するには、画像をクリック。

  20. 次に、 Set Speed ノードの 実行出力ピンSet Direction ノードの 実行入力ピン に接続します。

    拡大表示するには、画像をクリック。

  21. Event Blueprint Update Animation ノードの 実行出力ピン を引き出して、 Cast To BP_PlayerCharacter ノードに接続します。

    拡大表示するには、画像をクリック。

  22. PlayerCharacter_AB アニメーション ブループリントコンパイル して 保存 します。

    Compile and Save buttons

完成した アニメーション イベント グラフ は以下の画像のようになります。

拡大表示するには、画像をクリック。

アニメーション ステート マシンを作成する

ステート マシン は、スケルタル メッシュのアニメーションを一連の ステート に編成するグラフィカルなビジュアリゼーションを提供します。そのステートは、ステート間のブレンド方法を制御する 遷移ルール によって管理されます。前のセクションで作成した異なるロコモーション ブレンド スペース間を遷移するには、ブール変数を使用します。

  1. PlayerCharacter_AB アニメーション ブループリントで、 [Anim Graph (アニメーション グラフ)] に移動します。

    拡大表示するには、画像をクリック。

    AnimGraph は、スケルタル メッシュの最終ポーズを評価するために使用します。

  2. AnimGraph を右クリックして、 Actions ドロップダウン メニューで、 Add New State Machine を検索して選択します。

    Add New State Machine

  3. State Machine ノードの名前を Locomotion に変更して、このノードをダブルクリックしてグラフを開きます。Entry ピンを引き出して、 Actions ドロップダウン メニューで Add State を選択します。

    拡大表示するには、画像をクリック。

  4. 新しいステートに Movement という名前を付けて、ダブルクリックして Movement State ノードを開きます。[Asset Browser] に移動して、 Locomotion_BS を検索してクリックし、グラフにドラッグします。

    拡大表示するには、画像をクリック。

  5. [My Blueprint] タブから Speed Float 型変数をブレンド スペースの Speed vertical axis にドラッグします。

    拡大表示するには、画像をクリック。

  6. [My Blueprint] タブに戻って、 Direction Float 型変数をブレンド スペースの Direction horizontal axis にドラッグします。

    拡大表示するには、画像をクリック。

  7. アニメーション ポーズ 出力ピンを Output Animation Pose ノードの アニメーション ポーズ Result ピン に接続します。

    拡大表示するには、画像をクリック。

  8. コンパイル して 保存 します。

    Compile and Save buttons

  9. Locomotion のステート マシン に戻って、Movement ステート ノードをクリックアンドドラッグして、 Crouch Movement という名前のアニメーション ステートを新規に作成します。

    拡大表示するには、画像をクリック。

  10. Transition rule ノードをダブルクリックして、 アニメーション グラフ を開きます。

    拡大表示するには、画像をクリック。

  11. [My Blueprint] タブで、 Variables カテゴリに移動して、ブール値 Is CrouchedResult ノードの Can Enter Transition 入力ピン にドラッグします。

    拡大表示するには、画像をクリック。

  12. Locomotion ステート マシン グラフ に戻って、 Crouch Movement ステート をダブルクリックしてアニメーション グラフを開きます。[Asset Browser] で、 LocomotionCrouch_BS を検索してクリックし、グラフにドラッグします。

    拡大表示するには、画像をクリック。

  13. [My Blueprint] タブで、 Variables カテゴリに移動して、Speed float 型変数と Direction float 型変数を LocomotionCrouch_BS の各ピンにドラッグして、LocomotionCrouch_BSアニメーション ポーズOutput Animation Pose の Result ピンに接続します。

    拡大表示するには、画像をクリック。

  14. アニメーション ブループリントを コンパイル して 保存 します。

    Compile and Save buttons

  15. Locomotion アニメーション グラフ に戻って、 CrouchMovement アニメーション ステート をクリックしてドラッグし、 Movement アニメーション ステート に接続します。

    拡大表示するには、画像をクリック。

  16. Transition rule ノードをダブルクリックして、 アニメーション グラフ を開きます。

    拡大表示するには、画像をクリック。

  17. [My Blueprint] タブで、 Is Crouched ブール変数をアニメーション グラフにクリックアンドドラッグして、 Get Is Crouched を選択し、その 出力ピン を引き出して、[Actions] ドロップダウン メニューで NOT Boolean を検索して選択します。

    拡大表示するには、画像をクリック。

  18. 次に、 ブール型 NOT の Return ピンCan Enter Transition 入力ピンに接続します。

    拡大表示するには、画像をクリック。

  19. コンパイル して 保存 します。

    Compile and Save buttons

  20. アニメーション グラフ に戻って、 Movement アニメーション ステート をクリックしてドラッグし、 Add State を選択します。

    拡大表示するには、画像をクリック。

  21. この アニメーション ステート の名前を「Jump」に変更してから、ダブルクリックしてアニメーション グラフを開きます。[Asset Browser] に移動して、 Jump_From_Jog を検索してから、クリックしてグラフにドラッグします。

    拡大表示するには、画像をクリック。

  22. Play Jump_From_Jog のアニメーション ポーズを Output Animation Pose の Result ピンに接続して、このアニメーション ステートを完成させます。

    拡大表示するには、画像をクリック。

  23. Locomotion アニメーション グラフ に戻って、 Movement to Jump Transition rule ノードをダブルクリックして、 アニメーション グラフ を開きます。

    拡大表示するには、画像をクリック。

  24. Transition Rule アニメーション グラフ 内で、 [My Blueprint] タブ に移動して、 Is Jumping ブール変数を Result ノードの Can Enter Transition 入力ピン にドラッグします。

    拡大表示するには、画像をクリック。

  25. Locomotion アニメーション グラフ に戻って、 Jump アニメーション ノードをクリックしてドラッグし、 Create a transitionMovement アニメーション グラフ ノードへの遷移を作成します。

    拡大表示するには、画像をクリック。

  26. Jump to Movement Transition rule ノードをダブルクリックして、 アニメーション グラフ を開きます。

    拡大表示するには、画像をクリック。

  27. [My Blueprint] タブで、 Is Crouched ブール変数と Is Jumping ブール変数をクリックして アニメーション グラフ にドラッグし、それらの出力ピンをそれぞれ引き出して、[Actions] ドロップダウン メニューで NOT Boolean を検索して選択します。

    拡大表示するには、画像をクリック。

  28. ブール型 NOT の出力ピン を引き出して、 AND Boolean を検索して選択します。

    Connect NOT Boolean to AND Boolean

  29. Is CrouchedIs Jumping NOT Boolean ノードの両方の出力ピンを AND Boolean ノードの入力ピン に接続して、 AND Boolean の出力ピンResult ノードの Can Enter Transition 入力ピン に接続します。

    拡大表示するには、画像をクリック。

  30. Locomotion アニメーション グラフ に戻って、 Crouch ノードをクリックしてドラッグし、 Create a transitionJump ノードへの遷移を作成します。

    拡大表示するには、画像をクリック。

  31. Crouch Movement to Jump Transition rule ノードをダブルクリックして、 アニメーション グラフ を開きます。

    拡大表示するには、画像をクリック。

  32. CrouchMovement to Jump 遷移ルール アニメーション グラフ 内で、 [My Blueprint] タブに移動して、 Is Jumping ブール変数をクリックして Result ノードの Can Enter Transition 入力ピンにドラッグします。

    拡大表示するには、画像をクリック。

  33. Locomotion アニメーション グラフ に戻って、 Jump ノードをドラッグして、 Create a transitionCrouchMovement ノードへの遷移を作成します。

    拡大表示するには、画像をクリック。

  34. Jump to Crouch Movement Transition rule ノードをダブルクリックして、 アニメーション グラフ を開きます。

    拡大表示するには、画像をクリック。

  35. [My Blueprint] タブで、 Is Crouched ブール変数と Is Jumping ブール変数をクリックして アニメーション グラフ にドラッグします。

    拡大表示するには、画像をクリック。

  36. Is Jumping ブール型出力ピン を引き出して、Actions ドロップダウン メニューで NOT Boolean を検索して選択し、 Is Crouched ブール値の出力ピン**を引き出して、 AND Boolean を検索して選択します。Is Jumping NOT Boolean の出力ピンAND Boolean の入力ピン に接続して、 AND Boolean の出力ピンResult ノードの Can Enter Transition ピン** に接続して、遷移ルールを完成させます。

    拡大表示するには、画像をクリック。

  37. 完成した Locomotion アニメーション グラフ は以下の画像のようになります。

    拡大表示するには、画像をクリック。

  38. AnimGraph に戻って、 Locomotion のポーズ出力ピンOutput Pose ノードの Result ピン に接続します。

    拡大表示するには、画像をクリック。

  39. コンパイル して 保存 します。

    Compile and Save buttons

  40. コンテンツ ブラウザBp_PlayerCharacter をダブルクリックして [Class Defaults (クラスのデフォルト)] を開き、 [Components (コンポーネント)] タブで Mesh コンポーネント を選択して、 [Details (詳細)] パネルの [Animation (アニメーション)] カテゴリ に移動して、 Anim Class 変数ドロップダウン メニュー で、 PlayerCharacter_AB を検索して選択します。

    拡大表示するには、画像をクリック。

結果

これでロジックをテストできるようになりました。ツールバーで [Play (PIE)] を選択すると、W、A、S、D キーでキャラクターの動きを制御できます。ダッシュするには、左の Shift キーを押しながらクリックします。しゃがむには、左の Ctrl キーを押しながらクリックします。ジャンプするには、スペース バーを押します。

character movement in action

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
閉じる