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

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

Alicia in Godot Land #06.1「アニメーションから関数(ファンクション/メソッド)を呼び出す方法」

f:id:ore2wakaru:20190813102042p:plain

YouTubeのコメントで、椅子から立ち上がる時にアリシアがテーブルのメッシュと一瞬重なるのが気になったのか、「コリジョンチェックのタイミングを変えてみたら~?」との内容のご指摘があって、最初は「何言ってやがるんだ、勝手なことを!」と思っていたんだが、実際にちょっと自分で工夫してコリジョン再有効化のタイミングを変えてみたら、すげーよくなったわ! サンキュー、コメントくれた人! 君の友情は忘れない。


Before / After

 Before

まー、俺も動画の中でメッシュが重なるのが気にはなっていたんだが、「ま、いっか、これくらい。」と流すつもりだった。だから、コメントもらった時は、正直「めんどくせーヤツだなー。」と思ったわけさ。以下画像は修正前。

f:id:ore2wakaru:20190813072401g:plain

実際のコメントは「コリジョンを立ち上がる前に有効化させてみたら?」っていう内容だったんで、「立ち上がる前コリジョンを再有効化したら、メッシュは重ならなくなるけど、アリシアと椅子の挙動が不自然になるなー。」って思ったんだよ。で、実際にやってみたら、やっぱり不自然だった・・・。

 After

だけど、もうちょっと考えたら「立ち上がり中コリジョンの再有効化をすれば、自然に見えるんじゃね?」ってひらめいたわけさ。以下画像は修正後。

f:id:ore2wakaru:20190813075318g:plain

どお? 手でちゃんと椅子を押して立ち上がってる風に見えるでしょ。自然でしょ。メッシュも重なってないでしょ。イイ事ずくめじゃん。イイネ、じゃ、これ採用ってなったわけ! 俺、天才的ひらめきの持ち主。

まーでもコメントもらわなかったら、ひらめかなかったけどな。コメントくれた人に感謝


アニメーションから関数を呼び出す

立ち上がり中にコリジョンを有効化するってのは、具体的には「アリシアが立ち上がるアニメが発動して1秒後にアリシアとテーブルとのコリジョンを復活させるスクリプト(関数)を呼ぶ」って事なんだが、普通はタイマー(Timerノード)を使んだと思うけど、俺はアニメで処理してみたんだ。

で、ここでタイトルの通り、「アニメーションから関数を呼び出す方法」を載せておこうと思う。

◆1 スクリプトを用意する

呼び出される関数を仕込んでおくスクリプトを準備する。もちろん専用のスクリプトを作成しないで、既存のスクリプトでもOK。

f:id:ore2wakaru:20190813083051p:plain

スクリプトの中身に関しては、呼び出したい自作関数をつくって中身を書けばイイ。

func my_re_enable_collision():
    G.P.collision_mask = 3

中身の部分G.P.collision_mask = 3は、

という内容。つまり、これでアリシアRigidBodyコリジョンをテーブルもチェックするように戻すって事。

◆2 トラックを追加する

キーを入れ込みたいアニメーションを選択して、[Add Track]ボタンを押しリストから[Call Method Track]を選択する。

f:id:ore2wakaru:20190813085956p:plain

すると、対象の関数が貼ってあるノードを選べって窓が出て来るから、ノードを選ぶ。

f:id:ore2wakaru:20190813091031p:plain

すると、トラックが追加されてるはず。

f:id:ore2wakaru:20190813091846p:plain

◆3 トラックにキーを打つ

新トラック上で右クリして[Insert Key]。これでキーが打てる。まー大体、1秒後に呼びたいからその辺りで右クリだな。

f:id:ore2wakaru:20190813094359p:plain

◆4 関数を選ぶ

んで、あとは出てきた窓から自分で用意した関数を選べばいい。

f:id:ore2wakaru:20190813094955p:plain

◆5 位置がずれてたらD&Dで調節する

キーが打たれたはずなので、目的の時間とずれてたら、ドラッグしてひっぱって目的の所へ。(キーは色で役目が分かるようになってるんだな。)

f:id:ore2wakaru:20190813095738p:plain

ちょうど1秒後の所に持ってこれたら成功。これでアニメーション中の好きなタイミングで自作関数を呼び出すことが出来る様になったってわけだ。よかったな。 おつかれ!

また、選択したキーはInspectorからでも確認・修正ができる。

f:id:ore2wakaru:20190813100729p:plain

まー、こんな感じでアニメで関数を呼び出せるってことだよ。アニメのトラックで出来ることは、モノのポジションを変えるだけじゃないんだ。これ、後できっと役立つはずだ。覚えておこうぜ。

[Add Track] > [Call Method Track]」だ!