[SerializeField]

이 친구가 무슨 역활인지 확실하게 알게 된 날
팀 프로젝트를 하면서 이런식으로 앞에 적혀있고 뒤에 private 등등 적혀있는 부분들이 보였었는데 처음에는 복잡해 보이고 해서 아 뭐지? 이런 생각을 가지고 있었는데 공부하면서 알게 된 점은

이 코드로 인해서 private으로 변수를 지정해주면 스크립트 내부에서만 건드릴 수 있게 되어 unity의 inspector창에서는 우리가 건드릴 수 없게 된다

여기서 바로 SerializeField 라는 친구가 등장하는데 이 친구는 private인 스크립트를 inspector에서 오브젝트나 오디오클립 같은 지정대상을 드래그앤드롭을 이용하여 상호작용 가능하게 만들어준다 (private으로 지정해주면 유니티 inspector창에서 건드릴 수 없다는 것도 모르고 있었는데 이 부분으로 인하여 잘 알게 되었다)


탈도 많고 생각할 거리도 던져준 문제의 오디오 매니저

using UnityEngine;
using UnityEngine.Audio;

public class AudioManager : MonoBehaviour
{
	public static AudioManager instance;
    
    public GameObject BGM;
    public GameObject SFX;
    
    private AudioSource bgmSource;
    private AudioSource sfxSource;
    
    void Awake()
    {
    	if (instance == null)
        	{
            	instnace = this;
                DontDestroyOnLoad(gameObject);
            }
        
        bgmSource = BGM.GetComponent<AudioSource>;
        sfxSource = SFX.GetComponent<AudioSource>;
    }
    
    public void SetBGMVol(float value)
    {
    	bgmSource.volume = value;
    }
    public void SetSFXVol(float value)
    {
    	sfxSource.volume = value;
    }
}

이 스크립트로 정돈되기 전 까지 인터넷에서 되게 많이 보고 따라도 해보고 긁어도 와보고 해봤지만 결국 내가 아는 코드가 아니라서 기능들을 이것저것 추가하다 어떻게 적용되는지 몰라 결국 만든것들 폐기

기억나는건 enum 목록을 만들어 추가랑 변경이 쉽게 가능하도록 해주는 오디오 매니저였던것 같은데 지금도 확실하게 기억 안나는거 보면 코딩을 좀더 알게되면 그때 공부하기 좋을것 같은 생각이 들었다

잡설이 길었으니 기능을 설명하자면 bgm 과 sfx 소리를 따로 설정할 수 있게끔 구분한 기본상태의 스크립트라 보면 되겠다

Audio Clip 을 추가하고 실행하는 함수는 요 밑에

Public AudioClip Mainbgm;
public AudioClip Jump;
public AudioClip Death;

Public void PlayMainbgm()
{
	bgmSource.stop();
	bgmSource.clip = Mainbgm;
    bgmSource.Loop(true);
    bgmSource.Play();
}

public void Playjump()
{
	sfxSource.PlayOneShot(Jump);
}
public void Playdeath()
{
	sfxSource.PlayOneShot(Death);
}

추가해서 GameManager나 UiManager에 프리팹스 등 특정 상황에서 소리를 내고싶으면

AudioManager.instance.Playjump();

이렇게 적으면 오디오 매니저에 저장 되어있는 오디오 클릭 Jump를 실행시킨다

0개의 댓글