UnrealEngine4研究所

UnrealEngine4の研究/開発をしてます。ガルルソフトウェア研究所です。

2016年11月

Dynamic Sword Animset

■アニメーションアセットを使ってみるよ!

EpicGames社のCyber Monday Saleで欲しかったUE4アセットを片っ端から衝動買い。無駄にしないためにもアセットの使い方をメモっていきます。

  Dynamic Sword Animset


asset01

ゴールデンアックスを作りたくなったときに必要になるので買った。自分でうまく作れないモーションだけにとても価値があるが、今まで5000円オーバーすることを躊躇していた。しかしセールで半額の今なら買える、今しかないって思って買った。いっぱいモーションが入っていることに期待。


 ■買ってみて

いいね!実際には101ものモーションが入っていた。1つあたり30円と考えれば安いなぁ。中にはInPlaceっていう位置を動かないデータが101RootMotionっていう位置移動を伴うモーションが46モーション入っていた。RootMotion46モーションはInPlaceに入ってるモーションと同じアクションではあるが位置移動を伴う。その場で昇竜拳(弱)モーションを行うのがInPlace、画面上方向にジャンプしながら昇竜拳(強)を繰り出すのがRootMotionっていうイメージ。同じモーションだけど動きが違う。当たり判定のつけ方も異なる。

その他にはシールドと剣のモデルも入っていた。


■使い方

ThirdPerson」テンプレートを例にとると「ThirdPersonCharacter」のブループリントを編集する。マネキンに剣を持たせてアニメさせてみる。

 

[モデルの登録]

MeshのSkeltalMeshSK_Mannekinのモデルを割り当てる。

AnimationUse Animation Assetを選択し、適当なモーションを選択

 ※例)AnimToPlayの項目で[Idle_Eqip_01]を選択

 

[剣の登録]

・「ThirdPersonCharacter」にスケルタルメッシュ・コンポーネントを追加

Swordを割り当てる

 

[剣をモデルにアタッチする]

・「AttachToComponent」を使って剣とマネキンを関連付ける


asset02

とりあえず、ここまでで剣を持ったグレーマンをアニメさせることができる

次は剣を振って攻撃させてみたい。

 

[剣を振って攻撃する]

剣を振って攻撃させるのは、少し複雑である

さっきは固定のアニメーションを指定するだけだったが、次はステートマシンを使ってアニメを変更させることにする。そのために新規に「アニメーションBP」を作成して「ステートマシン」を設定することになる。

まず、コンテンツブラウザーからアニメーション>アニメ―ションBPを選択。AnimInstanceとターゲットSK_Mannekin_Skeltonを指定。名前を「SwordAnime」と名付けた。

 

[SwordAnimeの割り当て]

・まずメッシュに設定したアニメのモードを「Use Animation BP」に変更

 ※「Use Animation Asset」からUse Animation BP」に変更する。

Anim Classに新規作成した「SwordAnime」を割り当てる

SwordAnimeを開いて「グラフ」モードにする

・グラフモードの「アニムグラフ」を選択

asset03


[デフォルトのステートマシンを追加する]

ここではステート(状態)を管理、遷移させるためのステートマシンを作成する

追加されるのはステートマシンであってステートではない。ステートはステートマシン内で作成する

 

・まずグラフ上で「add state」として新規ステートマシンを追加

・名前を「default」とする

asset04

[デフォルトのステートマシン中身を作成する]

・defaultをダブルクリックして中に入る

defaultのステートマシンには、idleattackの2つのステートを用意する

・2つのステートは相互に移動しあう

・ここでは120フレーム目でattackに移行し、300フレーム目でidleに帰ってくる


asset05

※図1

 

・ステートの変更条件は、それぞれの線の上のアイコン(A/B)で設定できる

・まずはAをダブルクリック

・条件はいつもとおんなじようにBPで書ける

asset06

※図2

 

Aの条件設定では120フレーム目で「Can Enter Transition」がTrueに変更になる

Trueになると図1のステートが「idle」から「attack」に変更される

asset07

図3

 

・これがBの遷移条件

・300フレームになるとAttackからidleに遷移する

 

そうそう、AnimSeqはイベントグラフで設定しています。

