유저 인포
- 아이디와 스코어
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class UserInfo
{
public int id;
public int score;
public UserInfo(int id, int score)
{
this.id = id;
this.score = score;
}
}
게임인포
- 유저가 1명일때 /배열 List 사용하지 않음
- 아이디 1 / 점수 0으로 신규 유저인포 입력
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameInfo
{
//유저 인포가 1개
public UserInfo userInfo;
/// <summary>
/// 신규유저일경우만 호출
/// </summary>
public void Init()
{
userInfo = new UserInfo(1,0);
}
}
- 유저아이디가 여럿일때
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameInfo
{
public List<UserInfo> userInfos;
/// <summary>
/// 신규유저일경우만 호출
/// </summary>
public void Init()
{
this.userInfos = new List<UserInfo>();
}
}
인포매니져
- 싱글톤
- 유저인포 제이슨 파일로 저장하기
- 씬 전환시 데이터 기억하기
using Newtonsoft.Json;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using Unity.VisualScripting;
using UnityEngine;
public class InfoManager : MonoBehaviour
{
public static InfoManager Instance; //싱글톤
private void Awake()
{
if (Instance == null)
{
Instance = this;
}
else
{
//게임매니저는 씬에 1개만
Destroy(gameObject);
}
DontDestroyOnLoad(this.gameObject); //씬전환시 데이터 기억하기
}
public GameInfo GameInfo
{
get; set;
}
private InfoManager() { }
public void SaveLocal()
{
// Debug.Log("<color=yellow>SaveLocal</color>");
var json = JsonConvert.SerializeObject(this.GameInfo);
string path = Path.Combine(Application.persistentDataPath, "game_info.json");
Debug.Log(path);
File.WriteAllText(path, json);
// Debug.Log("save complete!");
}
}
UI매니저
- 게임종료시 플레이어의 스코어를 유저인포에 있는 스코어와 비교하여
- 베스트스코어 메인화면에 저장하기
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class UIManager : MonoBehaviour
{
public Text scoreText;
public Text Coinscore;
PlayerController player;
public Slider slider;
public UIGameover UIGameover;
// private int currentScore;
//private int id;
void Start()
{
player = FindAnyObjectByType<PlayerController>();
}
void Update()
{
scoreText.text = string.Format("{0:n0}", player.score);
Coinscore.text = string.Format("{0:n0}", player.Coinscore);
if (slider.value <=0 || player.isgameover == true)
{
GameManager.instance.OnPlayerDead();
Invoke("UIPopup", 3f);
SaveBestScore();
}
}
void UIPopup()
{
UIGameover.Open();
}
void SaveBestScore()
{
// 베스트 스코어를 인포에 저장한다.
// 유저인포를 아이디로 찾아서 스코어에 반영한다.
UserInfo info = InfoManager.Instance.GameInfo.userInfo;
if (info.score < player.score)
{
//플레이어의 점수가 더 높으면 인포의 점수를 갱신한다.
info.score= player.score;
InfoManager.Instance.SaveLocal();
Debug.Log("점수 갱신");
}
}
}
유저인포 불러오기
UIHome
- 유저인포를 UI에 반영하기
using Newtonsoft.Json;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.SocialPlatforms.Impl;
using UnityEngine.UI;
public class UIHome : MonoBehaviour
{
public Button btn;
public UIMap uimap;
public Text bestscore;
public void Init()
{
// 유저인포를 아이디로 찾아서 스코어에 반영한다.
UserInfo info = InfoManager.Instance.GameInfo.userInfo;
bestscore.text = string.Format("{0:n0}", info.score);
}
}
메인
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.UI;
using Newtonsoft.Json;
using Unity.VisualScripting;
public class Main : MonoBehaviour
{
public UIHome uiHome;
public UIMap uiMap;
void Start()
{
Init();
//UIHome에 있는 버튼을 누르면
this.uiHome.btn.onClick.AddListener(() => {
//팝업을 보여준다
this.uiMap.Open();
});
}
private void Init()
{
GameInfo gameInfo = null;
string path = Path.Combine(Application.persistentDataPath, "game_info.json");
if (File.Exists(path))
{
Debug.Log("<color=yellow>기존유저</color>");
string json = File.ReadAllText(path);
gameInfo = JsonConvert.DeserializeObject<GameInfo>(json);
InfoManager.Instance.GameInfo = gameInfo;
}
else
{
Debug.Log("<color=yellow>신규유저</color>");
gameInfo = new GameInfo();
gameInfo.Init();
InfoManager.Instance.GameInfo = gameInfo;
InfoManager.Instance.SaveLocal();
Debug.Log("<color=yellow> 신규 데이터 생성 </color>");
}
uiHome.Init();
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class UIpopupbase : MonoBehaviour
{
public virtual void Init()
{
}
public virtual void Open()
{
this.gameObject.SetActive(true);
}
public virtual void Close()
{
this.gameObject.SetActive(false);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class UIMap : UIpopupbase //자식클래스
{
public Button stage1;
public Button stage2;
public UIHome uiHome;
void Start()
{
stage1.onClick.AddListener(() =>
{
SceneManager.LoadScene(2); //게임씬
});
stage2.onClick.AddListener(() =>
{
// Debug.Log("스테이지 2로 이동");
SceneManager.LoadScene(3);
});
}
void Update()
{
}
}
'게임프로젝트 > 쿠키런 모작' 카테고리의 다른 글
Firebase 데이터 서버에 저장하기 / 랭킹 만들기 (0) | 2024.05.02 |
---|---|
풀매니저 대신 타일맵 제너레이터 (0) | 2024.04.08 |
R&D 타일맵 랜덤 무한 생성(5) 오브젝트 풀링 오류 수정 끝! (0) | 2024.03.30 |
R&D 타일맵 랜덤 무한 생성(4) 오브젝트 풀링 수정중 (0) | 2024.03.30 |
R&D 타일맵 랜덤 무한 생성(3) 오브젝트 풀링 수정중 (1) | 2024.03.30 |