Godotで音を鳴らす仕組み部分のみの備忘録
こんな感じの足音を実現する
足音を鳴らす条件
- 床に足がついている時に移動量がある
- 前回再生より一定時間すぎていたら鳴らす
リアル目の足音
- いくつかの素材をランダムに鳴らす
- トンネルとかで響く
Godotでランダム再生
- audioフォルダにランダムで鳴らすwavを入れておく
- footstep_soundsのリストにpreloadしておく
- 再生リクエストのたびにrandi()でstreamを差し替える
.py
# 足音のオーディオファイルリスト
var footstep_sounds = [
preload("res://audio/footstep_asphalt_1.wav"),
preload("res://audio/footstep_asphalt_2.wav")
]
# ランダム再生
func play_walk():
var random_index = randi() % footstep_sounds.size()
$AudioStreamPlayer3D.stream = footstep_sounds[random_index]
$AudioStreamPlayer3D.play()
一定時間ごとに鳴らす
- 鳴らす間隔を決める
- 最後になった時間を記録しておく
.py
var step_interval = 0.3 # 足音の間隔
var time_since_last_step = 0.0 # 最後に足音を再生してからの経過時間
func move_player(delta):
# 動きがあって床時
if direction.length() > 0 and is_on_floor():
time_since_last_step += delta
if time_since_last_step >= step_interval:
play_walk()
time_since_last_step = 0.0
洞窟で響かせる
- Area3dでコライダー判定 子ノードにシリンダー状の当たり判定設置
- ミキサーのバスとしてエフェクトの残響違いを用意
- Areaの入り・出で接続するバスのルーティングを変更
.py
func _ready():
# Areaの入り・出のシグナルを受ける
$"../Floor3/Tunnel/CaveArea".body_entered.connect(_on_cave_area_area_entered)
$"../Floor3/Tunnel/CaveArea".body_exited.connect(_on_cave_area_area_exited)
func _on_cave_area_area_entered(area: Object) -> void:
print("areaEnter")
$AudioStreamPlayer3D.set_bus("Cave")
func _on_cave_area_area_exited(area: Object) -> void:
print("areaExit")
$AudioStreamPlayer3D.set_bus("Outdoor")