-
Parrying Sword #53 : [사운드][프로그래밍] bgm과 효과음유니티 게임 개발/메인 프로젝트: Parrying Sowrd 2024. 1. 30. 05:08
저번 게시글에서는 직접 작곡을 해서 bgm을 넣으려고 했던 것 같은데,
하다 보니 도저히 안될 것 같아서 결국 유니티 에셋 스토어에서 받아서 쓰기로 했습니다.
https://assetstore.unity.com/ko
에셋스토어
여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.
assetstore.unity.com
사용한 에셋들은 다음과 같습니다.
NOVA SOUND : Free Fireworks - Fire FX - Nova Sound
MGWSOUNDDESIGN : Grenade Sound FX
GWRITERSTUDIO : Monster SFX - 111518
INSPECTORJ SOUND EFFECTS : Wooden Fence Destruction (Free Sample Pack)
EDOARDO GIGANTE : Sword Sound Pack
ESCALONAMUSIC.COM : Action RPG Music Free
public void onBurstSound() { burstSoundController.playClip(); } public void onBreathSound() { breathSoundController.playClipWithStartTime(0.2f); } public void onRoarSound() { roarSoundController.playClipWithStartTime(0.1f); } public void onNormalSound() { normalSoundController.playClipWithStartTime(0.2f); } public void onCompletionSound() { completionSoundController.playClip(); }
받은 에셋들의 경우, 효과음은 이런 식으로 오디오 각 객체들의 행동에 연결해 둡니다.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class FadeSound : MonoBehaviour { // BGM에 붙여서 사용 private float minV = 0.0f; private float maxV; private float speed; private AudioSource audioSource; public FadeState fadeState = FadeState.FADEIN; private void Awake() { maxV = SaveData.SoundBGMVolume; speed = (maxV - minV) / 300.0f; audioSource = GetComponent<AudioSource>(); } private void Start() { if( fadeState == FadeState.NON ) { audioSource.volume = SaveData.SoundBGMVolume; } else if( fadeState == FadeState.FADEIN ) { audioSource.volume = 0.0f; } } private void Update() { if (!audioSource.isPlaying) return; //Debug.Log(audioSource.volume); switch (fadeState) { case FadeState.FADEIN: audioSource.volume += speed; if (audioSource.volume > maxV ) { audioSource.volume = maxV; fadeState = FadeState.NON; } break; case FadeState.FADEOUT: audioSource.volume -= speed; if( audioSource.volume < minV ) { audioSource.volume = minV; fadeState = FadeState.NON; } break; } } public void fadeIn() { fadeState = FadeState.FADEIN; } public void fadeOut() { fadeState = FadeState.FADEOUT; } }
bgm의 경우 페이드인, 페이드아웃 처리를 해줍니다.
public override void buttonLeft() { if (now == 0) { soundBGMVolume -= 1; if (soundBGMVolume < 0.0f) soundBGMVolume = 0; SaveData.SoundBGMVolume = ((float)soundBGMVolume / 10); bgmText.text = soundBGMVolume.ToString(); soundBGMController.updateVolume(); } else if (now == 1) { soundSEVolume -= 1; if (soundSEVolume < 0) soundSEVolume = 0; SaveData.SoundSEVolume = ((float)soundSEVolume / 10); seText.text = soundSEVolume.ToString(); soundSEController.updateVolume(); soundSEController.playClip(); } }
이 코드는 메인 메뉴의 옵션에 해당하는 코드의 일부입니다.
옵저버 패턴 비슷하게 응용해서, 옵션에서 볼륨을 바꾸면 등록된 개체의 데이터를 업데이트 시키는 방식입니다.
public void updateVolume() { if (isBGM) { audioSource.volume = SaveData.SoundBGMVolume; } else { audioSource.volume = SaveData.SoundSEVolume; } //Debug.Log(audioSource.volume); }
이게 등록된 개체의 업데이트 메소드입니다.
bgm이나 효과음이 어떻게 적용되었는지 영상을 찍어오고 싶기는 한데,
맥북은 컴퓨터 내의 소리 녹음이 따로 방법을 쓰지 않고 기본으로는 불가능한 관계로 올리지 못하여 아쉽습니다.
'유니티 게임 개발 > 메인 프로젝트: Parrying Sowrd' 카테고리의 다른 글
Parrying Sword #55 : 게임 완성 및 후기 (0) 2024.02.02 Parrying Sword #54 : [개발] 해상도 설정 (0) 2024.01.31 Parrying Sword #52 : [개발] 메인 메뉴 및 데이터 저장 시스템 (0) 2024.01.16 Parrying Sword #51 : [아트] Parrying Sword 타이틀 로고 (0) 2024.01.16 Parring Sword #50 : [프로그래밍] 메뉴와 상호작용 (0) 2024.01.12