상세 컨텐츠

본문 제목

[Unity] 유니티 사운드, 소리 관련

게임엔진관련/유니티 엔진

by AlrepondTech 2019. 7. 8. 10:36

본문

반응형

 

 

 

=======================

=======================

=======================

 

 

 

출처: https://m.blog.naver.com/PostView.nhn?blogId=hai_per&logNo=221225991818&proxyReferer=https%3A%2F%2Fwww.google.com%2F

 

유니티에서 효과음이나 배경음악을 넣을때 필요한 Audio에 관련한 메소드들에 대한 정리글입니다.
저도 별로 쓸일이 없다보니 자꾸 까먹더라고요...

먼저 사운드를 재생하기위해서는 AudioSource와 AudioClip이 필요합니다. 
물론 듣기 위해서는 AudioListner가 있어야하지만 메인카메라에 이미 추가 되어있을것입니다.
AudioSouce가 재생시키는 컴포넌트이고, AudioClip이 소리입니다.

예시 스크립트입니다. 

 

 

 

https://docs.unity3d.com/kr/current/Manual/class-AudioSource.html

 

오디오 소스 - Unity 매뉴얼

Audio Source 는 씬에서 오디오 클립을 재생합니다. 이 클립은 오디오 리스너 또는 오디오 믹서를 통해 재생 가능합니다. 오디오 소스는 모든 종류의 오디오 클립을 재생할 수 있으며, 2D나 3D로, 또는 혼합(스페이셜 블렌드)하여 재생하도록 설정할 수 있습니다. 오디오는 여러 스피커에 분배되거나(스테레오7.1)(_ 스프레드), 3D와 2D 사이에서 자연스럽게 모핑됩니다( 스페이셜 블렌드_). 감쇠 커브를 통해 거리에 따라 제어할 수 있습니다. 또한

docs.unity3d.com

 

 

 

public class AudioTest : MonoBehaviour
{
    public AudioSource audioSource;
    public AudioClip bgm;

    public void Start()
    {
        audioSource = GetComponent();

        audioSource.clip = bgm; //오디오에 bgm이라는 파일 연결

        audioSource.volume = 1.0f; //0.0f ~ 1.0f사이의 숫자로 볼륨을 조절
        audioSource.loop = true; //반복 여부
        audioSource.mute = false; //오디오 음소거

        audioSource.Play(); //오디오 재생
        audioSource.Stop(); //오디오 멈추기

        audioSource.playOnAwake = true;
        //활성화시 해당씬 실행시 바로 사운드 재생이 시작됩니다.
        //비활성화시 Play()명령을 통해서만 재생됩니다.

        audioSource.priority = 0;
        //씬안에 모든 오디오소스중 현재 오디오 소스의 우선순위를 정한다.
        // 0 : 최우선, 256 : 최하, 128 : 기본값
    }
}

 

 

이 외의 프로퍼티들은 사용할일이 진짜로 없네요. 
나머지가 궁금하신분은 https://docs.unity3d.com/kr/current/Manual/class-AudioSource.html 여기로.


한번 배경음악만 간단하게 추가해보겠습니다.

먼저 MainCamera에 AudioSource라는 컴포넌트를 추가해줍니다(MainCamera가 아니여도 상관은 없습니다)

그다음 원하는 노래를 하나 유니티에 넣어줍시다. 저는 NCS에서 다운받은 The Bluest Star로 했습니다.

그다음 AudioSource > AudioClip에 해당 사운들를 추가해줍니다.
배경음악이 한번만 나오면 안되므로 Loop를 체크해서 무한 반복 시켜줍니다. 그럼 완성입니다... 쉽죠?



이상 AudioSource에 관한 강좌였습니다.

 

 

 

=======================

=======================

=======================

 

 

 

 

 

출처: https://m.blog.naver.com/PostView.nhn?blogId=anciid&logNo=220701819127&proxyReferer=https%3A%2F%2Fwww.google.com%2F

 

1. 오디오 파일을 하이어라키에 끌어놓는다.

 >>> 


2. 다음과 같이 Audio Source가 붙은 게임 오브젝트가 생성된다.

 

 

3. 코드

 

GameObject.Find("오브젝트이름").GetComponent<AudioSource> ().Play ();

 

 

((응용))

 

void playSound(string snd){

GameObject.Find(snd).GetComponent<AudioSource> ().Play ();

}

 

이렇게 적어놓고,

사용할때는

 

playSound ("sd_playerRecover");

 

요렇게 쓰기

 

 

=======================

=======================

=======================

 

 

 

 

반응형

 

 

728x90

 

 

 

출처: https://codingmania.tistory.com/205

 

유니티 개발할 때, 사운드 두 개를 이어서 나오게 하고 싶다면 어떻게 할까?

 

일단, 사운드를 위해서는 AudioSource와 AudioClip 두 개가 필요하다.

 

public AudioClip[] intro_music;
AudioSource soundSource;

오디오 클립은 각각의 사운드 파일을 의미하며, AudioSource를 통해 플레이 한다고 할 수 있다.

 

