Audio Sound
먼저 소리를 재생시키기 위해서는 MainCamera에 Audio Listener가 필요하다. 귀의 역할과 같다.
Audio Source
빈 게임오브젝트를 만들어 Add Component에 Audio Source를 추가한다.
Play On Awake는 실행시켰을 때 재생되는 것이고
Loop는 이를 반복해준다. 실행하면 소리가 들릴 것이다. 사진의 하단부분은 나중에 3D Sound를 할 때 다시 보겠다.
충돌했을 때 소리 재생
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CollisionPlay : MonoBehaviour
{
private void OnCollisionEnter(Collision collision)
{
GetComponent<AudioSource>().Play();
}
}
간단하게 충돌이벤트에 AudioSource를 Play하여 소리를 들을 수 있다.
대신 Audio Source설정에서 Play On Awake와 Loop는 꺼야한다.
충돌했을 때 여러가지 소리 재생 (랜덤 사운드)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayOneShot : MonoBehaviour
{
public AudioClip[] arrAudio;
private void OnCollisionEnter(Collision collision)
{
// 난수 배열에 등록된 음원중에 임의로 선택
int sel = Random.Range(0, arrAudio.Length);
AudioClip audio = arrAudio[sel];
GetComponent<AudioSource>().Stop();
GetComponent<AudioSource>().PlayOneShot(audio, 0.8f);
}
}
오디오 배열을 만들고 여기에 등록된 오디오를 난수 배열에 등록하여 랜덤으로 재생한다.
여러번 겹쳐서 재생되는 것을 방지하기 위해 Stop으로 멈춘 후 재생을 하도록 한다.
충돌했을 때 게임 오브젝트를 제거하며 소리 재생해보기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WhenDestroyPlay : MonoBehaviour
{
private void OnCollisionEnter(Collision collision)
{
GetComponent<AudioSource>().Play();
// 현재 게임오브젝트를 제거
Destroy(this.gameObject);
}
}
위의 코드는 게임오브젝트를 제거하면서 그 오브젝트에서 나오는 소리도 함께 사라진다.
여러방법이 있는데 하나는 음원의 시간만큼 기다렸다가 오브젝트를 삭제하는 것이다.
오디오재생 시간만큼 기다렸다가 오브젝트 삭제하기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DestroyDelayed : MonoBehaviour
{
AudioSource myaudio;
private void Start()
{
myaudio = this.GetComponent<AudioSource>();
}
private void OnCollisionEnter(Collision collision)
{
myaudio.Play();
// 음원의 시간만큼 기다렸다가 현재 게임오브젝트를 삭제한다.
Destroy(this.gameObject, myaudio.clip.length);
}
}
실행하면 소리가 재생된 후 끝날 때까지 기다렸다가 오브젝트가 삭제될 것이다.
해당 오브젝트가아닌 다른 곳에 오디오 관리하기
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayAudioManager : MonoBehaviour
{
GameObject audioManager;
AudioSource yourAudio;
void Start()
{
audioManager = GameObject.Find("AudioManager");
yourAudio = audioManager.GetComponent<AudioSource>();
}
private void OnCollisionEnter(Collision collision)
{
yourAudio.Play();
Destroy(this.gameObject);
}
}
Ball대신 빈 게임오브젝트인 AudioManager에 Audio Source를 주고 Ball에는 해당 스크립트만 작성한다.
AudioManager라는 게임오브젝트를 찾고 해당 AudioSource 컴포넌트를 얻어와서 충돌했을 때 재생하고
Ball 오브젝트는 삭제될 것이다.
3D Sound Setting (3D 사운드)
Listener와의 거리에 따라 소리가 변화하는 3D Sound이다
먼저 Spatial Blend에 2D에서 3D로 바꿔준다
3D Sound Setting은 하단의 그래프가 상대적 거리에 따라 변하는 소리인데, 가로축이 거리이며 30까지 가게되면 들리지않게 될 것이다.
Volume Rolloff
Logarithmic Rolloff : 급격하게 변화하는 그래프형태이다.
Linear Rolloff : 일정하게 감소하는 그래프형태이다.
Custom Rollomff : 사용자가 커스텀으로 변화를 줄 수 있는 그래프형태이다. 그래프에 더블클릭하면 점이 생기는데 이를 드래그하면 변화를 줄 수 있다.
'개발 > Unity' 카테고리의 다른 글
[Unity] 프리팹의 복제와 재사용, Instantiate [Prefab, Instantiate] (0) | 2023.02.24 |
---|---|
[Unity] 간단한 카메라 기법 [1인칭, 3인칭, FollowCamera, 백미러, Multi Camera] (1) | 2023.02.24 |
[Unity] 캐릭터 컨트롤러 [CharacterController] (0) | 2023.02.22 |
[Unity] 충돌이벤트와 트리거이벤트, 키네마틱 [Collision, Trigger, Kinematic] (1) | 2023.02.22 |
[Unity] 오브젝트 이동, 회전, AddForce, 점프, LookAt 과 RotateAround [Transform] (1) | 2023.02.22 |