WorkToolSmith

[Godot] 4.0にアップデートしたらTweenがなくなった!?バツ印が出現した理由とは

太田アベル

・ 3分で読めます

当サイトの記事には広告リンクが含まれる場合があります。

先日正式版となったGodot 4.0。内部が大きく変化しています。それに伴い、多数のノードが整頓、高機能化されました。

特に驚くのは、いままで便利に使っていた「Tween」に、バツ印がついた上に黄色の警告が出ていることでしょう。

Godot 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のTween4.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を追加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では多数の機能に磨きがかかっています。順次追っていきたいと思います。

太田アベル

太田アベル

パソコンを7歳からいじり始めて40年。とにかくパソコンが好きです。気になった商品をほぼ自腹で買いまくってレビュー中!良かった点、悪かった点をズバズバ書きます。

𝕏 でフォロー プロフィールを見る

こちらもおすすめ