반응형
해당 내용은 유튜브로도 볼 수 있습니다.
이전 글들을 다 보고왔다면 이번글은 마지막 3단계이다.
추가적으로 설명이 필요한 어려운 부분은 없다고 생각되고,
기존에 했던 방식의 연속이므로
만약 이해가 안되는 부분이 있다면 유튜브 영상을 참고하면 충분히 이해할 수 있을 것이다.
아래는 최종적으로 완성된 3가지 스크립의 전문이다.
만약 놓친 부분이 있거나한다면 아래의 스크립트를 참고하여 학습하도록 하자.
이해를 돕기 위하여 주석도 자세하게 달았으니 도움이 되었으면 좋겠다.
Select 스크립트 전문
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System.IO;
public class Select : MonoBehaviour
{
public GameObject creat; // 플레이어 닉네임 입력UI
public Text[] slotText; // 슬롯버튼 아래에 존재하는 Text들
public Text newPlayerName; // 새로 입력된 플레이어의 닉네임
bool[] savefile = new bool[3]; // 세이브파일 존재유무 저장
void Start()
{
// 슬롯별로 저장된 데이터가 존재하는지 판단.
for (int i = 0; i < 3; i++)
{
if (File.Exists(DataManager.instance.path + $"{i}")) // 데이터가 있는 경우
{
savefile[i] = true; // 해당 슬롯 번호의 bool배열 true로 변환
DataManager.instance.nowSlot = i; // 선택한 슬롯 번호 저장
DataManager.instance.LoadData(); // 해당 슬롯 데이터 불러옴
slotText[i].text = DataManager.instance.nowPlayer.name; // 버튼에 닉네임 표시
}
else // 데이터가 없는 경우
{
slotText[i].text = "비어있음";
}
}
// 불러온 데이터를 초기화시킴.(버튼에 닉네임을 표현하기위함이었기 때문)
DataManager.instance.DataClear();
}
public void Slot(int number) // 슬롯의 기능 구현
{
DataManager.instance.nowSlot = number; // 슬롯의 번호를 슬롯번호로 입력함.
if (savefile[number]) // bool 배열에서 현재 슬롯번호가 true라면 = 데이터 존재한다는 뜻
{
DataManager.instance.LoadData(); // 데이터를 로드하고
GoGame(); // 게임씬으로 이동
}
else // bool 배열에서 현재 슬롯번호가 false라면 데이터가 없다는 뜻
{
Creat(); // 플레이어 닉네임 입력 UI 활성화
}
}
public void Creat() // 플레이어 닉네임 입력 UI를 활성화하는 메소드
{
creat.gameObject.SetActive(true);
}
public void GoGame() // 게임씬으로 이동
{
if (!savefile[DataManager.instance.nowSlot]) // 현재 슬롯번호의 데이터가 없다면
{
DataManager.instance.nowPlayer.name = newPlayerName.text; // 입력한 이름을 복사해옴
DataManager.instance.SaveData(); // 현재 정보를 저장함.
}
SceneManager.LoadScene(1); // 게임씬으로 이동
}
}
DataManager 스크립트 전문
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
public class PlayerData
{
// 이름, 레벨, 코인, 착용중인 무기
public string name;
public int level = 1;
public int coin = 100;
public int item = -1;
}
public class DataManager : MonoBehaviour
{
public static DataManager instance; // 싱글톤패턴
public PlayerData nowPlayer = new PlayerData(); // 플레이어 데이터 생성
public string path; // 경로
public int nowSlot; // 현재 슬롯번호
private void Awake()
{
#region 싱글톤
if (instance == null)
{
instance = this;
}
else if (instance != this)
{
Destroy(instance.gameObject);
}
DontDestroyOnLoad(this.gameObject);
#endregion
path = Application.persistentDataPath + "/save"; // 경로 지정
print(path);
}
public void SaveData()
{
string data = JsonUtility.ToJson(nowPlayer);
File.WriteAllText(path+ nowSlot.ToString(), data);
}
public void LoadData()
{
string data = File.ReadAllText(path + nowSlot.ToString());
nowPlayer = JsonUtility.FromJson<PlayerData>(data);
}
public void DataClear()
{
nowSlot = -1;
nowPlayer = new PlayerData();
}
}
Game 스크립트 전문
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Game : MonoBehaviour
{
public Text name;
public Text level;
public Text coin;
public GameObject[] item;
void Start()
{
name.text += DataManager.instance.nowPlayer.name;
level.text += DataManager.instance.nowPlayer.level.ToString();
coin.text += DataManager.instance.nowPlayer.coin.ToString();
ItemSetting(DataManager.instance.nowPlayer.item);
}
public void LevelUp()
{
DataManager.instance.nowPlayer.level++;
level.text = "레벨 : " + DataManager.instance.nowPlayer.level.ToString();
}
public void CoinUp()
{
DataManager.instance.nowPlayer.coin++;
coin.text = "코인 : " + DataManager.instance.nowPlayer.coin.ToString();
}
public void Save()
{
DataManager.instance.SaveData();
}
public void ItemSetting(int number)
{
for(int i = 0; i < item.Length; i++)
{
if(number == i)
{
item[i].SetActive(true);
DataManager.instance.nowPlayer.item = number;
}
else
{
item[i].SetActive(false);
}
}
}
}
반응형
'유니티 Unity > 유니티 기능 구현' 카테고리의 다른 글
[유니티] Json으로 저장 불러오기 구현하기 3 - Unity Save And Load (0) | 2022.03.09 |
---|---|
[유니티] Json으로 저장 불러오기 구현하기 3 - Unity Save And Load (0) | 2022.02.15 |
[유니티] Json으로 저장 불러오기 구현하기 2 - Unity Save And Load (0) | 2022.02.04 |
[유니티] Json으로 저장 불러오기 구현하기 1 - Unity Save And Load (1) | 2022.01.27 |
[유니티] 파일을 저장하거나 불러오는 방법 - System.IO.File (0) | 2022.01.25 |
댓글