unity/기술개발일지

2인용 간단한 pingpong 만들기 - Photon, firebase

rimugiri 2024. 10. 19. 03:47
728x90

저번에 firebase를 사용해서 데이터베이스에 있는 데이터를 받아오는 것을 구현해 보았고 이번에는 그것을 떠올리며 로그인과 Photon의 간단한 사용법을 익힐 예정이다

 

우선 인증은 이메일 인증만 구현해 보았다

public void Start()
{
    signInButton.interactable = false;

    FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task =>
    {
        var result = task.Result;

        if (result != DependencyStatus.Available)
        {
            Debug.LogError(result.ToString());
            IsFirebaseReady = false;
        }
        else
        {
            firebaseAuth = FirebaseAuth.DefaultInstance;
            IsFirebaseReady = true;
        }
        signInButton.interactable = IsFirebaseReady;
    });
}

public void SignIn()
{
    if (!IsFirebaseReady || IsSignInOnProgress || User != null)
    {
        return;
    }

    IsSignInOnProgress = true;
    signInButton.interactable = false;

    firebaseAuth.SignInWithEmailAndPasswordAsync(emailField.text, passwordField.text).ContinueWithOnMainThread(task =>
    {
        Debug.Log(task.Status);
        if (task.IsFaulted)
        {
            Debug.LogError(task.Exception);
        }
        else if (task.IsCanceled)
        {
            Debug.LogError("Sign-in canceled");
        }
        else
        {
            User = task.Result.User;
            Debug.Log("Sign-in success");
            SceneManager.LoadScene("Lobby");
        }
        IsSignInOnProgress = false;
        signInButton.interactable = true;
        return;
    });
}

 

등록되어있는 이메일만 로그인이 가능하게 구현하였고 초기화 부분은 전에 했던 것과 거의 똑같다

여기에서 ContinueWith를 사용하지 않은 이유는 데스크탑에서 실행할때 이 부분이 오류가 많이 발생한다고 사람들이 말한다.

 

Photon 연결

 

firebase는 전에 해봤으므로 익숙했지만 Photon은 처음이였다.그래서 간단한 게임을 적용해 보고자 핑퐁을 선택하였다

Photon에서 동기화가 필요한 객체는 Resources 폴더에 존재해야 하며 애니메이션, transform 각각의 동기화를 위하여 Photon view, Photon animation view를 가지고 있어야 한다

만약에 다른 변수값을 동기화 시키고 싶다면 IPunObservable를 상속받은 class에서 이를 구현하면 된다고 한

 

다음으로는 플레이어의 움직임 코드로 위 아래로 움직일 수 있게 되어있다.

여기에서 중요한 점은 자신의 플레이어만 움직일 수 있게 해야한다

 

또한 공용으로 쓰이는 객체는 마스터클라이언트에서만 생성해야 하나의 객체만 존재 할 수 있으므로 아래처럼 구현하였다

 

 

 

마지막으로 전체적으로 실행되야 하는 메소드는 RPC를 통하여 실행시킬수 있다

 

 

 

후기

오랜만에 유니티 공부를 해보았는데 다음번에는 firebase의 구글 로그인 및 회원가입 을 구현해보고

사실 pingpong은 AI를 연습하기위해 만들었는데 다 만들어 지면 다시 일지를 작성해 보겠다

728x90