[유니티]탑다운 슈팅 따라하기 #22 오디오 Part1

안녕하세요 유랑입니다.

 

 

실력향상을 위해서 오늘은 유튜브를 따라하면서 공부하겠습니다.

궁금하신점 있으시다면 댓글로 남겨주세요^^

 

 

 

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);
        }

    }
}

 

 

Audio.zip
3.41MB

스크립트 적용이 끝났으면 사운드를 추가하고,

빈오브젝트를 생성해 다음과 같이 구성해 주세요!!

 

 

유니티 슈팅

 

 

 

2-3) 스크립트 작성 -㉢Gun

 

 

총을 쏠 때도 사운드가 필요하겠죠?

사격과 장전을 할 때 사운드를 추가해 주겠습니다.

 

 

 

유니티 슈팅

 

 

유니티 슈팅

 

 

 

2-4) 스크립트 적용

 

 

스크립트 작성이 끝나셨으면

총 프리팹마다 사운드를 적용해 주세요.

총마다 사운드가 다르니 유의해 주셔요~~

 

 

 

유니티 슈팅

 

 

유니티 슈팅

 

 

유니티 슈팅

 

 

유니티 슈팅

 

 

유니티 슈팅

 

 

 

2-5) 오디오 리스너

 

 

AudioListener는 프로젝트에 하나만 존재 가능합니다.

인간의 귀에 해당한다고 보시면 됩니다ㅎㅎ

메인카메라에 있는걸 삭제하고

 

 

 

유니티 슈팅

 

 

빈 오브젝트를 만들어 다음과 같이 적용해 주겠습니다.

 

 

유니티 슈팅

 

 

적용이 끝나셨으면 실행시켜보셔요.

슝슝 사격하는 맛이 일품이쥬~~

 

 

 

탑다운 슈팅.mp4
4.71MB

 

 

 

3. 마무리

 

 

오늘 강의는 여기까지입니다.

탑다운 슈팅을 따라하면서 오디오를 적용해 보았습니다.

감사합니다.

 

 

 

수업자료: 탑다운 슈팅 따라하기 #22 오디오 Part1

 

 

 

 

 

댓글

Designed by JB FACTORY