본문 바로가기
유니티

유니티 구글 플레이 게임 서비스 연동2( 구현하기 )

by 노튜 2020. 4. 25.
728x90

 

유니티 프로젝트에서 구현하는 방법을 제시합니다.  

 

1. 구글 플레이 게임 서비스 연동하기 

 

플레이 게임 서비스 등록 및 유니티와 연결하기는 아래의 링크를 참고해주세요.

 

https://notyu.tistory.com/14

 

유니티 구글 플레이 게임 서비스 연동1( 연결하기)

유니티에 구글 플레이 게임을 연결하는 과정입니다. 사용법은 링크 추가예정 구글 플레이 게임 서비스 연동에 필요한 요소 구글 플레이 콘솔 개발자 계정 유니티 게임 프로젝트 구글 플레이 스토어에 등록 가능한..

notyu.tistory.com

 

2. 유니티 구글 플레이 게임 서비스 구현 

 

유니티 프로젝트에 구현합니다. 

1의 연결 과정이 완료된 후에 구현합니다.

 

2.1 GPGSIds.cs 파일 

 

GPGSIds 파일은 구글 플레이 서비스의 각 항목, 리더보드, 이벤트 등에 연결하기 위한 값 입니다.

GPGSIds 파일은 직접적으로 수정하지 않습니다.

구글 플레이 서비스의 리소스를 복사해서 다음의 위치에 붙여넣으면, 구글 플레이 서비스 플러그인이

자동으로 변경해 줍니다.  

Window →Google Play Games Setup Android Setup → Resource Definition

 

2.2 Google Play Games Service Manager 

구글 플레이 서비스를 관리하는 매니저 클래스를 만듭니다. 

이름은 본인의 프로젝트에 맞도록 합니다.

여기에서는 Service Manager로 합니다.

 

Service Manager Class를 생성합니다.

Scene에 Service Manager Object를 생성하여, 추가(등록)해 줍니다.

 

 

Service Manager Class는 유니티의 Monobehaviour를 상속받는 클래스입니다.

 

Service Manager에 대한 정적 변수를 선언합니다. 

정적변수를 사용하여 ServiceManager에 접근하고 로그인 등의 처리를 합니다. 

 

정적변수는 생성은 Awake 함수에서 합니다. 

Awake()함수는 Start()와 같은 Monobehaviour class의 함수입니다. 

 

public static ServiceManager Instance;

void Awake()
{
	Instance = this;
}

 

구글 플레이 서비스 활성화 및 로그인 함수를 사용해, 로그인을 하도록 합니다.

InitializeGooglePlayGamesService() 함수 및 SignIn() 함수를 생성합니다.

 

로그인은 Start() 함수에서 합니다.

 

유니티 프로젝트를 구성할때, Scene간의 이동을 하는 경우가 많습니다.

구글 플레이 서비스에 이미 접속된 상태라면, 다시 초기화 및 활성화를 할 필요가 없습니다.  

접속 유무를 Social.localUser.authenticated로 확인하고 처리를 하도록 합니다. 

 

void Start()
{
	if(!Social.localUser.aunthenticated)
    {
    	InitializeGooglePlayGamesService();
        SignIn();
    }
}

 

InitializeGooglePlayGamesService() 함수를 생성합니다. 

 

PlayGamesClientConfiguration class를 사용해 환경설정을 하고, 

PlayGamesPlatform class를 이용해 초기화합니다.  

초기화한 구글 플레이 게임 서비스를 활성화합니다.

 

void InitializeGooglePlayGamesService()
{
	PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder()
    .Build();
    
    PlayGamesPlatform.InitializeInstance(config);
    PlayGamesPlatform.DebugLogEnabled = true;
    
    PlayGamesPlatform.Activate();    
}

 

SignIn() 함수를 생성합니다. 

Social Class를 이용해 사용자를 활성화 합니다.

 

void SignIn()
{
	Social.local.Authenticate((bool success) =>
    {
    	if(success)
        {
        	Debug.Log("SignIn Success");
        }
    });
}

 

다음은 로그아웃 입니다.

SignOut() 함수를 생성하고 이를 처리합니다. 

 

void SignOut()
{
	PlayGamesPlatform.Instance.SignOut();
}

 

다음은 리더보드에 스코어를 등록합니다.

 

여기서는 하나의 스코어를 등록하는 방법만 다룹니다.

여러개의 리더보드를 생성할때, 각각의 리더보드에 1:1로 대응하는 함수를 생성하거나,

ID값을 사용해 if~else의 조건절을 사용하여 로직을 구현하는것은 언급하지 않습니다. 

 

ReportScore() 함수를 생성합니다.

Social class를 이용합니다.

GPGSIds class의 리더보드 ID값을 이용해 스코어를 등록합니다.

리더보드에 스코어를 등록하는 값은 long형입니다. 

 

public void ReportScore(long _score)
{
	Social.ReportScore(_score, GPGSIds.leaderboard_score, (bool success) =>
    {
    	if(success)
        {
        	Debug.Log("Success");
        }
        else
        {
        	Debug.Log("Fail");
        }
    });
}

  

ServiceManager Instance를 이용해, 스코어 리더보드를 호출해 주면 됩니다. 

ServiceManager.Instance.ReportScore(value);

 

다음은 업적을 등록하는 함수입니다.

로그인 업적의 예입니다.

100.0은 달성도 입니다. 100이 되어야 달성이 완료 됩니다. 

public void RecordAchevement()
{
	Social.ReportProgress(GPGSIds.achievement_login, 100.0, (bool success) =>
    {
    	if(success){Debug.Log("Login Achievement success");}
    }
    );
}

 

다음은 현재까지 달성한 업적을 보여주는 함수입니다.

아래와 같은 함수를 작성하고, UI Button에 연결하여, 사용자에게 제공합니다.

 

Social Class를 이용합니다. 

 

public void ShowAchievementUI()
{
	Social.ShowAchievementUI();
}

 다음은 리더보드를 보여주는 함수입니다.

 

public void ShowLeaderBoardUI()
{
	Social.ShowLeaderboardUI();
}

 

리더보드 보여주기의 예 입니다.

구글 플레이 게임 서비스에 명시한 순서대로 정렬되어 나타납니다.

 

리더보드 

 

 

 

 

 

 

 

 

 

 

728x90