ふわーりんの勉強まとめ

勉強したことを忘れない為のブログ

UE4でMAYAやBlenderを使用せずに既存アセットの組み合わせでアニメーションを作成する。

今回はゲーム作成などを作成する際にMAYAやBlenderなどのDCCツールを一切使用せずにUE4上の機能を使用してアニメーションを作成していく方法を紹介します。

 

 

使用環境

今回使用したものはUnrealEngine4のVersion4.22.3です。

使用アセット

使用アセットは以下のとおりです

f:id:konapurinn:20190921132408p:plain

GenericNPCAnimPack

https://vimeo.com/260579397

 

使用するアニメーション

以下の2つのアニメーションを使用します。

f:id:konapurinn:20190921130916g:plain

Anim_Talking_1

 

f:id:konapurinn:20190921130639g:plain

Anim_Sit_Bench_1

 

Anim_Talkingの上半身のパーツとAnim_Sit_Bench1の下半身のパーツ組み合わせて以下のようなアニメーションを表示します。

 

f:id:konapurinn:20190921134757g:plain

 

作成手順

 作成する手順としては

  1. アニメーションをブレンド
  2. アニメーションの書き出し  の2つになります。

 

それでは解説に移ります。

 

アニメーションをブレンドする。

UE4にはアニメーションをブレンドする「Layered blend per bone」というノードがあります。(エディタが日本語の場合はボーン毎のレイヤードブレンドで表示されます)

 

 

Layered blend per bone

LayerSetUpで指定したボーンの下の階層から

BasePoseピンにつなげたアニメーションとBasePoses0ピンにつなげたアニメーションをBlendWeightの値でブレンドします。

 BlendWeight=0なら ブレンドなし

 BlendWeight =1なら BasePoses0ピンのアニメーションをブレンド

(もし間違っていましたらコメント下さい)

f:id:konapurinn:20190921154007p:plain

※ドキュメント

 https://docs.unrealengine.com/en-US/Engine/Animation/NodeReference/Blend/index.html

 

 

それでは実装します。

まずはAnimationMontageを作成する際に指定したSkeltalMeshのAnimationBlueprintを作成します。

 

f:id:konapurinn:20190921154357p:plain

AnimatioBlueprint作成

今回はMyAnimBlueprintという名前で作成しました。

 

作成したMyAnimBlueprintを開きアニムグラフから「Layered blend per bone(ボーン毎のレイヤードブレンド)」ノードを作成します。

 

次にアセットブラウザタブからAnim_Talking_1とAnim_SitBench_1をドラッグ&ドロップしBasePoseピンにAnim_Talking_1をBlendPoses0ピンにAnim_SitBench_1ピンをつなぎBlendWeightを1.0にします。

 

そうすると次のような画面になります

f:id:konapurinn:20190921211415g:plain

 

まだこの段階ではAnimTalking_1のアニメーションが流れたままです。

次からブレンドさせていきましょう。

 

「Layered blend per bone(ボーン毎のレイヤードブレンド)」を選択し詳細タブからLayerSetUpを選択しBranchFiltersのエレメントを追加します。

f:id:konapurinn:20190921173249p:plain

 

エレメントを追加すると次のような画面になります。

f:id:konapurinn:20190921173314p:plain

ここで指定するボーン名はアニメーションをブレンドさせるボーンの起点になります。

ここで指定したボーン階層より下の階層のボーンがブレンドされます。

 

わかりにくいと思いますので今回のアニメーションに例えてみましょう

今回はAnimTalking_1の上半身の部分とAnim_SitBench_1の下半身の部分を組み合わせたアニメーションを作成したいです。

ボーン構造を見るために一旦スケルトンを開きます。

f:id:konapurinn:20190921173044p:plain

 

ケルトンを開くと左側にボーン構造が表示されています。

f:id:konapurinn:20190921173139p:plain

今回は足の部分でブレンドをさせたいので

thigh_l
thigh_r

の部分になりますね

 

再度MyAnimBlueprintを開き「Layered blend per bone(ボーン毎のレイヤードブレンド)」を選択して先程のBoneNameの部分にthigh_lを記述します。

このままでは左足のみブレンドになってしまうのでBranchFiltersのエレメントをもう一つ追加しBoneNameにthigh_rを記述します。

f:id:konapurinn:20190921173225p:plain



これでコンパイルをかけると以下画面にようになります。

 f:id:konapurinn:20190921211618g:plain

 

これでアニメーションのブレンドが完了しました。

次にこのアニメーションの書き出しを行います。

 

 

 

UE4のアニメーションには録画機能があり

アニメーション中に録画ボタンを押すとAnimatioBlueprint中のアニメーションを録画し、アニメーションシーケンスに書き出すことができます。