フレームの値で、毎フレームカウントアップして480フレーム目で0に戻しています。

asset08


できた!


asset09

とりあえず$30ぶんは楽しめそうになった

[参考]

http://unrealengine.hatenablog.com/entry/2016/11/22/213000


ビヘイビアツリーの極小サンプル

ビヘイビアツリーを使ったAIについて取り組んでみたので、できるだけシンプルにして覚え書き。

やりたいAIは以下の2点
・敵に自分を目標にして移動してほしい
・移動の際に、迷路を解析して障害物を迂回してほしい
102605

これを再現するために必要なことは以下の3点
・迷路のデータ化
・迷路の自動解析
・敵の移動用の思考パターン(探す、走る、休むを繰り返す)の策定

これらをCとかでプログラミングしていく過程を想像する。
・迷路データ:まあ平面の単純なものなら2次元配列で作れる。
・迷路解析:Aスターアルゴリズムあたりで解析。
・移動ロジック:確定した経路を順番に移動させるシーケンス制御をつくる

これらを例えば以下のような仕組みでプログラミングせずになんとかできないか?
・迷路データ
 ・・・ポリゴンモデルの壁をステージにおいて迷路を直接構成したい
・迷路解析
 ・・・・・ステージを解析して迷路データを自動作成したい
・移動ロジック
 ・・・・・探す、移動する、止まる、をフローに書いて動いてほしい

こんな都合の良いツールはゲーム本編の制作よりも大変そうでわがままなんだけど、UE4は各種ツールでこれをフォローして僕のわがままを聞いてくれる。しかも迷路データは2次元じゃなく立体的な交差にも対応していてすごい。

・迷路データ
 ・・・立方体やポリゴンモデルの壁をステージにおいて迷路を直接構成できる
・迷路解析
 ・・・ナビメッシュでステージを解析して迷路データを自動作成できる
・移動ロジック
 ・・・探す、移動する、止まるを「ビヘイビアツリー」に書いて、そのとおりに動かせる

既存のプロジェクト(TwinStickシューター)で実装してみた。
・敵キャラ
 ・・・キャラのメッシュとAIControllerを割り当てられたPAWN
・AIController
 ・・・プレイヤーとビヘイビアツリーを関連付けているコントローラー
・ナビメッシュ
 ・・・迷路データを自動生成するための立方体
・ビヘイビアツリー
 ・・・AIのタスク(探す、移動する、休む)をフローで設定
・ブラックボード
 ・・・・各タスク間で情報を共有するためのメモ用紙

ナビメッシュはステージ中の迷路に当たる部分をざっくり立方体で包むことで作ることができる。ビヘイビアツリーでは、探す、移動する、休むの3つのタスクが設定されていて、これらと関連付けられた敵キャラがAIControllerを通じて移動してきます。

これを実現したUE4の極小プロジェクトをおいておきます。
TwinStickシューターに敵キャラを追加して、自分の位置をめがけて移動するサンプルです。目的地に到着したら2秒休んで、また自分の位置を補足する、を繰り返します。

ビヘイビアツリーの極小サンプル 

注意するべきは、PAWNで「移動する(MoveTo)」タスクを実行するときはコンポーネントに「FloatingPawnMovement」を追加してやること。敵キャラがCharacterの場合は問題ないが、PAWNの場合はこのコンポーネントを追加しておかないと「MoveTo」できないので注意。
102610

ギャラリー
  • 第6回ぷちコン入賞賞品がスゴい、開封の儀!
  • 第6回ぷちコン入賞賞品がスゴい、開封の儀!
  • 第6回ぷちコン入賞賞品がスゴい、開封の儀!
  • 第6回ぷちコン入賞賞品がスゴい、開封の儀!
  • 第6回ぷちコン入賞賞品がスゴい、開封の儀!
  • 第6回ぷちコン入賞賞品がスゴい、開封の儀!
  • 第6回ぷちコン入賞賞品がスゴい、開封の儀!
  • 第6回ぷちコン入賞賞品がスゴい、開封の儀!
  • 第6回ぷちコン入賞賞品がスゴい、開封の儀!
  • ライブドアブログ