로그인을 구현하기 위해서는, 아이디와 비밀번호를 저장하기 위한 외부 데이터베이스가 필요합니다.
DB에는 여러 플랫폼이 존재하지만, 저는 그중에 파이어베이스를 이용하여 구현했습니다.
모바일 환경에서 효과적이고 편리한 데이터 베이스 플랫폼인 파이어 베이스는 유니티에서 사용할 수 있는 라이브러리를 제공하고 있습니다.
위 사진은 파이어베이스에서 등록이 완료된 테스트 계정이, 로그인되었음을 확인할 수 있는 로그입니다.
현재는 단순하게 위와 같은 로그인 창을 구현했습니다.
추가적인 로직이나 컴포넌트를 이용하여 회원가입에 필요한 추가적인 데이터를 받는 것도 가능할 것입니다.
로그인을 완료한 이후에, 게임을 시작할 수 있도록 스타트 버튼은 login UI 오브젝트 세트의 후위에 두어, 버튼(스크린 전체)을 클릭할 수 있도록 했습니다.
로그인 버튼을 클릭 시, 호출되는 함수들입니다.
LoginOrLogout 함수는, 현재 로그인 버튼에 입력된 문자열을 조건문으로 삼아서, 로그인과 로그아웃으로 분기하여 각 기능을 작동시킵니다.
파이어 베이스 라이브러리의 FirebaseAuth 클래스를 인스턴스화한 auth에 참조하여, 아이디와 비밀번호가 일치하는지 확인하고, 일치한다면 로그인과 관련된 부울 변수들을 조정합니다.
isLogin과 isLogout 변수는, 파이어베이스 매니저의 유저 로그인 체크 변수와 로그인 버튼의 문자열 입력값을 조정합니다.
위 함수는 Start 단계에서 InvokeRepeating을 통해서, 0.2초 단위로 반복되어 호출됩니다.
FirebaseUser user = auth.CurrentUser;
위 코드를 통해서, 로그인이 되어있는지 확인할 수 있음에도 제어 변수를 따로 사용하는 것은, 반복되는 서버 연결을 통한 과부하를 줄이기 위함입니다.
즉, 파이어베이스 매니저의 맴버 변수인 isUserLogin은 앞으로, 인게임에서 유저가 로그인되었는지 체크해야할 때 사용될 것입니다.
대표적으로 씬로드 매니저에서 호출되는, ChangeSceneManagerCall 함수가 있습니다.
위 함수는, 씬 전환간에 필요한 초기화 및 데이터 세팅을 담당하는 게임매니저의 함수를 호출하는 기능을 가졌으며, 비동기적 씬 로딩간에 호출되는 함수입니다.
이때, 파이어베이스에 직접 유저의 로그인 여부를 참조하면, 올바르게 세팅을 하지 않는 것을 확인할 수 있었습니다.
이는, 파이어 베이스의 로그인 체크가 비동기적으로 이루이지기 때문일 것입니다.
즉, CahgeSecneManagerCall 함수에서 조건문이 제대로 체크되지 않고, 먼저 씬 로딩이 완료되는 것입니다.
로그인을 체크하고, 로그인 상태인 것을 확인했다면
게임 스타트 버튼(화면 전체)를 눌러서 게임을 시작할 수 있도록 했습니다.
즉, 씬 매니저를 통해서 게임 필드 씬을 호출합니다.
회원 가입 또한, 파이어 베이스 라이브러리의 내장 메서드를 이용하여 구현했습니다.