MyAnimBlueprintを開きプレビュー画面の下に以下のようなボタンがあります。

f:id:konapurinn:20190921175813p:plain

左から録画ボタン

再生・一時停止ボタン

次へボタンになります

 

再生・一時停止ボタンを押下しアニメーションを止め

現在再生されているアニメーションを最初の初期位置に戻します。

f:id:konapurinn:20190921175930p:plain

 ※一時停止ボタンを押すと上記画面のように一時停止ボタンのアイコンが再生ボタンに変更されます。

 

次に録画ボタンを押下し、新規のアニメーションシーケンスを保存する場所を指定します。

f:id:konapurinn:20190921180102p:plain

 

 今回はMyAnimationという名前で保存しました。

 

場所を指定すると録画が開始するのでアニメーションが1モーション終わったところで録画ボタンを押せば書き出し完了です。

※アニメーションの録画が成功した際には画面右下に以下のようなウィンドウが出ます。

f:id:konapurinn:20190921180334p:plain

 

無事に書き出されました。

 

f:id:konapurinn:20190921180733p:plain

最後にアニメーションの切り取りを行います。

録画した際は止まっている状態から録画されているので最初から数フレームはとまったままで表示されています。

これでは良くないので止まっている部分を切り取ります。

 

先程作成したMyAnimationを開きます。

アニメーションが再生されているので一番下にあるシークバーを選択します。

f:id:konapurinn:20190921181352p:plain

アニメーションを停止させ、シークバーでアニメーションが停止している部分で右クリックをしフレーム0~n値まで削除を選択します。(サンプルでは48フレームでした。)

f:id:konapurinn:20190921181648p:plain



以上でアニメーションの作成が完了です。

あとは従来のアセットの通りにアニメーションを組み込むことができます。

 

また今回スケルトンデータが同じものでやりましたが、ボーンのリターゲットを行えば同じような方法でアニメーションブレンドができると思います。

※検証はしていないです。

 

最後に

この機能を使用しぷちコンにゲームを応募しました。

動画がありますのでご覧下さい。

https://youtu.be/wU11vDRHabo

 

ダウンロードリンクは以下にありますのでよければ遊んでください。

 

https://drive.google.com/open?id=1JX7Q90UQFPyznw3ERsZ2PO4xqt5dG7_N

 

 

 

C# regionディレクティブ

振り返ってみると前の記事からおよそ1年・・・

全然更新していませんでした。すみません

 
ここからが本題です。

UnityなどでC#スクリプトを書いているときにメソッドを探す時いちいちスクロールするの面倒くさいなぁ~メソッドや変数の宣言を折りたたむことができればなぁ
と思い調べてみればregionディレクティブという良い機能がありましたので使ってみました。
 
はじめにディレクティブを使用しているスクリプトと使用していないスクリプトでエディタ内の表示比較してみます。

続きを読む

UE4 Loopool備忘録(壁づりベクトルを反射ベクトルにする)

ヒストリア様主催のぷちコンで以下のゲームを作成しました。

 

www.youtube.com

 

オリジナルルールのピンボールゲームなのですが、そこで詰まった部分等を備忘録として残していこうと思います。

 

今回はボールの反射についてです。

UnrealEngine4では物理操作をエンジンに組み込んでいるので

そこまでつまらずに作成できるかなと踏んでいましたが、

作成途中こんな現象が起こりました。

 

youtu.be

 

 

理想としてはボールが壁にあたった時に反射角にボールを移動させたいのですが、反射せずに壁にそって移動してしまいます。

これを反射角に移動させたい場合はプロジェクト設定を変更する必要があります。

 

プロジェクト設定→エンジン→Phisycsから

「BounceThreholdVelocity」の値を0に設定します。

※デフォルトは200

 

f:id:konapurinn:20180422230242p:plain

 

このオプションはオブジェクトを反射させる際に、最低限必要な速度の値を設定します。

(間違っていたら指摘ください)

デフォルトでは200になっているので、反射させるにはボールの速度が200必要になります。

 

今回のゲームの仕様では速度に関係なく反射させたかったので、0に設定しました。

 

これを設定した動作が以下のようになります。

youtu.be

 

理想通りに反射角に移動することができました。

 

作成してるゲーム等で反射が思っていた動作と違う際に確認してみると良いかもしれません。

 

参考:「https://answers.unrealengine.com/questions/453130/physics-object-dont-bounce-at-low-angle-and-speed.html

 

はじめまして

はじめまして、ふわーりんといいます。

UE4を使用したゲーム制作を趣味としているのですが、自分で勉強したことを復習も兼ねて見返しができるものがほしい!
ということでこのブログでは、自分が過去に作成した作品をどんな風に作成したのか?などを記述していこうと思います。

ではでは~ノシ