俺に解るように説明する "Godot Engine 3.x" 入門+

ゲームエンジン Godot Engine に関すること。入門とか使い方とかチュートリアルとか、あれとかこれとか。日本語解説。

Godot キャラコン 19 「dae の import とanimation あれこれ」 5/6

今回は「AnimationTreePlayer」の使い方を分かった範囲でまとめる。複数のアニメをブレンドするってやつね。で、忘れないように先に書いとこう、今回の第1ポイントは、[Master Player][Assign] だ。しないと tree が作れんぞ。第2ポイントは [Base Path] の設定だ。しないと「おばさん」が動かんぞ。

f:id:ore2wakaru:20180510110039p:plain


シーンの変更

[0]

前提として、前回作ったメインシーン(snMain)とdaeから作ったシーン(snBodyF02)がある事。

[1]

メインシーンの方に「AnimationTreePlayer」を追加する。

f:id:ore2wakaru:20180510065952p:plain

それだけ。


tree を作る(前半)

[0]

AnimationTreePlayer」を追加すると(又は、選択すると)、下部のパネルが AimationTree 設定用のものになる。ここで tree を作るのだが、「Output」ノードは最初から出てる。これから、これより前に色々ノードをくっつけて作る。

f:id:ore2wakaru:20180510071104p:plain

[1]

f:id:ore2wakaru:20180510072544p:plain

  1. Output」はD&Dして後ろの方にずらしておく。
  2. [+] を押して追加するノードのメニューを出し、
  3. [Animation Node] をクリック。

すると、アニメーションノードが追加される。

f:id:ore2wakaru:20180510072950p:plain

[2]

ちなみに、ノードのタイトル辺りで右クリすると、「1.リネーム」と「2.リムーブ」が出来る。三角形(▶)の辺りで右クリすると、つないだ線を外せる。(「3.ディスコネクト」)

f:id:ore2wakaru:20180510073936p:plain

[3]

ここで、[load..] からdaeの持つアニメを設定しようとしても、何も出てこない。(たまに。なんでか知らんけど、変な所にメニューが出る時がある。バグかな。)

f:id:ore2wakaru:20180510074328p:plain

これはインスペクタで、この「AnimationTreePlayer」が、どこにある「AnimationPlayer」にリンクするかの設定をしていないから。アニメーションは「AnimationPlayer」が握っているのでな。


インスペクタの設定

[0]

インスペクタで、「1.Master Player」「2.Base Path」「3.Active」の設定をする。

f:id:ore2wakaru:20180510080240p:plain

  1. 初期値は空っぽ
  2. 初期値は ".."
  3. 初期値は "Off"(チェック無し)

[1]

[Master Player] の設定。

tree に作ったアニメーションノードにロードしたいアニメを握っている「AnimationPlayer」の場所を設定する。今回は、その「AnimationPlayer」が他のシーンにあるので、ちょっとめんどくさい。ただ、メインシーンに既にリンクしてあるので、なんとかなる。

点線で囲った部分をクリックしてからパスを手打ちすればいいのだが、その右に実線で囲ったアイコンをクリックして [Assign] する方法がある。

f:id:ore2wakaru:20180510083426p:plain

ただ、普通にアイコンをクリックしても目的の場所が出てこない。(「Scene Root」の中にあるんだが、そこを展開してくれない感じで、選択できない。)

f:id:ore2wakaru:20180510084001p:plain

なので、シーンパネルから、「Scene Root」を右クリして、[Editable Children] を有効にする。

f:id:ore2wakaru:20180510084423p:plain

すると、親シーンからノードが見えるように(編集出来るように)なる。

f:id:ore2wakaru:20180510084823p:plain

この状態から、「AnimationTreePlayer」を選択 > インスペクタのさっきのアイコンクリック > [Assign] > 「AnimationPlayer」選択可能、となる。で、もちろん選択する。

f:id:ore2wakaru:20180510085547p:plain

インスペクタパネルを見ると、みごとに情報(パス)が入っているハズ。これで、どこの「AnimationPlayer」が持ってるアニメを操作するのか指定出来たわけだ。

f:id:ore2wakaru:20180510090326p:plain

もう、[Editable Children] は無効にして構わない。(もう1回クリックすればチェックが外れる。)

[2]

[Base Path] の設定。

よく分からないけど、ここは「AnimationPlayer」の親ノードを指定する。だから、"../Scene Root" となる。じゃないとエラーが沢山出てスクリプトから「おばさん」を動かせない。どうもボーンが見つけられないようだ。

f:id:ore2wakaru:20180510110011p:plain

[3]

[Active] の設定。

勝手に "On"(チェックあり)に変わってる感じ? チェックが入ってなかったら、入れること。チェックが入っている状態で、かつ tree で作成したアニメが有効な場合、dae は「Output」に届いたアニメーションを常に行う事になる。Play()とか指示しないでやっっちゃう感じ。止めたかったら、スクリプトでここを "Off" に。

と思ったんだが、なんか違うんだよな・・・なんだろか?

ちなみに [Master Player] の設定さえしてしまえば、tree の方のアニメーションノードに dae が持っているアニメをロード出来る事はできる。


tree を作る(後半)

[0]

[load..] クリックで、アニメが選択できるようになった。「AnimationTreePlayer」から、「AnimationPlayer」の持つアニメにアクセスできるようになった感じか。

f:id:ore2wakaru:20180510091427p:plain

[1]

アイドルアニメとウォークアニメをブレンドしたいので、もうイッコアニメーションノードを追加して、アイドルアニメとウォークアニメをロードする。

f:id:ore2wakaru:20180510091858p:plain

[2]

今回は「Blend2 Node」を使って、2つのアニメのブレンドをする。これはアニメAとアニメBBlend値 を使って何対何で混ぜ合わせるか決めるもの。

  • Blend値 "0" なら、100%アニメA
  • Blend値 "0.5" なら、50%アニメA + 50%アニメB
  • Blend値 "1" なら、100%アニメB
  • Blend値 は "0~1" で設定。

こんな感じに混ぜたものを出力する。結構大変なことをやってる気がするけど、線をつなげるだけで出来ちゃうって、何かすげーな。

f:id:ore2wakaru:20180510094234p:plain

[3]

ふつーに三角形(▶)をひっぱって線をつなげる。そうすると、左上の表示が "Animation tree is valid" に変わる。これは、つくったアニメ tree が有効だって事。

f:id:ore2wakaru:20180510095432p:plain


あとはスクリプトで・・・

Blend値をゴニョゴニョしてアニメさせれば、アイドル・ウォーク間の遷移がスムーズなものが出て来るハズ。

次回スクリプト