사운드를 넣기 위해 public으로 선언했다. AudioSource는 GetComponent로 호출할 수 있으므로 안 해도 된다.

 

   void Start () {
        soundSource = GetComponent<AudioSource>();
        StartCoroutine("Playlist");
    }

 

이것처럼, 해당 오브젝트에서 AudioSource를 선언한 뒤, 코루틴을 호출한다.

 

   

 IEnumerator Playlist() {
        soundSource.clip = intro_music[0];
        soundSource.Play();
        while (true)
        {
            yield return new WaitForSeconds(1.0f);
            if(!soundSource.isPlaying) {
                soundSource.clip = intro_music[1];
                soundSource.Play();
                soundSource.loop = true;
            }
        }
    }

 

 

먼저, 

 

배열 0번째를 실행한다. 

 

실행 방법은 AudioSource의 객체 audioSource를 이용한다. 그래서 AudioSource가 필요한 것이다.

 

audioSource.clip을 통해 어떤 사운드 데이터를 사용할 것인지 설정한다(배열 첫 번째)

audioSource.Play();를 통해 먼저 사운드를 재상한다. 따라서, 0번째 사운드가 실행된다.

 

그 다음 while문이 실행된다. true이므로 무한 반복.

 

yield를 통해 1.0초 대기 후 아래 코드를 수행한다.

 

만약 사운드가 진행이 되지 않는다면, -> isPlaying

 

 audioSource.isPlaying의 경우 bool형이다. 실행되고 있다면 True, 재생되고 있지 않다면 False

 

!가 붙었으므로 멈췄으면 if를 실행하라는 의미가 된다.

 

즉, 1초마다 체크 후 0번째 사운드가 종료되었으면 if문을 실행하라는 의미이다.

 

다시 audioSource.clip을 통해 1번째 사운드를 플레이한다.

 

audioSource.Play()을 통해 사운드를 재생한다.

 

audioSource.loop를 통해 반복 재생을 할 지 설정한다. true면 반복, false면 반복하지 않는다는 뜻이다.

 

이렇게 하게 되면

 

0번째 사운드는 1회 실행되고 1번째 사운드는 루프가 체크되어 무한반복된다.

 

이상으로 사운드를 이용하여 연속적으로 재생하는 방법을 알아보았다.

 

여러개의 사운드를 재생하는 것도 동일할 것이다. for문으로 i번 순서대로 돌릴 수도 있고,

 

랜덤으로 재생하고 싶다면 [i] 대신 Random.Range(0,xx)으로 하면 될 것이다.


출처: https://codingmania.tistory.com/205 [괴발개발 개발새발 하는 개발자의 개발 블로그]

 

 

=======================

=======================

=======================

 

 

 

출처: https://mentum.tistory.com/221

 

에디터 상에서는 소리가 잘 나왔는데,

막상 모바일로 빌드해보면 소리가 약간 늦게 나온다거나 하는 현상이 있다.

 

 기본 설정에서는 빌드할 때는 오디오 파일을 압축해서 재생할때 플레이 하게 되는데 

이 때 걸리는 시간이 오디오 딜레이 현상의 원인.

 

 또한 프로젝트쪽에서 오디오 버퍼를 설정하는 것으로도 개선의 여지가 있다고 함.

 

 

1. 프로젝트 세팅에서 오디오 버퍼 세팅 조정

 

Edit - ProjectSettings - Audio 에서 DSP Buffer Size 를 Best Performance -> Best latency로 설정

 

 

2. 개별적인 오디오마다 임포트 세팅 설정

 

1) Force To Mono(모노 강제조정) : 모바일이고, 최적화를 중시한다면 체크 / 사운드의 퀄리티를 원한다면 언체크

2) Load In Background(지연된 로딩) : 배경음악이라면 체크 / 타이밍에 맞춰 재생하는 효과음이라면 언체크

3) Load Type

(1) Decompress On Load : 압축 풀어서 메모리에 올려놓고 바로바로 읽어낼 수 있음. 효과음에 사용. 

  vobis랑 같이사용하면 용량이 10배이상 커지니 같이 사용하지 말 것.

(2) Compressed In Memory : 압축 상태로 메모리에 올려놓고 읽을 때 압축 풀어서 재생함. 보이스 사운드 등에 사용

(3) Streaming : 실시간으로 읽어냄. 보통 배경음악에서 사용

4) Compression Format

(1) PCM : 최고품질 / 용량 큼 / Load Type은 Decompress On Load로 하자

(2) ADPCM : 중간 품질 / 용량 중간

(3) Vobis : 최저품질 / 용량 작음

5) Quality(음질) : Vobis의 최종적인 음질을 결정함. ( 100%면 의미없고 보통 70%정도 )

 

 

[ 결론 ]

1) 배경음악 : Load In Background 체크

Load Type : Streaming

Compression Format : Vobis (70%)

 

