0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Godotで足音 ランダム再生とトンネルで響く

Last updated at Posted at 2024-09-22

Godotで音を鳴らす仕組み部分のみの備忘録

こんな感じの足音を実現する

使用したaddon
image.png

足音を鳴らす条件

  • 床に足がついている時に移動量がある
  • 前回再生より一定時間すぎていたら鳴らす

リアル目の足音

  • いくつかの素材をランダムに鳴らす
  • トンネルとかで響く

Godotでランダム再生

  • audioフォルダにランダムで鳴らすwavを入れておく
  • footstep_soundsのリストにpreloadしておく
  • 再生リクエストのたびにrandi()でstreamを差し替える

image.png

image.png

.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の入り・出で接続するバスのルーティングを変更

image.png

image.png

image.png

.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")
	
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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?