BlendTreeの基本的な内容のまとめ
概要
最終更新日:2020/03/12
UnityのBlenderTreeの基本部分をまとめた記事です。
主に次の項目に該当する方に向けて書いています。
- BlendTreeの構成について知りたい
- モーションがブレンドされる流れが知りたい
- 重みとは何か知りたい
- しきい値とは何か知りたい
- BlendTreeのInspectorの各項目の内容を知りたい
この記事は仕組みの説明をメインとしています。
実装方法についてはこちらに書いています。
BlendTreeとは
BlendTreeとは複数のモーションをブレンドする機能で、
これによってモーションの切り替えを滑らかに行うことができます。
例えば歩くと走るモーションに対してBlendTreeを使えば、
歩いているモーションから、徐々に走り出すモーションになって、
最終的に走るモーションにすることができます。
上の動画は歩くモーションから走るモーションに切り替えています。
左がBlendTreeを使用しており、右が通常のステートマシーンを使っています。
左は歩きから徐々に走り出す動きをしていて、右は歩きから突然走りに変わります。
このようにBlendTreeを使用するとモーション切り替えを
自然な流れで行うことができます。
BlendTreeの構成
BlendTreeはその名の通り木構造になっており、
最初にあったプレートは木構造の根っこです。
木構造の要素の事をノードと呼ぶので、これ以降はプレートの事をノードと呼びます。
また、根っこにあたるノードのことをルートと呼びます。
木構造はノードを新しいノードをつないでいきます。
繋がったノード間でルートに近いノードを「親」と呼び、
ルートから遠いノードを「子」と呼びます。
上の図の親子関係は次の通りです。
親 |
子 |
BlendTree |
WALK00_F |
BlendTree |
RUN00_F |
子ノードを持てるノードはBlendTreeだけです。
MotionにはBlendTreeを追加することはできないので注意してください。
アニメーションステートマシーンの構造
BlendTreeのWalkAndRunをダブルクリックするとBlendTree編集画面に移動しますが、
これはEntryなどがある画面からWalkAndRunに移動しています。
アニメーションステートマシーンはLayerと呼ばれる階層構造になっており、
最初の画面は「Base Layer」と名付けられています。
このLayerにBlendTreeを作るとBaseLayerとは別のLayerが作成されます。
BaseLayerの上か下に新しいLayerが出来るイメージです。
アニメーションステートマシーンのLayerは親子関係になっており、
Layer間の情報のやり取りは親子関係にあるLayerしかできません。
(主に子から親に情報を渡すようになっています)
ステートマシーンのLayer間の移動方法
画面上でのLayer間の移動方法は二つあり、その内の一つは作成の時に行った、
BlendTreeをダブルクリックすることです。
BlendTree編集画面ではBlendTreeが保持する全てのノードを表示されていますが、
その中のBlendTreeをダブルクリックするとそのノード以降の情報だけが表示されます。
もう一つは、画面上段にあるLayerリストのどれかをクリックすることです。
Layerリストは表示されている画面までのLayerを順番に表示しています。
上の絵の赤枠の内容は「BaseLayer => WalkAndRun」の順番に並んでいるので、
BaseLayerからWalkAndRunのLayerに移動したということがわかります。
このLayerの名前をクリックしたら、そのLayerに移動することができます。
例えばBaseLayerをクリックしたら、BaseLayerの画面に移動します。
BlendTreeの流れ
BlendTreeは子供から親に向かってブレンドしたモーション情報を渡していきます。
図の流れは以下の通りです。
- 方向別の歩きモーションのブレンドを行い、結果をWalkノードに渡す
- 方向別の走りモーションのブレンドを行い、結果をRunノードに渡す
- ①と②で渡された結果でWalkとRunのブレンドを行い、結果をMoveに渡す
- ③の結果を今回のモーションとして使用する
BlendTreeノードのInspector項目
BlendTreeノードでは以下の項目を設定することができます。
ノード名:
ノードの名前
BlendType:
ブレンドの種類 1Dは1種類のパラメータを使用してブレンドを行う
Parameter:
ブレンドで使用するパラメータ
ブレンドグラフ:
モーションの値に基づいたブレンド情報を可視化したグラフ
Motion:
ブレンドするモーション or BlendTreeノード
※各項目は別途説明
Automate Thresholds:
自動しきい値設定:しきい値の範囲をモーションの数で均等に重みの設定をする
Compute Thresholds:
モーションに設定されている情報を使用してしきい値を設定する
Adjust Time Scale:
モーションの速度変更によるブレンド調整反映とリセット設定ができる
重みとは
重みとは各モーションのブレンドの割合です。
例えば歩きの重みが50%、走りの重みが50%の場合は、
歩きと走りが半々でブレンドされるため、小走りに近い動きになる可能性が高いです。
※可能性と書いているのはモーションの内容によるからです。
重みのルールとしてブレンドするモーションの割合の合計は必ず100%にします。
100%を超えたり、下回ったりする設定にはしません。
歩きの重み |
走りの重み |
合計 |
ルールの合否 |
50% |
50% |
100% |
合格 |
20% |
50% |
70% |
不合格 |
0% |
100% |
100% |
合格 |
90% |
20% |
110% |
不合格 |
上の表では不合格を表すために100%以外になる値が設定していますが、
実際は設定したしきい値に基づいて、Unityが重みの計算をしてくれるので、
開発側がそこまで気にする必要はありません。
ただし、同じ値のしきい値を設定しないでください。
重みの計算がおかしくなり、モーションがバグります。
しきい値については次の項目で説明します。
しきい値とは
BlendTreeにおけるしきい値とは重みが100%になるパラメータの値です。
重みはパラメータの値によって変動していきますが、
必ず各モーションの重みが100%になるパラメータの値があります。
この値がしきい値です。
下の図のように各モーションのグラフのY軸の位置が最も高い位置は
しきい値(Threshold)が設定されている場所になっています。
Motion項目
BlendTreeのMotionの項目では以下の内容を設定できます。