1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

UE4のアニメーションメタデータ(追加パラメータ)を仕込む

Posted at

#概要
UE4のアニメーションアセットはメタデータというユーザー定義の追加パラメータを仕込めるようになっています。アニメーションシーケンス、モンタージュどちらでも)

メタデータはUAnimMetaDataというクラスを継承することで定義できます。
が、自分の確認した範囲ではC++からしかアクセスできないようです。
(BPからのアクセス方法をご存じの方は教えてくだされ)

今回はこいつを使ってアニメーションアセットにゲーム独自の追加パラメータを仕込んでやろうというお話です。

#どんなのデータを定義するか?
今回は次の2項目を定義してみよう。

  • 別のモーションでキャンセル可能か?(bool)
  • モーション中は重力が働かないようにするか?(bool)

メタデータの定義(C++)

UAnimMetaDataを継承してメンバ変数を持たせてやる。
ブループリントでもクラス自体は作れるが、アクセスはC++からしかできないので、クラスもC++上で作ろう。


#include "Animation/AnimMetaData.h"

UCLASS()
class RUNNERSHIGH_API UMynimMetaData : public UAnimMetaData
{
	GENERATED_BODY()
public:
	//このアニメーションは中断してもいいやつ?
	UPROPERTY(EditAnywhere)
	isCancelable = true;
	
	//このアニメーションの再生中は無重力?
	UPROPERTY(EditAnywhere)
	isUngravity = true;

	UMyAnimMetaData() {}
};

#メタデータへのアクセス(C++)

次はアニメーションを再生しているキャラクター側でメタデータにアクセスできるようにしてみよう。


bool AMyCharacterBase::GetIsCurrentMontageCancelable()
{
	//再生中のモンタージュを取得
	auto currentMontage = GetCurrentMontage();
	
	if (IsValid(currentMontage))
	{
		//モンタージュからメタデータを取得する
		auto metaArray = currentMontage->GetMetaData();

		//メタデータが入っていたら
		if (metaArray.Num() > 0)
		{
			//先頭のメタデータを取り出して
			auto metadata = Cast<UMyAnimMetaData>(metaArray[0]);
			if (IsValid(metadata))
			{
				//情報を返す
				return metadata->isCancelable;
			}
		}
	}
	return false;
}


これでC++側の準備は完了。

#実際に使ってみよう
ここからはGUI側で実際に使ってみる。

アニメーションアセットを開いてアセット詳細を見ると、さっそくメタデータとして今作ったクラスが登録できるようになっている。すばやいな。
再生時にこれらのフラグを取得し、対応した処理をすることで、アニメーション毎に挙動を細かく設定することができるというわけだ。

キャプチャ2.PNG

ブループリントからC++の関数にアクセスしてデータを取ってこれる。
キャプチャ3.PNG

UE4のアニメーションモンタージュはイベント発行やセクションを駆使して高機能なタイムラインツールとして使えるが、このメタデータを使えば更なる一歩を踏み出せる。
続きは君の眼で確かめてみろ!

おわり。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?