-
파트 2에서는 계속해서
-
Nightmares 서바이벌 슈터 프로젝트를
-
Unity 4에서 Unity 5로 업그레이드하겠습니다.
-
파트 1을 못보셨다면 이 동영상을 보기 전에
-
확인하시기 바랍니다.
-
이 버전의 Nightmares 프로젝트에는
-
새로운 UI 시스템으로 생성한
-
일시정지 메뉴가 있습니다.
-
일시정지 메뉴는
-
Esc 키를 누르면 호출되는데,
-
MenuCanvas에 붙어 있는 Pause Manager라는 스크립트를 사용합니다.
-
이 스크립트에 대해서는
-
동영상 후반부에서 자세히 다루도록 하겠습니다.
-
이런 유형의 UI를 만드는 법에 관해 자세한 사항은
-
아래 링크된 학습 자료를 참고하십시오.
-
스크립트 작성으로 넘어가기 전에
-
믹서에 한 가지 작업을 더 하겠습니다.
-
Music 그룹과 Soundeffects 그룹의
-
볼륨을 스크립트 컨트롤에 나타나게하여
-
스냅샷 시스템을 사용하지 않고 직접
-
설정할 수 있게 할 것입니다.
-
Music 그룹을 클릭하고
-
볼륨 파라미터를 오른쪽 버튼 클릭하고
-
Expose To Script를 선택합니다.
-
Soundeffects 그룹에 대해서도 마찬가지로 합니다.
-
이제 Exposed Parameters 리스트에서
-
두 파라미터의 이름을 지정합니다.
-
첫 번째 나타나게될 파라미터는
-
musicVol,
-
두 번째는
-
sfxVol로 하겠습니다.
-
파라미터 이름을 더블클릭하면
-
언제든 이름을 변경할 수 있습니다.
-
프로젝트에서 오디오 설정을 마쳤으니
-
이제 스크립트 컨트롤을
-
추가해 보겠습니다.
-
먼저 Pause Manager 스크립트를 편집합시다.
-
MenuCanvas 게임 오브젝트로 가서
-
Pause Manager 스크립트를 더블클릭하여
-
Monodevelop에서 엽니다.
-
어떻게 구성되어 있는지 재빨리 훑어보도록 합시다.
-
네임스페이스 선언에
-
using UnityEngine.UI으로 되어 있는 것은
-
UI 시스템으로부터 몇몇 함수를
-
사용하기 때문인데, 이를테면
-
Canvas 변수 타입 같은 것이죠.
-
또한 현재
-
Unity Editor에서 실행하고 있는지 확인하고 있는데,
-
만일 그렇다면 네임스페이스 선언에
-
using UnityEditor을 추가하게 됩니다.
-
Canvas형 변수
-
canvas를 선언했고 이것은 UI 캔버스입니다.
-
Start 함수에서는
-
getComponent를 이용해 레퍼런스를 가져옵니다.
-
Update 함수에서는
-
Esc 키를 눌렀는지 확인하게 되어 있습니다.
-
만일 Esc를 누른 상태면
-
캔버스 상태를 활성화에서 비활성화로
-
또는 그 반대로 전환합니다.
-
또한 Pause 함수를 호출합니다.
-
Pause 함수에서는
-
Time.timeScale을 설정하게 되는데,
-
먼저 점검을 해서
-
현재 0으로 지정되었으면 1로,
-
그렇지 않으면 0으로 지정합니다.
-
Time.timeScale을 0으로 지정하면
-
게임에 있는 모든 오브젝트의
-
움직임이 멈춥니다.
-
또한 public 함수 Quit가 있는데,
-
여기서는
-
Unity Editor를 사용하고 있는지 점검해서
-
만일 그렇다면 EditorApplication.isPlaying을 거짓(false)으로 지정합니다.
-
그러면 씬의 플레이를 중단하게 되는 거죠.
-
아니면
-
Application.Quit을 호출하게 되고,
-
이것은 애플리케이션 빌드일 것이니,
-
실제로 종료하고 바탕화면으로 나가게 됩니다.
-
이제 이 스크립트에
-
Audio Mixer를
-
제어할 수 있는 요소를
-
몇 가지 추가하려고 합니다.
-
먼저 추가할 것으로는
-
또 하나의 네임스페이스 선언
-
using UnityEngine.Audio입니다.
-
이렇게 해두면
-
UnityEngine.Audio의 멤버를 이용할 수 있습니다.
-
Audio Mixer, Audio Mixer Snapshots 클래스 같은 것들이죠.
-
그리고 public 변수
-
AudioMixerSnapshot 유형 두 개를 추가합니다.
-
이걸 각각 paused와
-
unpaused라고 하겠습니다.
-
파트 1 동영상에서 생성했던 스냅샷에
-
할당될 변수들입니다.
-
Paused 함수 아래에는 새로운 public 함수를 추가합니다.
-
이 함수의 이름은 Lowpass로 하겠습니다.
-
Lowpass에서는
-
Time.timeScale이 현재 0인지 점검합니다.
-
Time.timeScale이 0이면
-
Paused 스냅샷에서 TransitionTo 함수를
-
호출합니다.
-
부동소수점 파라미터
-
timeToReach를 파싱하는데
-
이 경우에는 0.01초입니다.
-
만일 Time.timeScale이 0이 아니면
-
Unpaused 스냅샷에서 TransitionTo 함수를
-
호출합니다.
-
Lowpass 함수를 선언했으니
-
이제 이걸 Pause 함수 안에서
-
호출하겠습니다.
-
스크립트를 저장하고 Unity로 돌아갑시다.
-
에디터에서
-
Pause Manager 스크립터에 이제
-
두 개의 변수 Paused와 Unpaused가 새로 생겼죠.
-
이 변수들을 Asset Picker를 사용해
-
앞서 생성한 AudioMixerSnapshots에 연결할 겁니다.
-
Paused 스냅샷과
-
Unpaused 스냅샷을 선택합니다.
-
씬을 플레이하여 한 번 시험해 봅시다.
-
Esc를 누르면 Paused 스냅샷이 호출된 것이 보이죠.
-
그런 다음에 다시 계속을 클릭하면
-
Unpaused 스냅샷이 재호출되는 것을 알 수 있습니다.
-
잘 실행되는군요.
-
Paused 메뉴에는
-
음악과 사운드 이펙트의
-
볼륨 컨트롤이 있습니다.
-
그래서 이걸 사용해 Audio Mixer를 제어할 수 있는
-
스크립트를 작성하려고 합니다. 먼저 새로운 C# 스크립트를 생성하고,
-
MixLevels라고 하겠습니다.
-
이걸 더블클릭해서 Monodevelop에서 엽니다.
-
이번에도 제일 먼저 할 일은
-
네임스페이스 선언에
-
using UnityEngine.Audio을 추가하는 것입니다.
-
다음으로 AudioMixer 타입의 public 변수
-
masterMixer를 추가합니다.
-
여기서는 Start 함수와 Update 함수가
-
필요하지 않을 것이기 때문에 지우겠습니다.
-
그런 다음에 public 함수
-
SetSfxLvl을 선언하고,
-
SetSfxLvl에
-
부동소수점형 파라미터
-
sfxLvl를 넣습니다.
-
sfxLvl 파라미터를 사용해
-
masterMixer에 부동소수점 값을
-
파싱하고, 그것을 사용해
-
AudioMixer에서
-
Soundeffects 레벨의 볼륨을 변경할 것입니다.
-
여기에는 SetFloat 함수를 사용합니다.
-
SetFloat는 두 개의 파라미터를 가집니다.
-
하나는 문자열로서
-
우리가 설정하려는 파라미터의 이름이고,
-
부동소수점 파라미터로는 값을 지정합니다.
-
문자열 sfxVol을 파싱할 텐데,
-
이것은 앞서 Inspector에 나타나게했던
-
파라미터의 이름입니다.
-
또한 두 번째 public 함수
-
SetMusicLvl을 선언합니다.
-
SetMusicLvl도
-
부동소수점 파라미터를 가지는데, 이 경우에는
-
musicLvl입니다.
-
SetMusicLvl에서도 SetFloat를 사용하여
-
파라미터 musicVol의 값을 설정합니다.
-
스크립트를 저장하고 에디터로 돌아갑시다.
-
에디터에서
-
MixLevels 스크립트를
-
MenuCanvas 게임 오브젝트에 추가합니다.
-
또한 Audio Mixer인
-
Master Mixer를
-
MasterMixer 변수로 선택합니다.
-
다음으로, PausePanel에서
-
EffectsSlider
-
게임 오브젝트를 선택합니다.
-
Slider 스크립트에서 보면
-
이전에는 On Value Changed가
-
GunBarrelEnd 값과
-
Player 오디오 소스를 직접 교체하고 있던 것을 알 수 있습니다.
-
이제 이들을 오디오 믹서에 다시 연결할 수 있습니다.
-
먼저 MenuCanvas를 끌어와 넣습니다.
-
이 게임 오브젝트에서
-
이용할 수 있는 함수 리스트에서
-
MixLevels 스크립트를 선택하고,
-
스크립트에서 SetSfxLvl 함수를
-
선택합니다.
-
Player 오디오 소스를 선택해서 - 버튼을 누르면
-
Player 오디오 소스의 연결을 제거할 수 있습니다.
-
MusicSlider에 대해서도 마찬가지로 합니다.
-
MenuCanvas 게임 오브젝트를 끌어와서 넣고
-
함수 리스트에서 이번에는
-
MixLevels 스크립트, SetMusicLvl을 선택합니다.
-
음악 소리가 -10db 정도면
-
믹서에서 나올 가장 큰 음악 소리로
-
적당하겠다고 결정했기 때문에
-
그것을 슬라이더에 Max Value로 넣어줍니다.
-
또한 Min Value로
-
-80을 지정합니다. 그러면 아무 소리도 안 날 것입니다.
-
EffectsSlider에서도 마찬가지로 할 텐데,
-
이 경우에는 범위는 -80에서
-
0 사이로 합니다.
-
이렇게 셋업하고 씬을 플레이하여
-
시험해 봅시다.
-
Esc를 누르고,
-
Music Volume을 조정합니다.
-
Effects Volume도 내립니다.
-
자, 다 되었습니다.
-
Audio Mixers,
-
SnapShots, Exposed Parameters, Effects에 관한 자세한 사항은
-
아래 링크된 학습 자료를 참고하십시오.