어제 이어 실시
어제 로그인해서 이미지 아이디 유저 네임을 띄우는 곳 까지함
정상적으로 adb 에서 섹세스 로그와 어플에서 잘 뜨는지 확인한다.
-----
구글 플레이 콘솔 - 업적
우리가 전에 만든 최초 업적이 있다.
이 리소스가 유니티 GPGSIds 스크립터로 들어온다.
스크립터를 보면 업적 마다의 키가 존재한다.
우리가 만든건 게임의 시작 (최초 업적이다. 그냥 게임에 들어오면 업적 성공으로 해준다.)
https://github.com/playgameservices/play-games-plugin-for-unity
업적을 성공하는 메서드이다.
"id"에는 GPGSIds 스크립터에 있는 특정 업적의 ID를 넣어준다.
-----
이제하는 것
최초로 접속하면 id가 받아오고, 그 아이디를 DB에 저장하고 - 업적 주고
먼저 id가 잘 들어오면 씬을 넘길 것이다.
먼저 버튼으로 테스트 할 것이다 .
즉 id가 잘 넘어오고, 시작 누르면 씬이 넘어가게하기
app스크립터에서
enum 타입을 뚫어서 TEST 일 때만 버튼이 보이게한다.
BUILD 일때는 안보이게한다.
그리고 버튼을 누르게 되면 GameScenes이 로디 되게한다. 비동기 (데이터를 가져와야하면 비동기 추천)
지금은 로드가 되면서 gamaMain 스크립터를 가져와서 초기화에 "홍길동" 값을 넣어준다.
나중에는 저 홍길동이 특정 유저의 네임이 될 수 도있다 .
이런식으로 데이터를 가져오야하면 비동기로 쓰는게 좋다.
유니티에서 빈 오보젝트를 만들어주고. version 텍스트를 넣어준다.
저 오브젝트는 임모탈이 될 것이다. 즉, 계속 켜져있는 오브젝트가 될 것.
임모탈 스크립터를 만들어주고, 오브젝트에 넣어준다.
임모탈 스크립터에 돈디스트로를 달아준다. (씬이 전환되도 사라지지 않음)
새씬을 만들어서
빈오브젝트를 만들어서 GameMain 으로 바꾸주고, 스크립터도 만들어서 넣어준다.
한 씬에는 무조건 메인이 되는 스크립터가 있어야한다.
아까 받아오는 것을 확인할 수있고,
// increment achievement (achievement ID "Cfjewijawiu_QA") by 5 steps
PlayGamesPlatform.Instance.IncrementAchievement(
GPGSIds.achievement , 1, (bool success) => {
// handle success or failure
});
이 코드는 업적을 완성하는 코드이다.
스텝은 단계 인데 1이면 바로 업적이 달성이 된다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GooglePlayGames;
using UnityEngine.SocialPlatforms;
using UnityEngine.UI;
public class GameMain : MonoBehaviour
{
public Text txtUserName;
public Button btnAchievement;
//초기화 할때
public void Init(string userName) {
Debug.Log("userName: " + userName);
this.txtUserName.text = userName;
this.btnAchievement.onClick.AddListener(() =>
{
PlayGamesPlatform.Instance.ShowAchievementsUI();
});
//스텝 1은 바로 되게한다.
PlayGamesPlatform.Instance.IncrementAchievement(
GPGSIds.achievement , 1, (bool success) => {
// handle success or failure
Debug.LogFormat("IncrementAchievement : {0}, {1}", GPGSIds.achievement, success);
});
}
}
btnAchievement 버튼을 달아주고, 누르면 ShowAchievementsUI() ; 가 보이게한다.
즉, 게임이 시작되면 업적이 달성되고, 유저의 네임이 게임에서 보여지고, 버튼을 누르면 업적 UI를 볼 수있다.
빌드 테스트
앱 빌드로 바꾸고,
앱이 제일 상단에 있는 지 확인하기
빌드 실시 ---->
업적 UI를 보면 잠겨 있음
IncrementAchievement 는 스텝으로 업적달성이라서 잠겨잇음
IncrementAchievement -> ReportProgess로 바꾸주고,
이건 퍼센트로 업적을 달성하는것, 100.0 넣으면 바로 달성이 될 것이다.
정상적으로 업적이 달성된게 보인다.
업적 한 것을 지우고 다시 할려면
녹스 - 구글 게임 으로 들어간다.
내가 한 게임을 삭제한다.
다시 게임을 키면
무한 로딩이 된다.
녹스에서
계정 ->
구글 클릭
계정 삭제하고
다시 로그인해야한다.
그러면 다시 제대로 작동한다.
----
APP
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using GooglePlayGames;
using GooglePlayGames.BasicApi;
using UnityEngine.SocialPlatforms;
using UnityEngine.SceneManagement;
public class App : MonoBehaviour
{
public enum ePlayMode {
TEST, BUILD
}
public Text test;
public Text txtid;
public Text txtUserName;
public Text txtState;
public Image thumb;
public Button btnStart;
public ePlayMode playMode;
// Start is called before the first frame update
void Start()
{
this.test.text = Application.version;
if (this.playMode == ePlayMode.TEST)
{
this.btnStart.gameObject.SetActive(true);
}
else {
this.btnStart.gameObject.SetActive(false);
}
this.btnStart.onClick.AddListener(() =>
{
//씬전환
//SceneManager.LoadScene("GameScenes");
SceneManager.LoadSceneAsync("GameScenes").completed += (oper) =>
{
var gameMain = GameObject.FindObjectOfType<GameMain>();
gameMain.Init(Social.localUser.userName);
};
});
Debug.Log("-----------------> lnit GPGS");
PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder()
.EnableSavedGames()
.Build();
PlayGamesPlatform.InitializeInstance(config);
PlayGamesPlatform.DebugLogEnabled = true;
PlayGamesPlatform.Activate();
Debug.Log("----------------->Authenticate");
// authenticate user:
PlayGamesPlatform.Instance.Authenticate(SignInInteractivity.CanPromptAlways, (result) => {
// handle results
Debug.Log("----------------->" + result);
Debug.Log("----------------->" + Social.localUser);
Debug.Log("----------------->" + Social.localUser.authenticated);
if (Social.localUser.authenticated) {
this.txtid.text = Social.localUser.id;
this.txtUserName.text = Social.localUser.userName;
this.txtState.text = Social.localUser.state.ToString();
Debug.Log("----------------->" + Social.localUser.image);
StartCoroutine(this.WaitForLoadThumb(() => {
Debug.Log(Social.localUser.image);
Debug.LogFormat("{0}, {1}", Social.localUser.image.width, Social.localUser.image.height);
this.thumb.sprite = Sprite.Create(Social.localUser.image,
new Rect(0, 0, Social.localUser.image.width, Social.localUser.image.height),
Vector2.zero);
this.thumb.SetNativeSize();
}));
this.btnStart.gameObject.SetActive(true);
}
});
}
private IEnumerator WaitForLoadThumb(System.Action callback) {
while (true) {
if (Social.localUser.image != null) {
break;
}
yield return null;
}
callback();
}
}
immortal
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class immortal : MonoBehaviour
{
private void Awake()
{
DontDestroyOnLoad(this.gameObject);
}
}
GameMain
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GooglePlayGames;
using UnityEngine.SocialPlatforms;
using UnityEngine.UI;
public class GameMain : MonoBehaviour
{
public Text txtUserName;
public Button btnAchievement;
//초기화 할때
public void Init(string userName) {
Debug.Log("userName: " + userName);
this.txtUserName.text = userName;
this.btnAchievement.onClick.AddListener(() =>
{
PlayGamesPlatform.Instance.ShowAchievementsUI();
});
//스텝 1은 바로 되게한다.
PlayGamesPlatform.Instance.ReportProgress(
GPGSIds.achievement , 100.0, (bool success) => {
// handle success or failure
Debug.LogFormat("IncrementAchievement : {0}, {1}", GPGSIds.achievement, success);
});
}
}
-----
이제 업적을 하나 추가 해볼 것이다.
업적 만들기
이름 설명 아이콘을 넣어준다.
단계별로 2스텝으로한다
10마리 = 1
10마리 = 2 이런식으로 스텝이 증가한다.
저장하기
업적 추가 되었음.. 이거 복사해서
셋업을 해준다.
게임씬으로 와준다.
이제 버튼을 누르면 잡는 걸로하고
현재 잡은 갯수
스텝
을 표기해준다.
빈오브젝트를 만들고, doing 이다. 이건 하는 중이면 나오는 UI
늑대 공격을 누르면 킬 카운터를 늘리고,
10마리를 다 잡으면 스텝이 증가한다.
늑대를 다 끝내면 done 오브젝트가 보이게한다.
using GooglePlayGames;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class GameMain : MonoBehaviour
{
public Text txtUserName;
public Button btnAchievement;
public Button btnAttack;
public GameObject achievementDoing;
public GameObject achievementDone;
public Text txtStep;
public Text txtCount;
private int goalCount = 10;
private int totalSteps = 2;
private int currentCount = 0;
private int currentStep = 1;
//초기화
public void Init(string userName)
{
Debug.Log("userName: " + userName);
string stepKey = string.Format("{0}_step", GPGSIds.achievement__10_);
//CgkIoJubiaIZEAIQAw_step
string currentCountKey = string.Format("{0}_currentCount", GPGSIds.achievement__10_);
//CgkIoJubiaIZEAIQAw_currentCount
if (PlayerPrefs.GetInt(stepKey) == 0)
{
//처음 이 업적을 실행
PlayerPrefs.SetInt(stepKey, currentStep);
}
else
{
this.currentStep = PlayerPrefs.GetInt(stepKey);
}
if (PlayerPrefs.GetInt(currentCountKey) == 0)
{
//현재 스텝에서 이 업적 처음 실행하는것
}
else
{
this.currentCount = PlayerPrefs.GetInt(currentCountKey);
}
//UI업데이트
this.txtCount.text = string.Format("kill count: {0}/{1}", this.currentCount, this.goalCount);
this.txtStep.text = string.Format("step: {0}/{1}", this.currentStep, this.totalSteps);
this.btnAttack.onClick.AddListener(() => {
this.currentCount++;
//저장
PlayerPrefs.SetInt(currentCountKey, currentCount);
//UI업데이트
this.txtCount.text = string.Format("kill count: {0}/{1}", this.currentCount, this.goalCount);
if (this.currentCount >= this.goalCount)
{
if (this.currentStep >= this.totalSteps)
{
PlayGamesPlatform.Instance.ReportProgress(GPGSIds.achievement__10_, 100, (success) => {
if (success)
{
//achievement_doing 게임오브젝트를 비활성화
this.achievementDoing.SetActive(false);
//achievement_done 게임오브젝트를 활성화
this.achievementDone.SetActive(true);
}
});
}
else
{
PlayGamesPlatform.Instance.ReportProgress(GPGSIds.achievement__10_, 100, (success) => {
if (success)
{
//스텝을 올려준다
this.currentStep++;
//저장
PlayerPrefs.SetInt(stepKey, this.currentCount);
//UI업데이트
this.txtStep.text = string.Format("step: {0}/{1}", this.currentStep, this.totalSteps);
PlayGamesPlatform.Instance.IncrementAchievement(GPGSIds.achievement__10_, this.currentStep, (success) => {
Debug.LogFormat("{0} {1} {2}", GPGSIds.achievement__10_, this.currentStep, success);
});
//초기화
this.currentCount = 0;
//저장
PlayerPrefs.SetInt(currentCountKey, this.currentCount);
//UI업데이트
this.txtCount.text = string.Format("kill count: {0}/{1}", this.currentCount, this.goalCount);
}
});
}
}
});
this.txtUserName.text = userName;
this.btnAchievement.onClick.AddListener(() => {
PlayGamesPlatform.Instance.ShowAchievementsUI();
});
PlayGamesPlatform.Instance.IncrementAchievement(GPGSIds.achievement, 1, (bool success) => {
// handle success or failure
Debug.LogFormat("IncrementAchievement: {0}, {1}", GPGSIds.achievement, success);
});
}
}
코드 적용시 빌드하면 정상적으로 늑대가 잡힌다.
'Unity > 서버' 카테고리의 다른 글
0625_서버 (네이버 로그인 + 유니웹뷰) (0) | 2021.06.25 |
---|---|
0624_서버 (GPGS_리더보드 연결 / 네이버 로그인) (0) | 2021.06.24 |
0622_ 서버 (GPGS3) (0) | 2021.06.22 |
0618_서버 (GPGS 앱 올리기 2) (0) | 2021.06.18 |
0617_ 서버 (GPGS 구글플레이에 앱 올리기 ) (0) | 2021.06.17 |