LoginSignup
0
0

[Godot]画面遷移時のトランジションアニメーション実装

Last updated at Posted at 2024-06-21

Godotで画面遷移する際にトランジション演出のアニメーションを追加したので、その手順を備忘録として残しておく。
参考:https://2dgames.jp/godot-transition/
参考:https://scrapbox.io/kidaaam-92022284/Godot_%E3%81%A7_Transition_%E3%82%92%E8%87%AA%E4%BD%9C%E3%81%99%E3%82%8B

手順

手順は下記の通り。
1.トランジション演出用のパネルノード追加
2.追加したパネルノードでシェーダーマテリアル追加
3.シェーダーコード記述
4.マスク用画像を読み込む
5.AnimationPlayerで作成したシェーダーのトラックを追加

トランジション演出用のパネルノード追加

シェーダーを実装するためのPanelノードを追加。今回はTransitionPanelとした。
image.png

シーンの中にButtonなど、操作に必要なノードがある場合、そのノードより下のレイヤー(GodotUI上だと上)にないと操作できないので注意。

パネルノードにシェーダーマテリアルを追加

インスペクターの「Canvas Item」の「Material」を押下、「Material」に「新規ShaderMaterial」を追加。

image.png

シェーダースクリプトの記述

「Shader」に「New Shader」を追加する。

image.png

Shader作成ダイアログが出るので、デフォルトの設定のまま作成をクリック。

image.png

シェーダーエディターがウィンドウの下部に出るので、そちらに下記のコードを記述。

shader_type canvas_item;
render_mode unshaded;

uniform float SoftRange = 0.2;              // 境目を半透明にする幅
uniform float Value : hint_range(0.0, 1.0); // フェード値
uniform sampler2D Mask;                     // ルール画像

void vertex() {
	// Called for every vertex the material is visible on.
}

void fragment() {
	// 基準値を計算
    float rangedValue = Value * (SoftRange * 2.0 + 1.0) - SoftRange;
    // 最小値と最大値を決める
    float minValue = rangedValue - SoftRange;
    float maxValue = rangedValue + SoftRange;
    // ルール画像の濃度を取得
    float maskValue = texture(Mask, UV).r;
    // smoothstep(エルミート補完)で透過値を決定
    float alpha = smoothstep(minValue, maxValue, maskValue);

    // 黒フェードするよう色を設定
    COLOR = vec4(vec3(0.0), alpha);

}

上記のコードを記述すると、UIにパラメータが出てくるので、Mask用の画像を読み込む。
※ちなみにコードとMaskの設定前にアニメーションのトラックを作成すると、あとからコードとMaskを設定しても反映されない。

Mask用画像はこちらからお借りしました→https://4you.bz/rule1080p

image.png

AnimationPlayerで作成したシェーダーのトラックを追加

アニメーションウィンドウから「トラックを追加」をクリックし、「Property Track」からシェーダー用パネルを選択しシェーダー値(今回でいうValue)を選択するか、インスペクターの同プロパティの右にある鍵マークをクリック(こちらの方が断然ラク)しトラックを追加。追加したトラックで右クリックし「Insert Key」でkeyを追加する。

image.png

これでトランジション演出のアニメが追加できた。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0