Godot入門:AudioStreamPlayer3Dの使い方と活用法

はじめに

ゲームの音響設計では、3D空間内の位置から音が聞こえるという表現が重要です。キャラクターの足音、敵の鳴き声、環境音——こうした「位置依存的な音」を再生するのがAudioStreamPlayer3Dです。

本記事では、AudioStreamPlayer3Dの基本から応用まで、実装パターンを交えて解説します。

AudioStreamPlayer3Dとは?

AudioStreamPlayer3Dは、3D空間上の位置から音を再生するノードです。リスナー(通常はカメラ)との距離や方向に応じて、音量やパン(左右の音響バランス)が自動的に変化します。

継承ツリー:

AudioStreamPlayer3D → Node3D → Node → Object

AudioStreamPlayer(位置なし)やAudioStreamPlayer2D(2D)とは異なり、AudioStreamPlayer3Dは「シーン内の特定の場所から音が発せられる」という現実的な音響効果をもたらします。

このノードを使うべき場面

活躍する場面:

  • キャラクターの足音(歩く位置が聞こえる)
  • NPC のセリフやボイス
  • 敵の鳴き声、環境音(鳥の声、風音)
  • 乗り物のエンジン音(車、飛行機)
  • 環境オブジェクトからの音(滝、火など)

使わない場面:

  • 位置に依存しないBGM(AudioStreamPlayer を使う)
  • 単純な UI 音効(2D UI なら AudioStreamPlayer で十分)

主なプロパティと機能

AudioStreamPlayer3Dの基本的なプロパティを表にまとめました:

プロパティ説明デフォルト値
streamAudioStream再生する音声ファイル(.ogg, .mp3, .wav)null
volume_dbfloat基本の音量(デシベル)0.0
unit_sizefloat距離減衰の基準距離(メートル)1.0
max_dbfloat最大音量(デシベル)3.0
pitch_scalefloat再生速度・ピッチの倍率1.0
busString出力先のオーディオバス名“Master”
attenuation_modelenum距離による音量減衰の計算方式ATTENUATION_INVERSE_DISTANCE

基本的な使用例:


extends Node3D

@onready var audio_player = $AudioStreamPlayer3D

func _ready():
	# 音声ファイルを設定
	audio_player.stream = preload("res://sounds/footstep.ogg")

	# 基本の音量設定
	audio_player.volume_db = -5.0  # やや静かく

	# 距離減衰の基準
	audio_player.unit_size = 2.0  # 2メートルで音量が半減する

	# ピッチを少しランダムに(バリエーション)
	audio_player.pitch_scale = randf_range(0.9, 1.1)

func play_footstep():
	# 足音を再生
	if not audio_player.playing:
		audio_player.play()

func stop_sound():
	audio_player.stop()
AudioStreamPlayer3Dの距離減衰パターン
距離が遠いほど音量が小さくなり、リアルな音響が実現されます

敵キャラの鳴き声実装例:


extends CharacterBody3D

@onready var sound_player = $AudioStreamPlayer3D

var sound_interval = 3.0
var sound_timer = 0.0

func _ready():
	sound_player.stream = preload("res://sounds/enemy_growl.ogg")
	sound_player.volume_db = -3.0
	sound_player.attenuation_model = AudioStreamPlayer3D.ATTENUATION_LOGARITHMIC

func _process(delta):
	sound_timer += delta
	if sound_timer >= sound_interval:
		play_growl()
		sound_timer = 0.0

func play_growl():
	# ピッチをランダムに変更して同じ音でも違って聞こえるように
	sound_player.pitch_scale = randf_range(0.8, 1.2)
	sound_player.play()

AudioStreamPlayer / AudioStreamPlayer2D / AudioStreamPlayer3D の比較

3種類の音声ノードがどう異なるかを理解することは、適切な実装の鍵です:

ノード位置情報動作環境用途例音響特性
AudioStreamPlayerなし(2D でも 3D でも使用可)2D/3D 共通BGM、UI音ステレオ固定(距離感なし)
AudioStreamPlayer2D2D平面上の位置2Dシーンのみ2Dゲーム効果音、NPC の声左右パン変化あり、距離減衰あり
AudioStreamPlayer3D3D空間上の位置3Dシーンのみ3D環境音、足音、敵の声完全な3D定位、距離減衰、ドップラー効果対応

attenuation_model の種類と使い分け

距離に応じた減衰モデルは、ゲームの雰囲気を大きく左右します:

attenuation_model減衰パターン用途例リアル度
INVERSE_DISTANCE距離の逆数で減衰現実的な音響(足音、敵の声)高い
INVERSE_DISTANCE_SQUARED距離の二乗に反比例音の減衰が速い(爆発など)中程度
LOGARITHMIC対数的な減衰自然な減衰(人間の聴覚に近い)高い
DISABLED距離無視、音量固定環境音、背景音(広範囲で同じ音量)低い

もっと使いこなす:カスタマイズできるパラメータ

まずは基本を動かしてみてから、余裕が出たら試してみてください。

パラメータ設定値の例効果
max_distance50.0 〜 200.0聞こえなくなる最大距離。これ以上遠いと音が出ない
doppler_trackingDOPPLER_TRACKING_IDLE_LISTENERドップラー効果有効(音源が動く時の周波数変化)
panning_strength1.0 (デフォルト)左右のパン強度。高いほど定位がはっきり
area_mask1 〜 32複数の音声レイヤーで優先度制御
pitch_scale0.5 〜 2.0再生速度・周波数の倍率。バリエーション付与に有効

まとめ

AudioStreamPlayer3Dは、3D空間に位置感のある音を追加し、ゲームの没入感を大幅に向上させるノードです。距離減衰とパン処理により、リアルな音響環境が実現されます。

  • attenuation_model を適切に選択することで、ゲームの雰囲気と現実感をコントロールできる
  • unit_size で減衰の基準距離を調整し、シーンのスケール感に合わせられる
  • pitch_scale のランダム化で、同じ音でもバリエーション豊かに聞こえさせることができる

次回は GPUParticles3D について解説します。GPU処理による高速な3Dパーティクルエフェクトです。

この記事はGodot 4.xをもとに執筆しています。

関連性の高いノード解説記事

コメント