2) 효과음 : Load Type : Decompress On Load

   Compression Format : PCM

 

      3) 보이스 / 약간 긴 효과음 :  Load Type : Compressed In Memory

                           Compression Format :  ADPCM

 

 

 

3. 임포트 전 포멧 변환

 

텍스쳐는 어떤 것으로 임포트 해도 재압축을 하지만 오디오는 그렇지 않은듯

배경음악은 mp3로, 효과음은 wav로 임포트하자.

wav -> mp3 변환은 네이버에서 wave editor를 검색해서 다운받으면 됨.

 

 

개인적으로 최적화도 최적화인데, 무슨 대규모 RPG를 만드는 것도 아니고, 

인디게임을 개발하는 입장으로서는 오디오 만큼은 성능을 어느정도 포기하고 음질과 최소 레이턴시를 중시하는게 낫다고 본다

 

 

=======================

=======================

=======================

 

 

 

 

 

출처: https://phiru.tistory.com/176

 

사운드를 재생하려면 한 Scene에 AudioListener가 한개 있어야 한다. 

 

이녀석은 그냥 사운드 드라이버라 보면 된다.

 

실제 오디오 플레이어 처럼 플레이를 하려면

 

사운드가 재생 될 GameObject에 AudioSource가 있어야 한다.

 

그리고 스크립트를 하나 만들어 GameObject에 추가하고 코딩한다.

 

플레이 하는 방법은 뭐.. 몇가지가 있지만 대게 두가지만 사용한다. 나는.

 

1. 루핑하기

 

- 루핑을 하려면 Audio Source에 있는 Loop를 true로 해주는 거지.

 

그럼 Audio Source에 어떻게 사운드 파일을 넣느냐.

 

코드를 간단히 작성 하면 요렇다.

 

// 인스펙에서 사운드 파일을 adClip에 넣는다.

public AudioClip adClip;

 

void Start()

{

    audio.Loop = true;

    audio.clip = adClip;

    audio.Play();

}

 

이렇게 하면 루핑하면서 플레이가 될꺼다.

 

 

2. 한번만 플레이 하기.

 

- 물론 1번 처럼 클립을 Audio Source에 넣어서 할 수도 있겠다만.. 

 

그렇게 할 경우 여러 사운드를 동시에 재생할 수 없다.

 

그러므로 한번만 플레이를 하고 동시에 여러개 할꺼라면

 

audio.PlayOneShot(clip); 을 쓰면 된다.

 

근데 이녀석은 Loop가 안된다. 

 

 

 

사운드를 재생했는데 볼륨 조절이나 사운드 On/Off를 하고 싶다.

 

이들을 수행해주는 놈은 Audio Source이다. 

 

그래서 이 값만 바꿔주면 된다.

 

1. 사운드 볼륨 조절

 

audio.volume = x; // 0.0f ~ 1.0f

 

2. 사운드 On/Off

 

- 굳이 한다면 두가지로 할 수 있겠다.

 

A > audio.volume = 0.0f;     // Off

audio.volume = 1.0f;    // On

 

B>  audio.mute = true;     // Off

audio.mute = false;   // On

 

 

 

 

사운드도 했는데 진동도 해야지.

 

맥이 없어서 아이퐁은 안해보았다. 

 

여튼 안드로이드 기준으로 한다면 요렇다.

 

Handheld.Vibrate();

 

이거하면 진동한다.

 

진동하는거 자료를 찾다 보면

 

iPhoneUtils.Vibrate();  이거 사용하는 사람 많더라.

 

근데 막상 코딩하면      

 

"Vibrate method is deprecated. Please use Handheld.Vibrate instead" 라고 한다.

 

그러니 Handheld.Vibrate() 를 사용하자.

 



출처: https://phiru.tistory.com/176 [보금자리]

 

 

 

=======================

=======================

=======================

 

 

 

 

 

*기타관련링크

 

https://itleader.tistory.com/129

 

https://noviacommunity.tistory.com/entry/Unity-%ED%8F%AD%EB%B0%9C-%EC%82%AC%EC%9A%B4%EB%93%9C-%EC%9E%85%ED%9E%88%EA%B8%B0

 

https://noviacommunity.tistory.com/entry/Unity-%ED%8F%AD%EB%B0%9C-%EC%82%AC%EC%9A%B4%EB%93%9C-%EC%9E%85%ED%9E%88%EA%B8%B0

 

https://astoration.gitbooks.io/sihs-shootinggame/content/9c77c_cc28_-_d3ed_bc1c_d6a8_acfc_c74c_b0b4_ae30.html

 

http://www.devkorea.co.kr/bbs/board.php?bo_table=m03_qna&wr_id=58508

 

https://ajh322.tistory.com/137

 

- 유니티케이디 사운드 강좌

https://www.youtube.com/watch?v=Og2R3MP2H5M

https://www.youtube.com/watch?v=xQw99T1J5Xg

https://www.youtube.com/watch?v=vLKP501a6wQ

 

=======================

=======================

=======================

 

 

반응형


관련글 더보기

댓글 영역