해결된 질문
작성
·
286
·
수정됨
2
안녕하세요 강의 수강중 질문이 몇가지 생겨서 질문드립니다
강의에서 제가 놓친걸수도 있는데 변수명앞에 m_의 의미는 뭔가요?
유니티에서 게임 실행시에 PlayerPrefs의 Sound값이 True임에도 불구하고 시작할 때 노래가 안나오는 현상이 계속 발생합니다..!
디버깅해보니 AudioManager의 Start가 TitleManager의 Start보다 빨리 시행돼서 LoadUserData를 하기 전에 AudioManager의 해당 코드에서 Mute()를 호출하는거 같습니다 (디버깅 해보면 이 시점엔 userSettingsData.Sound 값이 false 입니다)
private void Start()
{
var userSettingsData = UserDataManager.Instance.GetUserData<UserSettingsData>();
if(userSettingsData != null)
{
if(!userSettingsData.Sound)
{
Mute();
}
}
}
전체 코드와도 비교해봤을 때 틀린 부분이 없었고 뭔가 될때도 있고 안될때도 있고 이러다보니 원인을 잘 모르겠습니다..!
답변 1
2
안녕하세요! BurningCarrot입니다.
문의해 주신 내용에 답변 드립니다.
변수명 앞의 m_의 의미
m_은 멤버변수라는 의미로 저는 private 멤버변수명 앞에 m_을 붙여 public 멤버변수(m_없이 대문자로 시작)와 구분해 주고 있습니다. 유니티에서 c# 사용 시 명확한 코딩 규약이 존재하지 않기에 현업에서는 프로젝트 마다 각자의 규약을 정해 변수명을 지정해주고 있습니다. 이 강의에서는 private 멤버변수는 m_VariableName, public 멤버변수는 VariableName, 지역변수는 variableName의 규약으로 명명해주고 있습니다. 이런 코딩 규약은 수강생 여러분의 각자의 규칙에 따라 진행하셔도 상관없습니다.
PlayerPrefs의 Sound값이 True임에도 불구하고 시작할 때 노래가 안 나오는 현상
이 부분은 제가 실수가 있었습니다. AudioManager의 Start 함수와 TitleManager의 Start 함수의 실행 순서는 일정하게 보장되지 않습니다. 즉 AudioManager의 Start 함수가 먼저 실행될 수도 있고 TitleManager의 Start 함수가 먼저 실행될 수도 있다는 뜻입니다. 때문에 AudioManager의 Start 함수에 해당 코드를 넣으면 버그가 발생할 수 있습니다. 따라서 AudioManager의 Start 함수에 있던 내용을 새로운 OnLoadUserData 함수를 작성하여 그 안으로 이동하였고, TitleManager의 Start 함수에서 유저 데이터를 로드한 후에 AudioManager의 OnLoadUserData 함수를 호출하는 방식으로 수정했습니다. 강의와 업로드 자료 모두 수정했으니 확인 부탁 드립니다.
//AudioManager.cs
public void OnLoadUserData()
{
var userSettingsData = UserDataManager.Instance.GetUserData<UserSettingsData>();
if(userSettingsData != null)
{
if(!userSettingsData.Sound)
{
Mute();
}
}
}
//TitleManager.cs
private void Start()
{
//유저 데이터 로드
UserDataManager.Instance.LoadUserData();
//저장된 유저 데이터가 없으면 기본값으로 세팅 후 저장
if(!UserDataManager.Instance.ExistsSavedData)
{
UserDataManager.Instance.SetDefaultUserData();
UserDataManager.Instance.SaveUserData();
}
AudioManager.Instance.OnLoadUserData();
StartCoroutine(LoadGameCo());
}
추가로 궁금하신 점이 있으시다면 편하게 질문 부탁 드립니다. 🙂
답변 감사합니다😊