-
Godot 4.4에서 modulate는 **노드(특히 2D 노드, Sprite2D 같은 것)**가 화면에 그려질 때 곱해지는 색상 필터 같은 속성이야.
쉽게 말하면 **"이 노드를 어떤 색으로 물들일까?"**를 결정하는 거지.
- 기본값은 Color(1, 1, 1, 1) → 흰색에 알파 1이라서 원래 모습 그대로 보여줌.
- Color(1, 0, 0, 1) → 빨간색을 곱하니까 빨갛게 보임.
- Color(1, 1, 1, 0.5) → 알파를 0.5로 하면 반투명해짐.
- Color(0, 0, 0, 1) → 완전히 검게 보임 (그려지긴 하는데 까맣게 덮임).
- Color(1, 1, 1, 0) → 완전히 투명, 안 보이게 됨.
즉, modulate는 노드 자체의 최종 색상을 일괄적으로 조정하는 스위치야. 픽셀 하나하나를 직접 수정하지 않고 전체를 한 번에 착색하는 느낌.
그래서 흔히 쓰이는 경우는:
- 페이드 인/아웃 (알파값을 0에서 1로 트윈 애니메이션)
- 맞았을 때 빨갛게 번쩍이는 효과 (modulate = Color.RED 했다가 다시 흰색으로)
- 특정 상태에 따라 색을 바꾸는 UI 버튼

vignette 테두리로 효과를 줘봤다.
고도 셰이더라는 웹사이트에서 무료로 배포하는 셰이더 파일을 다운받아서 기본적으로 화면에 효과를 줘봤고, 플레이어가 맞을 때 게임이벤트로 신호방출해서 비네트에서 신호받아서 hit 애니메이션으로 빨갛게 바뀌었다가 원래대로 돌아오게 효과를 줘봤다.

케니사이트에서 효과음을 다운받은 후에 맞을때마다 5가지의 랜덤사운드 중 하나의 사운드가 들리도록 설정했다.

streams에 5가지 사운드를 넣어주면 된다.
적의 피격을 담당하는 hurtboxcomponent에서 맞으면 이것저것 한 후 hit signal을 방출한다. 그러면
basic_enemy 스크립트에서 랜덤사운드컴포넌트를 연결해 play_random을 시킨다.
여기서 중요한건 만약 내 공격을 맞고 죽었다면
- 만약 HealthComponent의 damage 함수가 호출된 직후, 캐릭터의 체력이 0이 되어 사망 처리가 이루어진다면, HurtBoxComponent의 hit.emit()가 실행되는 순간에는 이미 해당 캐릭터 노드(CharacterBody2D)가 트리에서 제거되기 시작한 상태일 수 있습니다.
- $HurtBoxComponent.hit.connect(on_hit)를 통해 on_hit 함수가 연결되어 있지만, 이 함수를 실행할 객체 자체가 더 이상 유효하지 않으므로 소리가 재생되지 않습니다.
그러니 deathcomponent의 on_died에도 오디오플레이어를 연결해 play_random()을 한번 더 넣어줘야 한다.

모든 사운드는 버스를 통해 재생된다. 무조건 마지막에 마스터 버스를 지나서 재생된다.
이런식으로 해서 마스터 볼륨을 조절하고 음악 볼륨, 효과음을 따로 조절하나보다.