【Godot】スロー再生する方法

今回はスロー再生(ゲームスピードをゆっくりにする)方法を紹介します。

_process() の delta の値を乗算する

特定のオブジェクトのみスローにする場合はこの方法を使います。更新関数である _process() の引数 "delta" に 1.0 以下の係数を乗算することで減速できます。

以下サンプルコードです。

extends Node2D

const SPEED = 2000 # 移動速度

var _velocity = Vector2(0, 0) # 移動速度

func _ready() -> void:
    # ランダムで移動量を決める.
    _velocity.x = rand_range(-1, 1)
    _velocity.y = rand_range(-1, 1)

func _process(delta: float) -> void:
    if position.x < 0:
        position.x = 0
        _velocity.x *= -1 # X反転
    if position.y < 0:
        position.y = 0
        _velocity.y *= -1 # Y反転
    if position.x > 1024:
        position.x = 1024
        _velocity.x *= -1 # X反転
    if position.y > 600:
        position.y = 600
        _velocity.y *= -1 # Y反転
    
    var speed = SPEED
    if Input.is_action_pressed("ui_accept"):
        # スペースキーを押していたらスローにする
        speed *= 0.1
    
    position += _velocity * speed * delta

ただ、この方法は物理オブジェクトで position の値を直接変更してはいけない場合は使用できないかもしれません。(move_and_slide() などの場合は 移動ベクトルを渡して更新するので、基本的には大丈夫そうですが念のため……)

Engine.time_scale でまとめて変更する場合

Engine.time_scale に値を代入することで、ゲーム全体のタイムスケールを変更します(こちらは個別に変更することはできないので、例えば敵弾だけスローにする…ということはできません)

この値を 1.0 より小さくすることでスローにすることができます。

extends Node2D

func _process(delta: float) -> void:
    # まとめてタイムスケールを変更する場合.
    Engine.time_scale = 1
    if Input.is_action_pressed("ui_accept"):
        Engine.time_scale = 0.1

プロジェクトファイル

今回作成したプロジェクトファイルを添付しておきます。