2026-06-11 사운드시스템 (BaseScene참고)

This commit is contained in:
skrwns304@gmail.com
2026-06-11 15:32:56 +09:00
parent 6a20f521ce
commit 9f173a4ebc
23 changed files with 640 additions and 6 deletions

View File

@@ -0,0 +1,38 @@
using Unity.Mathematics;
using UnityEngine;
using UnityEngine.Splines;
//스플라인 선을 따라 깔리는 환경음(파도 등)
//소스 하나가 플레이어와 "스플라인 위에서 가장 가까운 지점"을 추적해
//어떤 모양의 해안선이든 방향성 + 거리감쇠를 처리한다. (닫힌 섬 형태 포함)
[RequireComponent(typeof(AudioSource))]
public class LineAmbienceAudio : MonoBehaviour
{
[Header("스플라인")]
[SerializeField] private SplineContainer _spline; //환경음이 깔릴 선 (해안선 등)
[Header("추적 대상")]
[SerializeField] private Transform _listener; //플레이어 (보통 메인 카메라). 비우면 자동으로 Camera.main 사용
private void LateUpdate()
{
Transform listener = _listener != null ? _listener : (Camera.main != null ? Camera.main.transform : null);
if (listener == null || _spline == null) return;
//리스너 위치를 스플라인 로컬 공간으로 변환 (컨테이너의 Transform 반영)
float3 localListener = _spline.transform.InverseTransformPoint(listener.position);
//스플라인 곡선 위에서 가장 가까운 지점을 구함 (Knot 사이 곡선까지 정확)
SplineUtility.GetNearestPoint(_spline.Spline, localListener, out float3 localNearest, out _);
//다시 월드 공간으로 변환해서 소스를 그 지점으로 이동
transform.position = _spline.transform.TransformPoint(localNearest);
}
//에디터에서 현재 소스가 추적중인 지점을 표시 (스플라인 자체는 SplineContainer가 그려줌)
private void OnDrawGizmosSelected()
{
Gizmos.color = Color.yellow;
Gizmos.DrawSphere(transform.position, 0.5f);
}
}