Godot キャラコン 20 「dae の import とanimation あれこれ」 6/6
本日はスクリプトの回。
歩き出す際のアニメションがブレンドされる。GIF にはしなかったが、もちろん反対に、止まる時もそうなる。
シーンへの変更
[1]
メインシーンにはキャラコンの18で作ったスクリプトが張り付いているので、これを剥がす。まー、シーンパネルの右上アイコンから、スクリプトを付けたり外したりしてるとよく落ちるので注意だな。
[2]
そんで、新しくスクリプトを貼る。(もちろん、メインシーンのルートノードに)
スクリプト
L3~5
- 「AnimationPlayer」と「AnimationTreePlayer」を操作できるよう変数に。
- ブレンド値を入れる変数を用意。(値は "0~1")初期値を "0.0" としたので、アニメA(アイドル)をデフォルトのアニメとする方針。
L8~9
- デフォでは、アニメーションは1回やったら終了の設定になっている。そこで、両アニメとも「ループアニメ」とする設定をする。
get_animation()
でアニメを指定して、変数のloop
を "true" にしてやることで、アニメが「ループアニメ」になる。これをしないと、1回動いて終わっちゃう。get_animation()
はAnimationPlayer
クラス。
loop
はAnimation
クラス。
get_animation()
関数のリターンタイプがAnimation
型であることから、Animation
クラスの変数loop
を発見する感じか。これに随分てこずったわい。
L12~16
- デフォのアクションを利用して、上矢印ならブレンド値を "+0.1"、下矢印なら "-0.1" する。
- ただ、ブレンド値は "0~1" の範囲で指定するため、引きすぎたり足しすぎたりしている場合のため、L16 で
clamp()
させている。clamp()
は必須の内蔵関数な。(koko参照)
L17
blend2_node_set_amount()
関数でブレンド値を入れる。blend2_node_set_amount( ノード名, ブレンド値 )
と使う。
blend2_node_set_amount()
関数はAnimationTreePlayer
クラス。AnimationPlayer
クラスじゃないから注意。
ゲーム再生
の前に、
これで、どんな感じにブレンドされるかジックリ確認できる。ループにもなってるしね。ブレンド値が低い場合は、アイドルアニメーションが優先されてほとんど歩幅が無いが、ブレンド値が高くなってくると大きく足を出すようになる。
次は、このシステムをキャラコン本体に組み込む。
こーど
extends Node onready var node_anim_player = get_node("Scene Root/AnimationPlayer") onready var node_anim_tree = get_node("AnimationTreePlayer") var blend_a_b = 0.0 func _ready(): node_anim_player.get_animation("idle01").loop = true node_anim_player.get_animation("walk01").loop = true func _process(delta): if Input.is_action_just_pressed("ui_up"): blend_a_b += 0.1 if Input.is_action_just_pressed("ui_down"): blend_a_b -= 0.1 blend_a_b = clamp(blend_a_b, 0.0, 1.0) node_anim_tree.blend2_node_set_amount("blend2",blend_a_b)