inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

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

해결된 질문

425

신지한

작성한 질문수 2

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

    전체 코드와도 비교해봤을 때 틀린 부분이 없었고 뭔가 될때도 있고 안될때도 있고 이러다보니 원인을 잘 모르겠습니다..!

C# unity 객체지향

답변 1

3

BurningCarrot 버닝캐럿

안녕하세요! 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());
}

 

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

0

신지한

답변 감사합니다😊

제공해주신 자료에 스크립트들이 빠져있습니다

0

2

1

싱글턴패턴

0

22

2

LobbyUIController의 백키가 사라졌는데 왜그런건가요?

0

42

2

무조건 타이틀 씬부터 시작해야하나요?

0

41

1

BaseUI, UIManager

0

52

3

3d프로젝트에 적용해도 무방한가요?ㅁ

0

73

2

UserDataManager 코드 질문입니다.

0

89

2

업적/미션 Pt.3에서 OnClickClaimBtn 호출 시 Sort 부분 호출 동작

0

108

1

데이터 로드 관련 질문

0

89

2

16번 강의에서 ShowUI 함수부분 오타가 있는거 같습니다.

0

73

2

PlayerPrefs 에 대해서 문의드립니다.

0

107

2

다운 받은 자료 용량 관련 문의입니다.

0

94

2

userDataList Json으로 저장

0

101

2

Lobby 프리팹 구성 질문

0

100

3

씬로딩 관련한 질문드립니다.

0

104

2

보충강의를 들었는데도 불구하고 Confirm UI 창이 표시가 되지 않습니다.

0

144

2

Resources폴더의 로드에 대하여 궁금한 것이 있습니다.

1

157

2

LoadData함수가 호출되지 않습니다.

0

87

1

캔버스를 여러 장 사용하는 이유

0

151

1

인피티니스크롤 item의 rect Transform에 Nan값

0

112

2

아이템 필터 기능

0

146

1

[Title씬 구성 관련 질문 : 프리팹]

0

182

2

CSVReader 자세하게 설명 가능하신가요?

0

227

1

안녕하세요 일시정지부분

0

169

2