Godotエンジンには優れた内蔵録画機能があります。この記事では、外部ツールを使わずにGodotだけでゲームプレイ動画を録画する方法を解説します。デモ動画、バグレポート、プロモーション映像など、様々な用途に役立つテクニックを紹介します。
GodotではVideoStreamPlayer
ノードを使った録画が可能です。まず必要な設定を行いましょう。
# 録画設定スクリプトの例
extends Node
func setup_recording():
var settings = {}
settings.fps = 60 # フレームレート設定
settings.format = "webm" # 出力フォーマット
settings.video_path = "user://recordings/" # 保存先ディレクトリ
return settings
# 録画の開始・終了処理
func start_recording():
var err = get_viewport().start_recording_video("user://gameplay_record.webm")
if err != OK:
print("録画開始エラー: ", err)
else:
print("録画開始")
func stop_recording():
get_viewport().stop_recording_video()
print("録画終了")
複数のビューポートがある場合、特定のビューポートだけを録画する方法です。
# 特定のビューポート録画
func record_specific_viewport():
var viewport = $SubViewport
viewport.start_recording_video("user://viewport_record.webm")
# 録画中の処理
yield(get_tree().create_timer(10.0), "timeout") # 10秒間録画
viewport.stop_recording_video()
エディタ内でシーンをプレイしながら録画する方法です。
# エディタモード用録画スクリプト
tool
extends EditorScript
func _run():
var scene = get_editor_interface().get_edited_scene_root()
if scene:
var viewport = scene.get_viewport()
viewport.start_recording_video("res://editor_record.webm")
print("エディタ録画開始")
# 録画終了は手動で行う必要があります
より高品質な録画のための設定調整方法です。
# 録画品質の設定
func optimize_recording_quality():
# プロジェクト設定で解像度を調整
ProjectSettings.set_setting("display/window/size/width", 1920)
ProjectSettings.set_setting("display/window/size/height", 1080)
# フレームレート設定
Engine.target_fps = 60
# 録画時の負荷対策
var use_threads = true
OS.set_use_vsync(false) # V-Syncをオフにして録画パフォーマンス向上
ゲームアクションをスローモーションで録画する方法です。
# スローモーション録画
func record_slow_motion():
# 通常速度で録画開始
get_viewport().start_recording_video("user://slow_motion.webm")
# 録画中にタイムスケールを変更
yield(get_tree().create_timer(2.0), "timeout")
Engine.time_scale = 0.3 # スローモーション
yield(get_tree().create_timer(5.0 * 0.3), "timeout") # 実時間で5秒間
Engine.time_scale = 1.0 # 通常速度に戻す
# 録画終了
yield(get_tree().create_timer(2.0), "timeout")
get_viewport().stop_recording_video()
録画時に発生しやすい問題とその対処法です。
| エラー | 原因 | 解決策 |
|--------|------|--------|
| 録画が開始されない | 保存先のパスが存在しない | Directory.new().make_dir_recursive()
で保存先ディレクトリを作成 |
| 低フレームレート | 録画中の処理負荷が高い | 録画時のみグラフィック設定を下げる |
| 音声が録音されない | 音声設定の問題 | オーディオバスの設定を確認 |
# ディレクトリが存在しない場合の対処
func ensure_directory_exists(path):
var dir = Directory.new()
if !dir.dir_exists(path):
dir.make_dir_recursive(path)
ゲーム内UIから録画操作を行うための実装例です。
# 録画ボタンの実装
func _on_RecordButton_pressed():
if not is_recording:
start_recording()
$RecordButton.text = "録画停止"
is_recording = true
else:
stop_recording()
$RecordButton.text = "録画開始"
is_recording = false
ヘッドレスモードでの自動録画方法です。
# コマンドラインでの録画実行
godot --script record_script.gd --record-video=output.webm --quit
# record_script.gd
extends SceneTree
func _init():
var scene = load("res://game_scene.tscn").instance()
get_root().add_child(scene)
# 設定された時間だけ実行して自動終了
yield(create_timer(30.0), "timeout") # 30秒間録画
quit()
事前準備
品質管理
活用シナリオ
Godot 4.x を基準としています。バージョンによって一部機能や設定が異なる場合があります。