始める前に
前のセクション「キャラクターの移動を設定する」で次の目標を達成したことを確認します。
入力アクションと入力マッピング コンテキストの仕組みを理解する。
キャラクターに前、後、左、右方向の移動とジャンプ移動を設定する。
一人称視点カメラ制御
カメラの向きを変えるには、カメラのトランスフォーム プロパティの回転の値を変更します。 3D 空間で回転するために、オブジェクトはピッチ、ロール、ヨー (左右回転) を使用して、向く方向と沿う軸を制御します。
ピッチ:水平 (X) 軸に沿った回転を制御します。 これを変更すると、首を縦に振るのと同じようにオブジェクトは上か下に回転します。
ヨー:垂直 (Y) 軸に沿った回転を制御します。 これを変更すると、右か左に回転するのと同じようにオブジェクトは左か右に回転します。
ロール:経度 (Z) 軸に沿った回転を制御します。 これを変更すると、頭を右か左に傾けるのと同じようにオブジェクトは横方向に回転します。
一人称視点ゲームのカメラでは通常、ヨーとピッチを使用して移動を制御します。 飛行機や宇宙船を回転させる必要があるゲームをプログラミングしているか、コーナーから様子を伺う動作をシミュレートする必要がある場合は、ロールが重要になることがあります。
ブループリントでカメラ移動を試してみる
ブループリント エディタで BP_FirstPersonCharacter を開いてデフォルト キャラクターのカメラ制御ロジックを表示します。 EventGraph で Camera Input ノード グループの左上隅にある 2 つのノードを確認します。
IA_Move と同じように、IA_Look 入力アクションには Axis2D 値型があるため、移動は X 値と Y 値の両方に分けられます。 ここでは、X と Y はカスタム Aim 関数の Yaw と Pitch 入力になります。
Aim 関数ノードをダブルクリックして、内部のロジックを表示します。 Add Controller Yaw Input 関数ノードと Pitch Input 関数ノードはキャラクターに値を追加します。
一人称視点キャラクター コンポーネントを試してみる
BP_FirstPersonCharacter の [Viewport (ビューポート)] タブに移動して、アクタとそのコンポーネントの 3D プレビューを表示します。
[Components (コンポーネント)] タブには、ワールドのキャラクターを定義するアタッチされたコンポーネントの構造化された階層が表示されます。
キャラクター ブループリントは、以下によって自動的にインスタンス化されます。
キャラクターをワールドのオブジェクトに衝突させるカプセル コンポーネント。
アニメーションを可能にしてキャラクターを視覚化するスケルタルメッシュ コンポーネント。 [Details] パネルで、このキャラクターがスケルタルメッシュ アセットとして
SKM_Manny_Simpleを使用する様子を見ることができます。キャラクターが動き回れるようにするキャラクター移動コンポーネント。
このキャラクターには、メインのメッシュ コンポーネントの子である、(同じく SKM_Manny_Simple を使用する) FirstPersonMesh という 2 つ目のスケルタルメッシュもあります。 一人称視点のゲームのキャラクターには通常、三人称視点コンテキストと一人称視点コンテキスト両方のメッシュが個別にあります。 三人称視点メッシュは、他のプレイヤーに、またはプレイヤーが三人称視点のときにのみ表示されます。 一人称視点メッシュは、プレイヤーが一人称視点のときにそのプレイヤーに表示されます。
FirstPersonMesh には、FirstPersonCamera という子カメラ コンポーネントがあります。 このカメラは、プレイヤーの一人称視点を決定し、キャラクターが周りを見回す動作に合わせて回転します。 チュートリアルのこの部分では、C++ を使用してランタイム時にキャラクターのカメラをインスタンス化し、このカメラの位置に合わせてキャラクターを配置します。
キャラクター コンポーネントの詳細については、キャラクター ゲームプレイ フレームワークのドキュメントを参照してください。
コードで注視入力を実装する
前の手順で実装した移動と同じようにコードでこのカメラの機能を実装するには、関数に IA_Look 入力アクションをバインドしてから、キャラクターにその関数をバインドします。
Look() 関数と変数を宣言する
Visual Studio でキャラクターの .hファイルを開きます。
このチュートリアルのコード サンプルでは、AdventureCharacter というキャラクター クラスを使用します。
ランタイム時にキャラクターがビルドされるときに、UE にキャラクターへのカメラ コンポーネントの追加と動的なカメラの配置を指示します。 この機能を有効にするには、”Camera/CameraComponent.h” の新しい #include を追加します。
#include "CoreMinimal.h"
#include "Camera/CameraComponent.h"
#include "GameFramework/Character.h"
#include "EnhancedInputComponent.h"
#include "EnhancedInputSubsystems.h"
#include "InputActionValue.h"
#include "AdventureCharacter.generated.h"ヘッダの protected セクションで、LookAction という新しい UInputAction ポインタを宣言します。 このポインタに MoveAction や JumpAction と同じ UPROPERTY() マクロを付与します。 これは IA_Look 入力アクションをポイントします。
// Look Input Actions
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input)
UInputAction* LookAction;public セクションで、Value という定数 FInputActionValue の参照を取る Look() という新しい関数を宣言します。 この関数に必ず UFUNCTION() マクロを追加します。
// Handles Look Input
UFUNCTION()
void Look(const FInputActionValue& Value);Look() 関数宣言の後に、FirstPersonCameraComponent という新しい UCameraComponent ポインタを宣言します。 このプロパティを Unreal Editor に公開するには、[Details] パネルの [Camera (カメラ)] セクションに表示されるように、VisibleAnywhere 引数と Category = Camera 引数で UPROPERTY() マクロを付与します。
// First Person camera
UPROPERTY(VisibleAnywhere, Category = Camera)
UCameraComponent* FirstPersonCameraComponent;FirstPersonCameraOffset という名前の FVector を宣言します。 キャラクターを設定する際に、カメラの位置を適切に調整するためにこのオフセットを使用します。 FVector の初期値を以下の値に設定し、EditAnywhere と Category = Camera のマクロを追加して、必要に応じて Unreal Editor で調整できるようにします。
// Offset for the first-person camera
UPROPERTY(EditAnywhere, Category = Camera)
FVector FirstPersonCameraOffset = FVector(2.8f, 5.9f, 0.0f);カメラの視界に映る近距離のオブジェクト (キャラクターの体など) の表示を調整するために、さらにいくつかのプロパティが必要です。 次の 2 つの float 変数を宣言します。
FirstPersonFieldOfView:FirstPersonタグ付きのプリミティブ コンポーネントを描画する際に、このカメラが使用する水平方向の視野角 (度単位) です。 「70.0f」に設定します。FirstPersonScale:FirstPersonタグ付きのプリミティブ コンポーネントに対して、このカメラが適用するスケールです。 「0.6f」に設定します。
UPrimitiveComponent は、ワールド内に物理的な存在を持つすべてのコンポーネントの基底クラスです. たとえば、メッシュ コンポーネントやカプセル コンポーネントはプリミティブ コンポーネントの一種です。
これらのプロパティには、EditAnywhere および Category = Camera の指定子を持つ UPROPERTY マクロを追加します。
// First-person primitives field of view
UPROPERTY(EditAnywhere, Category = Camera)
float FirstPersonFieldOfView = 70.0f;
// First-person primitives view scale
UPROPERTY(EditAnywhere, Category = Camera)
float FirstPersonScale = 0.6f;これらのカメラ コンポーネントの設定により、Unreal Engine は FirstPerson タグ付きのプリミティブをプレイヤーに対して他のワールド内オブジェクトとは異なる方法で描画でき、ファーストパーソン ビューにおける見た目と動作を最適化します。
ゲーム内で視野角 (FOV) が広すぎると、カメラに近いオブジェクト (プレイヤーの腕や所持品など) が大きく見えすぎたり引き伸ばされたように見えたりすることがあるため、これらのオブジェクトに対する FOV を狭めることで歪みを軽減できます。 これらのオブジェクトのスケールを縮小することで、壁にめり込むのを防ぐことができます。
ファーストパーソンおよびサードパーソンのオブジェクトがプレイヤーにどのように表示されるかの制御について詳しくは、First Person Rendering 機能のドキュメントを参照してください。
最後に、FirstPersonMeshComponent という名前の USkeletalMeshComponent ポインタを宣言します。 UPROPERTY() マクロに VisibleAnywhere と Category = Mesh の引数を追加します。
// First-person mesh, visible only to the owning player
UPROPERTY(VisibleAnywhere, Category = Mesh)
USkeletalMeshComponent* FirstPersonMeshComponent;これで以下の宣言が設定されました。
一人称視点メッシュ (ブループリントで見た子 FirstPersonMesh に関連する)
カメラ
Look()関数IA_Look入力アクション
キャラクターの .hファイルは次のようになります。
// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "Camera/CameraComponent.h"
#include "GameFramework/Character.h"
#include "EnhancedInputComponent.h"
#include "EnhancedInputSubsystems.h"
#include "InputActionValue.h"
Look() を使用して注視入力を追加する
キャラクターの .cppファイルを開き、Look() 関数を使用してキャラクター ブループリントのカメラ入力ロジックを実装します。
IA_Move と同じように、IA_Look はトリガーされると FVector2d 値を返します。 Look() の新しい関数定義を追加します。 関数内で、LookAxisValue という新しい FVector2d 内の FInputActionValue の値を取得します。
void AAdventureCharacter::Look(const FInputActionValue& Value)
{
const FVector2D LookAxisValue = Value.Get<FVector2D>();
}
次に、if 文でコントローラーが有効かどうかを確認します。
有効な場合は、AddControllerYawInput() と AddControllerPitchInput() を呼び出し、LookAxisValue.X 値と LookAxisValue.Y 値をそれぞれ渡します。 完成した Look() 関数は次のようになります。
void AAdventureCharacter::Look(const FInputActionValue& Value)
{
const FVector2D LookAxisValue = Value.Get<FVector2D>();
if (Controller)
{
AddControllerYawInput(LookAxisValue.X);
AddControllerPitchInput(LookAxisValue.Y);
}
}SetupPlayerInputComponent を使用して入力に注視機能をバインドする
移動アクションと同じように、SetupPlayerInputComponent() 内で LookAction 入力アクションに Look() 関数をバインドします。
EnhancedInputComponent->BindAction(LookAction, ETriggerEvent::Triggered, this, &AAdventureCharacter::Look);SetupPlayerInputComponent() 関数は次のようになります。
// Called to bind functionality to input
void AAdventureCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
// Check the UInputComponent passed to this function and cast it to an UEnhancedInputComponent
if (UEnhancedInputComponent* EnhancedInputComponent = CastChecked<UEnhancedInputComponent>(PlayerInputComponent))
{
// Bind Movement Actions
EnhancedInputComponent->BindAction(MoveAction, ETriggerEvent::Triggered, this, &AAdventurenCharacter::Move);
// Bind Look Actions
コードを保存し、Visual Studio で [Build] をクリックしてコンパイルします。
ブループリントで注視入力アクションを割り当てる
最後に、キャラクター ブループリントの新しい Look Action プロパティに入力アクションを割り当てます。
キャラクターに注視コントロールを割り当てるには、次の手順を実行します。
Unreal Editor で Character ブループリントを開きます。
[Components (コンポーネント)] パネルで、ルート コンポーネント
BP_[CharacterName]が選択されていることを確認します。[Details] パネルの [Input (入力)] セクションで、[Look Action (注視アクション)] を
IA_Lookに設定します。ブループリントをコンパイルして保存します。
注視移動をテストする
[Play] を押してゲームをテストすると、周りを見回したり、好きな方向にキャラクターを移動させたりできます。
インゲーム ビューが一人称視点カメラからの視点のように見えている間は、実際にはまだキャラクターのカメラ コンポーネントがないということに注意してください。 代わりに、Unreal Engine はキャラクターのカプセル コンポーネントの中心からのビューをシミュレートします。 次の手順では、キャラクター クラスにカメラを追加してこれを変更する方法を学びます。
ランタイム時にコンポーネントを作成する
次に、ヘッダ ファイルで宣言した FirstPersonCameraComponent ポインタと FirstPersonMeshComponent ポインタをインスタンス化して、キャラクターの一人称視点のメッシュとカメラの作成を完了します。
開始するには、キャラクターの .cppファイルを開きます。
ファイルの先頭に、クラス コンストラクタ (このチュートリアルでは AAdventureCharacter ()) が記述されています。 このクラスはオブジェクトがメモリ上に確保されたときに実行され、キャラクターのデフォルト値を設定します。 ここでコンポーネントを追加します。
クラス コンストラクタや BeginPlay() にコードを追加する際は、アクターのライフサイクルにおけるそれぞれの実行タイミングと、他のオブジェクトがすでに初期化されているかどうかを考慮してください。
クラス コンストラクタが実行される時点では、他のコンポーネントやアクターがまだ存在していない可能性があります。 BeginPlay() はゲームプレイの開始時やアクターがスポーンされたときに実行されるため、アクターおよびそのすべてのコンポーネントが完全に初期化・登録されており、他のアクターを参照しても安全です。
また、Unreal Engine がアタッチ、物理、ネットワーク、親子関係などのタイミングを内部で処理する方法により、技術的にはより早い段階で実行可能であっても、一部の処理は BeginPlay() で行ったほうがより安定して動作することがあります。
カメラ コンポーネントを作成する
キャラクターにコンポーネントを追加するには、CreateDefaultSubobject() テンプレート関数を使用します。 この関数は、新しいコンポーネントへのポインタを返して次の引数を取ります。
CreateDefaultSubobject<type>(TEXT(“Name”));
ここで、type は作成するサブオブジェクトの型、Name は Unreal Engine がサブオブジェクトを識別してエディタで表示するために使用する内部名です。
クラス コンストラクタ内で、FirstPersonCameraComponent ポインタに UCameraComponent 型の CreateDefaultSubobject() の結果を代入します。 TEXT 引数で、オブジェクトに「FirstPersonCamera」という名前を付けます。
FirstPersonCameraComponent = CreateDefaultSubobject<UCameraComponent>(TEXT("FirstPersonCamera"));これにより、Character クラスの子としてデフォルトのカメラ オブジェクトが作成されます。 次に、カメラが適切にインスタンス化されたことを確認するために、FirstPersonCameraComponent が null でないことを確認します。
// Create a first person camera component.
FirstPersonCameraComponent = CreateDefaultSubobject<UCameraComponent>(TEXT("FirstPersonCamera"));
check(FirstPersonCameraComponent != nullptr);Mesh Component を作成する
FirstPersonMeshComponent を別の CreateDefaultSubobject 関数呼び出しで設定します。 今回は、USkeletalMeshComponent を型にして、名前として「FirstPersonMesh」にします。 後で忘れずに check を追加してください。
// Create a first person mesh component for the owning player.
FirstPersonMeshComponent = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("FirstPersonMesh"));
check(FirstPersonMeshComponent != nullptr);メッシュをアタッチして設定する
メッシュが作成されたら、それをキャラクターにアタッチし、ファーストパーソン レンダリングを有効にします。
SetupAttachment() 関数は、1 つのシーン コンポーネントを別のシーン コンポーネントにアタッチし、コンポーネント階層で親子関係を確立します。
FirstPersonMeshComponent が指すオブジェクトで SetupAttachment() 関数を呼び出し、親コンポーネントを引数として渡します。 このケースでは、親コンポーネントはキャラクターのデフォルトのスケルタル メッシュであり、GetMesh() を使用して取得できます。
// Attach the FirstPerson mesh to the Skeletal Mesh
FirstPersonMeshComponent->SetupAttachment(GetMesh());キャラクターのヘッダー ファイルで、カメラに近いコンポーネントに使用する視野角 (FOV) とスケールを宣言しました。 これらのカメラ プロパティをファーストパーソン メッシュに適用するには、メッシュの FirstPersonPrimitiveType プロパティを FirstPerson に設定します。
FirstPersonMeshComponent->FirstPersonPrimitiveType = EFirstPersonPrimitiveType::FirstPerson;FirstPerson タイプのプリミティブは別のレンダー パスで描画されるため、通常とは異なるカメラ パラメータが使用され、影を落としません。 プレイヤーの影はサードパーソン メッシュからキャストすることで最も効果的に表示されるため、次にその設定を行います。
メッシュの可視性を設定する
これまで、キャラクターにはファーストパーソン用とサードパーソン用のスケルタル メッシュがあり、ゲームプレイ中に重なっています。 ただし、一人称視点メッシュは他のプレイヤーに対して、また三人称視点メッシュはプレイヤー自身に対して非表示になっている必要があります。
ファーストパーソンおよびサードパーソンのメッシュと影の表示設定を行うには、次の手順に従います。
キャラクターのクラス コンストラクタ内でファーストパーソン メッシュのプリミティブ タイプを設定した後、サードパーソン メッシュ コンポーネントの
FirstPersonPrimitiveTypeをWorldSpaceRepresentationに設定します。C++GetMesh()->FirstPersonPrimitiveType = EFirstPersonPrimitiveType::WorldSpaceRepresentation;このプリミティブ タイプは、他のプレイヤーに表示されるコンポーネント用です。 そのコンポーネントの
OwnerNoSeeプロパティが自動的にfalseに設定され、プレイヤーからは見えなくなります。 ただし、メッシュが依然として影を表示します。BeginPlay()では、グローバル エンジン ポインタ チェックの後に、FirstPersonMeshComponentでSetOnlyOwnerSee()を呼び出してtrueを渡し、一人称視点メッシュが所有プレイヤーのみに表示されるようにします。C++// Only the owning player sees the first-person mesh FirstPersonMeshComponent->SetOnlyOwnerSee(true);
Camera Component をアタッチする
キャラクターのコンストラクタ内で、もう一度 SetupAttachment() を呼び出し、カメラ コンポーネントをファーストパーソン メッシュにアタッチします。 今回は、任意のオーバーロードを追加して、コンポーネントがアタッチされるメッシュの正確な位置 (ソケット) を指定します。
このチュートリアルで使用する SKM_Manny_Simple メッシュには、アニメーションで使用される事前設定済みのソケット (ボーン) のコレクションがあります。 コードのソケットは、FName 文字列を使用して参照できます。 キャラクターの頭の近くにカメラを配置するのが最善であるため、SetupAttachment に Head ソケット名を渡してそのソケットにカメラをアタッチします。 後でカメラをキャラクターの目の近くに移動します。
FName は、一意で不変の名前をメモリ効率の良い方法によって保存するために Unreal Engine で使用される特殊な文字列のような型です。
// Attach the camera component to the first-person Skeletal Mesh.
FirstPersonCameraComponent->SetupAttachment(FirstPersonMeshComponent, FName("head"));作成されるソケットとその作成方法の詳細については、「スケルタルメッシュ ソケット」を参照してください。
カメラを設定する
カメラ コンポーネントを初期化するときに、キャラクターの Head ソケットにアタッチしましたが、 キャラクターの目の位置に配置すれば、カメラからの見え方がより正確になります。 カメラはデフォルトで下を向いているため、キャラクターの頭の後ろに回り込むように回転させる必要があります。
カメラを所定の位置に移動・回転させるには、SetRelativeLocationAndRotation() を呼び出し、FirstPersonCameraOffset と、(0.0f, 90.0f, -90.0f) に設定された新しい FRotator を渡します。
// Position the camera slightly above the eyes and rotate it to behind the player's head
FirstPersonCameraComponent->SetRelativeLocationAndRotation(FirstPersonCameraOffset, FRotator(0.0f, 90.0f, -90.0f));ゲームプレイ中にカメラがキャラクターの回転に追従するようにするには、FirstPersonCameraComponent の bUsePawnControlRotation プロパティを true に設定します。 これによってカメラが親ポーンから回転を継承するため、キャラクターが回転するとカメラも回転します。
// Enable the pawn to control camera rotation.
FirstPersonCameraComponent->bUsePawnControlRotation = true;最後に、カメラに一人称視点視野角 (First Person Field of View) とスケール (First Person Scale) のレンダリング設定を追加します。 コンポーネントの bEnableFirstPersonFieldOfView プロパティと bEnableFirstPersonScale プロパティを true に設定します。 次に、先ほど宣言したデフォルトの視野角 (FOV) とスケールの値を代入します。
// Enable first-person rendering and set default FOV and scale values
FirstPersonCameraComponent->bEnableFirstPersonFieldOfView = true;
FirstPersonCameraComponent->bEnableFirstPersonScale = true;
FirstPersonCameraComponent->FirstPersonFieldOfView = FirstPersonFieldOfView;
FirstPersonCameraComponent->FirstPersonScale = FirstPersonScale;
キャラクターのコンストラクタは次のようになります。
// Sets default values
AAdventureCharacter::AAdventureCharacter()
{
// 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;
// Create a first person camera component
FirstPersonCameraComponent = CreateDefaultSubobject<UCameraComponent>(TEXT("FirstPersonCamera"));
check(FirstPersonCameraComponent != nullptr);
コードを保存し、Visual Studio で [Build] をクリックしてコンパイルします。
Unreal Editor でメッシュを割り当てる
カメラ制御は設定されましたが、エディタを使用してコードで宣言した変数にスケルタルメッシュ アセットを追加するという手順がまだ残っています。
キャラクター ブループリントにスケルタルメッシュを追加するには、次の手順を実行します。
開いていない場合は、Unreal Editor でキャラクター ブループリントを開きます。
[Components] パネルで、ルートの BP_[CharacterName] が選択されていることを確認します。
コードで
FirstPersonMeshComponentを作成したため、[Details] パネルの [Mesh (メッシュ)] セクションには、キャラクターに 1 つではなく 2 つの SkeletalMeshAsset スロットがあります。 各プロパティのドロップダウン メニューの矢印をクリックし、両方のメッシュに対してSKM_Manny_Simpleを選択します。FirstPersonMeshComponent を設定すると、カメラはキャラクターの頭の後ろの位置に移動します。
ブループリントを保存して [Compile] をクリックします。
ゲームをプレイして下を見ると、キャラクターの上に一人称視点メッシュが見えるはずです。 このメッシュは周りを見回すと回転し、カメラはその動きに一致します。 三人称視点メッシュはランタイム時に非表示になり、他のプレイヤーにしか見えません。 ただし、キャラクターは依然として静的な T ポーズになっているため、次に、アニメーション ブループリントでキャラクターにアニメーションを追加して命を吹き込む作業を完了します。
キャラクターにアニメーションを追加する
コードでは、ステートとその他の変数に基づいてスケルタルメッシュでブレンドして再生するアニメーションを決定するコントローラーである、UAnimInstance クラスのインスタンスを通じてアニメーション ロジックにアクセスできます。 また、アニメーション ブループリントも UAnimInstance から派生するため、UAnimBlueprint 型を使用して C++ で参照できます。
アニメーション インスタンス クラスのビルドは、このチュートリアルの範囲外であるため、その代わりに、キャラクターに一人称視点テンプレートの事前ビルド済みのアニメーション ブループリントを追加します。 このブループリントには、キャラクターがさまざまな移動アニメーションやアイドル アニメーションを再生するのに必要なアニメーションとロジックが含まれています。
Unreal Engine のアニメーションはメッシュ単位で設定されるため、一人称視点メッシュと三人称視点メッシュの両方で別のアニメーションが必要です。 三人称視点メッシュはゲームの開始時に非表示になるため、設定する必要があるのは一人称視点メッシュのアニメーションのみです。
キャラクターにアニメーション プロパティとアニメーション ブループリントを追加するには、次の手順を実行します。
キャラクターの
.hファイルの上部で、UAnimBlueprintクラスを前方宣言します。 このクラスは、プロジェクトのアニメーション ブループリントを表します。C++class UAnimBlueprint; class UInputMappingContext; class UInputAction; class UInputComponent;次に、
publicセクションでFirstPersonDefaultAnimという新しいUAnimBlueprintポインタを宣言します。UCLASS()マクロにEditAnywhereとCategory = Animationを指定します。C++// First Person animations UPROPERTY(EditAnywhere, Category = Animation) UAnimBlueprint* FirstPersonDefaultAnim;キャラクターの
.cppファイルのBeginPlay()内で、FirstPersonMeshComponent->SetAnimInstanceClass()を呼び出します。 コードでアニメーション インスタンス クラスを定義していなかったとしても、GeneratedClassを使用してアニメーション ブループリントからクラスを生成できます。C++// Only the owning player sees the first person mesh. FirstPersonMeshComponent->SetOnlyOwnerSee(true); // Set the animations on the first person mesh. FirstPersonMeshComponent->SetAnimInstanceClass(FirstPersonDefaultAnim->GeneratedClass);コードを保存して Visual Studio からコンパイルします。
Unreal Editor で、キャラクター ブループリントを再度開き、ルート コンポーネント BP_[CharacterName] を選択します。
[Details] パネルの [Animation (アニメーション)] で、[First Person Default Anim (一人称視点デフォルトアニメーション)] を
ABP_Unarmedに設定します。ブループリントを保存してコンパイルします。
キャラクターをテストする
[Play] を押してゲームをテストします。 下を見ると、動いたときに一人称視点メッシュ アニメーションが表示されます。 動き回ったりジャンプしたりして、このブループリントで制御されるさまざまなアニメーションを確認してみてください。
次の内容
次のセクションでは、キャラクターが取得して使用するアイテムの作成方法を学びます。
アイテムとデータを管理する
アイテム データ構造体、データ アセット、データ テーブルを使用してアイテムを定義し、アイテム データを保存して整理することでスケーラビリティを確保する方法を学びます。
完全なコード
このセクションで作成した完全なコードを以下に示します。
// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "Camera/CameraComponent.h"
#include "GameFramework/Character.h"
#include "EnhancedInputComponent.h"
#include "EnhancedInputSubsystems.h"
#include "InputActionValue.h"
#include "AdventureCharacter.h"
// Sets default values
AAdventureCharacter::AAdventureCharacter()
{
// 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;
// Create a first-person camera component
FirstPersonCameraComponent = CreateDefaultSubobject<UCameraComponent>(TEXT("FirstPersonCamera"));