2.入力設定と Pawn Movement コンポーネントの作成

ポーンの移動方法を定義する入力設定とカスタムの Pawn Movement コンポーネントの構築

Windows
MacOS
Linux
On this page
  1. Unreal Editor へ戻って、プロジェクトの入力設定を行います。設定値は Edit (編集) ドロップダウン メニューの Project Settings (プロジェクト設定) にあります。

    EditProjectSettings.png

    設定メニューに移動したら、左パネルの [Engine (エンジン)] セクションから [Input (入力)] を選択します。パーティクル システムの切り替えを設定する Action Mapping (アクションマッピング)ポーン を動かす 2 つの Axis Mappings 、そして ポーン を回転するためにもう一つの Axis Mapping を設定しなくてはいけません。

    Action Mapping

    ParticleToggle (パーティクルの切替)

    スペース バー

    Axis Mapping

    MoveForward

    W

    1.0

    S

    -1.0

    MoveRight

    A

    -1.0

    D

    1.0

    Turn (ターン)

    Mouse X

    1.0

    InputSettings.png

  2. Pawn クラスですべての動きを直接処理する代わりに、動きを管理する Movement コンポーネント を作成します。このチュートリアルでは、 Pawn Movement コンポーネント クラスを拡張します。最初に [File (ファイル)] のドロップダウンメニューから Add Code to Project (コードをプロジェクトに追加) コマンドを選択します。

    AddCPPCode.png

    Pawn クラスとは異なり、 Pawn Movement コンポーネントはデフォルトで表示されません。このコマンドを探すには、 [Show All Classes (すべてのクラスを表示)] オプションにチェックをいれなくてはいけません。

    ShowAllClasses.png

    検索バーに「movement」と入力するとリストの検索範囲を絞り込めます。

    ChooseParentClass.png

    Pawn Movement コンポーネントにはパワフルな内蔵機能がいくつかあり一般的な物理機能に役立ちます。また、多数ある Pawn タイプの間で移動コードを共有する最適な方法です。プロジェクトが大きくなるにつれて乱雑な状態になったり、ポーンがより複雑になることを防ぐために、機能の分割にコンポーネントを使用することはグッドプラクティスです。

    Pawn クラスを "CollidingPawn" と呼ぶため、このクラスを "CollidingPawnMovement コンポーネント" と呼びましょう。

    NameComponent.png

これで入力設定を定義して、カスタムの Pawn Movement コンポーネントを作成しました。Visual Studio に戻って、Pawn Movement Component を使用時の ポーンの移動方法を定義するためにコードを記述しましょう。

作業中のコード

CollidingPawn.h

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

#pragma once

#include "GameFramework/Pawn.h"
#include "CollidingPawn.generated.h"

UCLASS()
class HOWTO_COMPONENTS_API ACollidingPawn : public APawn
{
    GENERATED_BODY()

public:
    // Sets default values for this pawn's properties
    ACollidingPawn();

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;

    UParticleSystemComponent* OurParticleSystem;
};

CollidingPawn.cpp

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

#include "HowTo_Components.h"
#include "CollidingPawn.h"

// Sets default values (デフォルト値を設定) 
ACollidingPawn::ACollidingPawn()
{
    // Set this pawn to call Tick() every frame. You can turn this off to improve performance if you don't need it. 
    PrimaryActorTick.bCanEverTick = true;

    // ルート コンポーネントは物理に反応するスフィア (球体) になります。
    USphereComponent* SphereComponent = CreateDefaultSubobject<USphereComponent>(TEXT("RootComponent"));
    RootComponent = SphereComponent;
    SphereComponent->InitSphereRadius(40.0f);
    SphereComponent->SetCollisionProfileName(TEXT("Pawn"));

    // 球体の位置が分かるようにメッシュ コンポーネントを作成して配置します
    UStaticMeshComponent* SphereVisual = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("VisualRepresentation"));
    SphereVisual->SetupAttachment(RootComponent);
    static ConstructorHelpers::FObjectFinder<UStaticMesh> SphereVisualAsset(TEXT("/Game/StarterContent/Shapes/Shape_Sphere.Shape_Sphere"));
    if (SphereVisualAsset.Succeeded())
    {
        SphereVisual->SetStaticMesh(SphereVisualAsset.Object);
        SphereVisual->SetRelativeLocation(FVector(0.0f, 0.0f, -40.0f));
        SphereVisual->SetWorldScale3D(FVector(0.8f));
    }

    // アクティブまたは非アクティブにできるパーティクル システムを作成
    OurParticleSystem = CreateDefaultSubobject<UParticleSystemComponent>(TEXT("MovementParticles"));
    OurParticleSystem->SetupAttachment(SphereVisual);
    OurParticleSystem->bAutoActivate = false;
    OurParticleSystem->SetRelativeLocation(FVector(-20.0f, 0.0f, 20.0f));
    static ConstructorHelpers::FObjectFinder<UParticleSystem> ParticleAsset(TEXT("/Game/StarterContent/Particles/P_Fire.P_Fire"));
    if (ParticleAsset.Succeeded())
    {
        OurParticleSystem->SetTemplate(ParticleAsset.Object);
    }

    // Use a spring arm to give the camera smooth, natural-feeling motion.
    USpringArmComponent* SpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("CameraAttachmentArm"));
    SpringArm->SetupAttachment(RootComponent);
    SpringArm->RelativeRotation = FRotator(-45.f, 0.f, 0.f);
    SpringArm->TargetArmLength = 400.0f;
    SpringArm->bEnableCameraLag = true;
    SpringArm->CameraLagSpeed = 3.0f;

    // Create a camera and attach to our spring arm
    UCameraComponent* Camera = CreateDefaultSubobject<UCameraComponent>(TEXT("ActualCamera"));
    Camera->SetupAttachment(SpringArm, USpringArmComponent::SocketName);

    // Take control of the default player
    AutoPossessPlayer = EAutoReceiveInput::Player0;
}

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

}

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

}

// Called to bind functionality to input (機能を入力にバインドするために呼び出されます)
void ACollidingPawn::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