유니티 엔진 - 게임 프로젝트/데디케이트 기반 모바일 게임

로그인 처리 - 최종) 로그인을 통한 클라이언트 -> 서버로의 패킷 전송

monstro 2025. 11. 17. 15:35
728x90
반응형

- 개요

로그인 UI의 로그인 버튼을 누르면 패킷을 전송할 수 있도록 설계한다

이때 PacketType 구조체를 사용하여 클라이언트 -> 서버의 패킷과 서버 -> 클라이언트의 패킷으로 분리하고

각 패킷에 해당하는 클래스를 생성하여 전송하는 데이터를 처리하도록 설정한다

 

- 클라이언트 사이드

1) PacketType 클래스

 

PacketType 클래스순수 C# 클래스로서 네임스페이스를 통해 접근해야 한다

또한 해당 클래스는 서버클라이언트에서 모두 접근하도록 설정한다

구성은 다음과 같다

  • 1) 패킷의 타입을 결정하는 byte 타입의 PacketType 구조체
    • 1 - 1) 클라이언트의 패킷 종류 
      • 유효한 계정인지 판단하는 패킷
      • 인증을 요청하는 패킷
    • 1 - 2) 서버의 패킷 종류
      • 인증 결과를 전달하는 패킷
  • 2) 패킷 정보를 직렬화 + 역직렬화하기 위한 INetPacket 인터페이스
    • Type 멤버변수를 통해 서버의 패킷인지, 클라이언트의 패킷인지 설정

 

2) Net_AuthRequest 클래스

 

Net_AuthRequest 클래스클라이언트에서 서버로 인증을 요청하기 위해 전송하는 패킷이다

구성은 다음과 같다

  • Type 멤버변수 : 패킷의 타입을 설정
  • UserName과 Password 프로퍼티 : 로그인한 유저의 이름 + 비밀번호
  • Deserialize 함수 : 서버로부터 전달된 데이터역직렬화하는 함수
  • Serialize 함수 : 클라이언트로부터 전달할 데이터직렬화하는 함수

 

3) NetworkClient 클래스

 

서버와 연결되었다면 콜백 함수를 호출하는 OnServerConnected 멤버변수를 추가한다

 

 

SendServer 함수를 템플릿 함수로 수정하여 서버로 전송하는 데이터에 따라 다르게 동작할 수 있도록 구성한다

로직은 위와 같이 수정하여 데이터를 직렬화하여 설정한 방식으로 전송한다

 

 

OnPeerConnected 함수에 위와 같이 로직을 추가하여

서버와 연결되었다면 OnServerConnected 멤버변수를 통해 콜백함수를 호출한다

 

4) Tweener 클래스

 

Tweener 클래스는 로그인하는 동안 접속 대기 UI에 사용한다

LeanTween 패키지를 사용하여 오브젝트의 크기에 대한 애니메이션을 재생한다

OnEnable 함수를 위와 같이 구성하여 오브젝트가 활성화되면 핑퐁 애니메이션을 재생한다

 

5) UI_Login 클래스

 

서버와 연결되었는지를 판단하는 불리언 변수를 추가한다

 

 

Tweener 클래스를 컴포넌트로 사용하는 UI 오브젝트의 열거형을 추가한다

 

 

Awake 함수에서는 추가한 열거형의 멤버들을 GameObject로 바인드한다

 

 

Start 함수에서는 추가한 열거형의 멤버들의 부모 오브젝트를 비활성화하고,

NetworkClientSetIsConnected 함수를 바인드한

 

 

OnDestroy 함수에서는 NetworkClient에 바인드한 SetIsConnected 함수를 제거한다

 

 

SetIsConnected 함수에서는 로그인 성공 여부를 판단하는 불리언 변수를 True로 설정한다

 

 

Login 함수의 로직을 위와 같이 구성하여 CoLogin 코루틴 함수를 수행할 수 있도록 설정한다

코루틴 함수를 통해 메인 프레임에 구애받지 않고 비동기적으로 서버에 연결하고 로그인 인증 요청할 수 있다

 

 

CoLogin 함수는 위와 같이 구성하였다

우선, 로그인 버튼을 비활성화하고 접속 대기를 나타내는 UI를 활성화한다

이후 NetworkClient의 Connect 함수를 통해 접속을 시도한다

  • 서버와 연결되지 않은 경우 : 로그를 찍고 다음 프레임까지 코루틴을 중지
  • 서버와 연결된 경우 : 로그를 찍고 Net_AuthRequest 인스턴스를 NetworkClient의 SendServer 함수를 통해 전송

 

- 최종 실행 결과

 

728x90
반응형