본문 바로가기

Unity 공부시작

Unity3D 거리에 따른 음향의 차이가 나지 않을 때

 AudioSource 컴포넌트의 3D Sound Setting에서 음향 거리, 곡선 등을 조정했는데도, 거리가 멀어져도

 

소리가 바로 앞에서 들리는 경우가 있다.

 

 

Inspector 창의 맨 오른쪽 자물쇠 옆에 있는 메뉴바를 누르고 Debug를 눌러주면 AudioSource 컴포넌트에 나와있는

 

속성들이 바뀌어져 있는 것을 볼 수 있다. 거기서 Pan Level Custom Curve이 0에 위치해 있다면 이를 1로 바꾸어 보자.

 

Pan Level Custom Curve는 1에 가까워질 수록 3D 음향에 가까워지고,

 

반대로 수치가 낮아질 수록 2D 음향에 가까워지는 속성이다.

 

 

cf ) 

만약 AudioSource를 스크립트 상에서 추가를 할 경우, 아래와 같이 Pan Level Custom Curve 값을 바꾸어줄 수 있다.

GameObject soundObj = new GameObject("Sound");
            AudioSource source = soundObj.AddComponent<AudioSource>();
            source.maxDistance = 10f;

            AnimationCurve ac = source.GetCustomCurve(AudioSourceCurveType.SpatialBlend);
            Keyframe[] keys = new Keyframe[1];

            for(int i = 0; i < keys.Length; ++i)
            {
                keys[i].value = 1f;
            }

            ac.keys = keys;
            source.SetCustomCurve(AudioSourceCurveType.SpatialBlend, ac);

AudioSourceCurveType 중 SpatialBlend가 Pan Level Custon Curve를 가져오는 것으로,

해당 Curve의 KeyFrame들을 가져와 그 값들을 1로 변경해준 뒤 Set 해주면 3D 음향으로 변경되는 것을 알 수 있다.

KeyFrame은 Struct이기 때문에 GC에게 부담을 주진 않겠지만, 그래도 AudioSource를 만들어 둔 뒤 재활용하는 것이

좋을 것 같다.