先日正式版となったGodot 4.0。内部が大きく変化しています。それに伴い、多数のノードが整頓、高機能化されました。
特に驚くのは、いままで便利に使っていた「Tween」に、バツ印がついた上に黄色の警告が出ていることでしょう。
Godot Tweenの警告アイコン
Tweenは消滅、スクリプトで生成するように
実は4.0から、Tweenはノードではなくなり、スクリプト内でオンデマンドで生成し使うようになりました。詳しくはGodotマニュアルを参照。
いままでTweenは、ノードにインスタンスを置いておき、インスタンスに対してスクリプト内で「interpolate_property」を呼び出す形でした。
ですが、interpolate_propertyは対象のノードやプロパティを全て入れて呼び出します。しかも並行で複数のスプライトに処理をかけたい場合、その数だけTweenのインスタンスが必要となります。結局オンデマンドで生成しています。
ということは、Tweenのインスタンスを事前に用意しておく必要ある?という考えで、廃止となりました。
加えて、非常に思い出しづらかった&書きにくかった「interpolate_property」などのメソッドも、とてもわかりやすく整理されました。
サンプルコード。マニュアルからの抜粋になります。
var tween = get_tree().create_tween()
tween.tween_property($Icon, "modulate", Color.RED, 1)
tween.tween_property($Icon, "scale", Vector2(1.5, 1.5), 1)
tween.play()interpolate_propertyが「tween_property」に変わっています。これですぐに思い出せそうです(笑)。
また3.5までは下記のように一度で長い引数を渡していました。
$Tween.interpolate_property(
$SubViewportContainer,
"scale",
$SubViewportContainer.scale,
Vector2(3, 3),
1,
Tween.TRANS_BACK
)
$Tween.start() 4.0では1行ごとにバラバラに書いていますね。プロパティの値ごとに渡し、最後にplayします。実行メソッドも start() → play() に変わっています。わかりやすい!
実行してみると上記のコードでは、moduleteの変化が起こり、その後scaleの変化が起こっています。
4.0のTween
”同時に”起こすにはどうすればよいのでしょうか?
複数のプロパティを同時に動かす
複数のプロパティを同時に動かしたい(色を変えつつ拡大するなど)は、新メソッド「set_parallel()」を使います。
set_parallelをtrueにすると、この命令のあと に書かれたプロパティを、同時に実行します。
つまり、移動してから→大きくなって色を変化といった、ズラシの変化も簡単に書けるということです。まずは先ほどのプロパティを同時にしてみます。
var tween = get_tree().create_tween()
tween.set_parallel(true)
tween.tween_property($Icon, "modulate", Color.RED, 1)
tween.tween_property($Icon, "scale", Vector2(1.5, 1.5), 1)
tween.play()tween.play()2行目に set_parallel(true)を入れました。
どうなるでしょうか?
4.0のTween set_parallelを追加
色の変化と大きさの変化が同時に起こりました!
とても使いやすいですね!
また、falseにすれば、今度は順次実行に戻ります。つまり、やりたい変化をset_parallesを使いながら並べていけば、同時や順次を細かく組み合わせることができます。
試しに以下のようなコードを書いてみました。
var tween = get_tree().create_tween()
tween.set_parallel(true)
tween.tween_property($Icon, "modulate", Color.BLUE, 1)
tween.tween_property($Icon, "scale", Vector2(1.5, 1.5), 1)
tween.set_parallel(false)
tween.tween_property($Icon, "modulate", Color.RED, 0.5)
tween.tween_property($Icon, "modulate", Color.PURPLE, 0.5)
tween.tween_property($Icon, "scale", Vector2(1, 1), 1)
tween.set_parallel(true)
tween.tween_property($Icon, "modulate", Color.PINK, 0.5)
tween.tween_property($Icon, "scale", Vector2(2, 2), 1)
tween.play()実行結果はこのようになりました!
組み合わせ、順次が正しく実行されています。

WTS的まとめ
比較的利用場面が多いTweenが非常にわかりやすく、使いやすくなりました!
他にも4.0では多数の機能に磨きがかかっています。順次追っていきたいと思います。
