Unreal Engine : C++でキャラクターをアニメーションさせて動かす

スポンサーリンク

C++アニムインスタンスクラス

新たにC++アニムインスタンスクラスを作成します。コンテンツ→C++クラス→プロジェクト名フォルダに入ってから右クリックで新しいクラスを作成します。親クラスを選択で、全てのクラスを表示にチェックを入れてから検索窓にaniminstanceと入力して、出てきたAnimInstanceを選択して次へボタンを押します。次の画面で好きなクラス名を入力して新規にAniminstanceクラスを作成します。

Animinstance.hに以下のように入力します。

UCLASS()
class MYPROJECT_API UMyAnimInstance : public UAnimInstance
{
	GENERATED_BODY()
public:

	virtual void NativeInitializeAnimation() override;

	UFUNCTION(BlueprintCallable, Category = Animation)
	void UpdateAnimationProperties(float DeltaTime);

	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Movement)
	float Speed;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Movement)
	bool bIsAccelerating;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Movement)
	bool bIsInAir;

	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Movement)
	class AMyCharacter* MyChar;
	
};

Animinstance.cppに以下のように入力します。

#include "MyAnimInstance.h"
#include "GameFramework/CharacterMovementComponent.h"
#include "MyCharacter.h"

void UMyAnimInstance::NativeInitializeAnimation()
{
	if (MyChar == nullptr)
	{
		MyChar = Cast<AMyCharacter>(TryGetPawnOwner());
	}
}

void UMyAnimInstance::UpdateAnimationProperties(float DeltaTime)
{
	if (MyChar == nullptr)
	{
		MyChar = Cast<AMyCharacter>(TryGetPawnOwner());
	}
	if (MyChar)
	{
		FVector Velocity = MyChar->GetVelocity();
		Velocity.Z = 0;
		Speed = Velocity.Size();
		bIsInAir = MyChar->GetMovementComponent()->IsFalling();
		if (MyChar->GetCharacterMovement()->GetCurrentAcceleration().Size() > 0.f)
		{
			bIsAccelerating = true;
		}
		else
		{
			bIsAccelerating = false;
		}
	}
}
スポンサーリンク

アニムインスタンスブループリント

次に、Blueprintフォルダーに入ってアニメーションBPを作成します。

Animinstanceを選択して、スケルタルメッシュには自分のキャラのメッシュを選択します。

適当に名前を変更してファイルを開きます。

ファイルが開いたら、ブループリントの親を変更を選択して親を変更します。

親はC++クラスのMyAniminstanceを選択します。

イベントグラフエディタ内で右クリックして検索窓にupdateと入力し、候補の中からUpdate Animation Propertiesを選択します。

呼び出した関数を元からあったイベントと接続します。

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

スポンサーリンク

ステートマシン

AnimGraphに移動後、エディタ内を右クリックして検索窓にstatemachineと入力して新規にステートマシンを作成します。

新しいステートマシンに適当に名前を付けます。

ステートマシンをダブルクリックして中に入ります。エディタ内を右クリックしてステートを追加を選択します。

新ステートに適当な名前を付けてダブルクリックして中に入ります。アセットから作成したブレンドスペースをエディタ内に引っ張ってきます。

エディタ内で右クリックして検索窓にmovementspeedと入力してGet Movement Speedを選択します。

Get Movement Speedとブレンドスペースとアニメーションポーズを出力を接続後コンパイルして保存します。

AnimGraphに戻って新規作成したステートマシンと出力ポーズを接続してコンパイルします。保存も忘れずに押しましょう。

スポンサーリンク

キャラとアニメーションを紐づける

Character_BPを開いてメッシュを選択します。

アニメーション項目のAnimation ModeでUse Animation Blueprintを選択して(デフォルトでそうなっているので変更する必要はありません)、Anim Classに自分で作成したAnim_BPを選択します。

コンテンツ->C++クラス->プロジェクト名に移動し、GameModeBaseクラスを元にブループリントを作成します。

適当に名前を付けて、コンテンツ内に新たに作成したGameModeフォルダを選択します。

詳細タブではなくワールドセッティングタブを選択します。

ゲームモードオーバーライドで新規作成したゲームモードブループリントを選択します。

これでプレイボタンを押せばゲームが開始し、コントローラを使ってキャラをフィールド内を前後左右に動かすことができます。次回はターンやルックアップの設定をします。

スポンサーリンク
スポンサーリンク

コメント

タイトルとURLをコピーしました