[유니티]탑다운 슈팅 따라하기 #22 오디오 Part1
- 게임 개발 - Unity3d
- 2020. 4. 16. 18:54
안녕하세요 유랑입니다.
실력향상을 위해서 오늘은 유튜브를 따라하면서 공부하겠습니다.
궁금하신점 있으시다면 댓글로 남겨주세요^^
1. 탑다운 슈팅 따라하기
이번 강의는 Sebastian Lague님께서 만든 예제이며,
유튜브를 보시면 자세한 내용을 배우실 수 있습니다.
유튜브 사이트 => 유튜브
1. 오디오
이번 시간에는 오디오를 적용해보겠습니다.
총을 쏠 때, 장전할 때, 배경음 등 다양한 사운드가 존재하고
적용을 하면 더욱더 멋진 게임이 만들어질 겁니다.
2-1) 스크립트 작성 -㉠AudioManager
AudioManager 스크립트는 오디오 소스와 사운드 볼륨,
재생을 할 때 사용합니다.
싱글턴으로 적용함으로써 메모리에 상주하여 어디서든
오디오 출력이 가능하답니다^^
using UnityEngine;
using System.Collections;
public class AudioManager : MonoBehaviour
{
float masterVolumePercent = 0.2f; // 마스터 볼륨
float sfxVolumePercent = 1; // 사운드 효과 볼륨
float musicVolumePercent = 1f; // 음악 볼륨
AudioSource[] musicSources;
int activeMusicSourceIndex;
public static AudioManager instance; // 싱글턴
Transform audioListener;
Transform playerT;
void Awake()
{
instance = this;
musicSources = new AudioSource[2];
for (int i = 0; i < 2; i++)
{
// 새로운 AudioSource 추가
GameObject newMusicSource = new GameObject("Music source " + (i + 1));
musicSources[i] = newMusicSource.AddComponent<AudioSource>();
newMusicSource.transform.parent = transform;
}
audioListener = FindObjectOfType<AudioListener>().transform;
playerT = FindObjectOfType<Player>().transform;
}
void Update()
{
if (playerT != null)
{
audioListener.position = playerT.position;
}
}
public void PlayMusic(AudioClip clip, float fadeDuration = 1)
{
activeMusicSourceIndex = 1 - activeMusicSourceIndex;
musicSources[activeMusicSourceIndex].clip = clip;
musicSources[activeMusicSourceIndex].Play();
StartCoroutine(AnimateMusicCrossfade(fadeDuration));
}
// 사운드 재생
public void PlaySound(AudioClip clip, Vector3 pos)
{
if (clip != null)
{
// 정해진 위치에서 클립 발생
AudioSource.PlayClipAtPoint(clip, pos, sfxVolumePercent * masterVolumePercent);
}
}
// 음악 크로스페이드
IEnumerator AnimateMusicCrossfade(float duration)
{
float percent = 0;
while (percent < 1)
{
percent += Time.deltaTime * 1 / duration;
musicSources[activeMusicSourceIndex].volume = Mathf.Lerp(0, musicVolumePercent * masterVolumePercent, percent);
musicSources[1 - activeMusicSourceIndex].volume = Mathf.Lerp(musicVolumePercent * masterVolumePercent, 0, percent);
yield return null;
}
}
}
2-2) 스크립트 작성 -㉡MusicManager
MusicManager 스크립트는 메인테마와 메뉴 사운드를 컨트롤 할 때 사용합니다.
결국 AudioManager에 있는 메소드를 사용하며,
스페이스바를 누르면 언제든지 메인테마가 실행되도록 할 수 있습니다.
using UnityEngine;
using System.Collections;
public class MusicManager : MonoBehaviour
{
public AudioClip mainTheme; // 메인테마 사운드
public AudioClip menuTheme; // 메뉴 사운드
void Start()
{
AudioManager.instance.PlayMusic(menuTheme, 2);
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
AudioManager.instance.PlayMusic(mainTheme, 3);
}
}
}
스크립트 적용이 끝났으면 사운드를 추가하고,
빈오브젝트를 생성해 다음과 같이 구성해 주세요!!
2-3) 스크립트 작성 -㉢Gun
총을 쏠 때도 사운드가 필요하겠죠?
사격과 장전을 할 때 사운드를 추가해 주겠습니다.
2-4) 스크립트 적용
스크립트 작성이 끝나셨으면
총 프리팹마다 사운드를 적용해 주세요.
총마다 사운드가 다르니 유의해 주셔요~~
2-5) 오디오 리스너
AudioListener는 프로젝트에 하나만 존재 가능합니다.
인간의 귀에 해당한다고 보시면 됩니다ㅎㅎ
메인카메라에 있는걸 삭제하고
빈 오브젝트를 만들어 다음과 같이 적용해 주겠습니다.
적용이 끝나셨으면 실행시켜보셔요.
슝슝 사격하는 맛이 일품이쥬~~
3. 마무리
오늘 강의는 여기까지입니다.
탑다운 슈팅을 따라하면서 오디오를 적용해 보았습니다.
감사합니다.
수업자료: 탑다운 슈팅 따라하기 #22 오디오 Part1