인프런 커뮤니티 질문&답변

신지한님의 프로필 이미지

작성한 질문수

유니티 시스템 프로그래밍 Pt.1 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지

유저 인벤토리 Pt.4 (InventoryUI, InfiniteScroll)

수업내용 관련해서 몇가지 질문이 있습니다

해결된 질문

24.07.23 03:33 작성

·

249

·

수정됨

2

안녕하세요 강의 수강중 질문이 몇가지 생겨서 질문드립니다

  1. 강의에서 제가 놓친걸수도 있는데 변수명앞에 m_의 의미는 뭔가요?

  2. 유니티에서 게임 실행시에 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님의 프로필 이미지
BurningCarrot
지식공유자

2024. 07. 23. 09:14

안녕하세요! BurningCarrot입니다.

문의해 주신 내용에 답변 드립니다.

 

  1. 변수명 앞의 m_의 의미

m_은 멤버변수라는 의미로 저는 private 멤버변수명 앞에 m_을 붙여 public 멤버변수(m_없이 대문자로 시작)와 구분해 주고 있습니다. 유니티에서 c# 사용 시 명확한 코딩 규약이 존재하지 않기에 현업에서는 프로젝트 마다 각자의 규약을 정해 변수명을 지정해주고 있습니다. 이 강의에서는 private 멤버변수는 m_VariableName, public 멤버변수는 VariableName, 지역변수는 variableName의 규약으로 명명해주고 있습니다. 이런 코딩 규약은 수강생 여러분의 각자의 규칙에 따라 진행하셔도 상관없습니다.

 

  1. 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());
}

 

추가로 궁금하신 점이 있으시다면 편하게 질문 부탁 드립니다. 🙂

신지한님의 프로필 이미지
신지한
질문자

2024. 07. 23. 17:52

답변 감사합니다😊