[TIL] 52 오디오매니저 (AudioManager) ⭐⭐⭐
카테고리: Til
AudioManager
AudioManager
[o] 알고리즘 문제 - 52
[o] 다른반 강의 듣기
[x] 심화주차 강의 듣기.
AudioManager
Resources.Load<AudioClip>
(“Audios/SFX/”+sfxName);
using UnityEngine;
using UnityEngine.Audio;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class AudioManager : MonoBehaviour
{
private AudioClip _audioClip;
public AudioSource BgSound;
public AudioSource[] SFXSound;
public AudioMixer Mixer;
private string _bgFilename;
private float _soundValue;
private void Awake()
{
_audioClip = GetComponent<AudioClip>();
DontDestroyOnLoad(this);
}
private void Start()
{
SceneManager.sceneLoaded += LoadedsceneEvent;
BgSoundPlay("BG1", 0.05f);
}
private void LoadedsceneEvent(Scene scene, LoadSceneMode arg1)
{
if (scene.name == "KDH_Obstacle")
{
_bgFilename = "BG1";
}
else if (scene.name == "99.BJH")
{
_bgFilename = "BG3";
}
BgSoundPlay(_bgFilename, 0.05f);
}
public void SFXPlay(string sfxName, Vector3 audioPosition, float audioVolume)
{
GameObject AudioGo = new GameObject(sfxName + "Sound");
AudioSource audiosource = AudioGo.AddComponent<AudioSource>();
audiosource.outputAudioMixerGroup = Mixer.FindMatchingGroups("SFX")[0];
_audioClip = Resources.Load<AudioClip>("Audios/SFX/"+sfxName);
if (_audioClip!=null)
{
audiosource.clip = _audioClip;
audiosource.volume = audioVolume;
audiosource.Play();
Destroy(audiosource.gameObject, audiosource.clip.length);
}
}
public void BgSoundPlay(string BgName, float audioVolume)
{
_audioClip = Resources.Load<AudioClip>("Audios/BGM/"+ BgName);
BgSound.clip = _audioClip;
BgSound.outputAudioMixerGroup = Mixer.FindMatchingGroups("BGSound")[0];
BgSound.loop = true;
BgSound.volume = audioVolume;
BgSound.Play();
}
//볼륨조절
public void BGSoundVolume(Slider _bgmSlider)
{
_soundValue = _bgmSlider.value;
Mixer.SetFloat("BGVolume", _soundValue);
}
public void SFXSoundVolume(Slider _sfxSlider)
{
_soundValue = _sfxSlider.value;
Mixer.SetFloat("SFXVolume", _soundValue);
}
public void MasterVolume(Slider _masterSlider)
{
_soundValue = _masterSlider.value;
Mixer.SetFloat("Master", _soundValue);
}
}
충돌 시 충돌물체 이름받아서 그 사운드 실행
protected void OnCollisionEnter(Collision collision)
{
{
GameManager.Sound.SFXPlay((name), gameObject.transform.position, 0.1f);
}
}
_audioClip = Resources.Load<AudioClip>
(“Audios/SFX/”+sfxName);
- Load를 사용해서 Resources폴더에 있는 파일을 불러와 clip으로 사용하였다.
- 충돌하는 물체의 name과 Audio의 이름을 맞춰줘야 됐다.
- clip을 리스트로 audiomanager가 가지고 있는 방법도 생각했었고,
- 여러 방법이 있을 때마다 무엇이 맞는지 고민하는 시간이 있었고,
- 비슷하다고 생각되면 편하고 끌리는 방법을 사용하자.
오디오소스
PlayerSound
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerSound : MonoBehaviour
{
private Rigidbody _rigidbody;
private float _time;
private float _delay =0.5f;
private PlayerController _playerController;
private void Awake()
{
_rigidbody=GetComponent<Rigidbody>();
_playerController =GetComponent<PlayerController>();
}
private void Update()
{
WalkSound();
}
public void LandingSound()
{
GameManager.Instance.AudioManager.SFXPlay(("landing"), gameObject.transform.position, 0.1f);
}
public void WalkSound()
{
_time += Time.deltaTime;
RaycastHit _hit;
if (Mathf.Abs(_rigidbody.velocity.y)<0.1f&& Mathf.Abs(_rigidbody.velocity.magnitude)> 0.1f)
{
if (_playerController.IsGrounded())
{
if (_time > _delay)
{
GameManager.Instance.AudioManager.SFXPlay(("Footstep"), gameObject.transform.position, 0.1f);
_time = 0;
}
}
}
}
}
LandingSound 는 애니메이션이벤트에 추가
소리 재생, 소리 조절 (3종).
잡담,정리
Resources.Load<AudioClip>
(“Audios/SFX/”+sfxName);
오디오매니저, 게임매니저, 싱글톤은 게임매니저만,
댓글남기기