개발일지/TIL
[Unity Devcamp] 0201 개발일지
JangKroed
2023. 3. 21. 20:27
728x90
반응형

Grid save / load 진행상황
// Grid.cs / Start
void Start()
{
if (SaveGame.DataExists("Grid1"))
{
_lineIndicator = GetComponent<LineIndicator>();
int square_index = 0;
for (int i = 1; i <= 81; i++)
{
var grid = Instantiate(gridSquare);
grid.name = "Grid" + i;
var loadGrid = SaveGame.Load(grid);
_gridSquares.Add(loadGrid as GameObject);
_gridSquares[_gridSquares.Count - 1].GetComponent<GridSquare>().SquareIndex = square_index;
_gridSquares[_gridSquares.Count - 1].transform.SetParent(this.transform);
_gridSquares[_gridSquares.Count - 1].transform.localScale = new Vector3(squareScale, squareScale, squareScale);
_gridSquares[_gridSquares.Count - 1].GetComponent<GridSquare>().SetImage(_lineIndicator.GetGridSquareIndex(square_index) % 2 == 0);
square_index++;
if (loadGrid.transform.GetChild(2).gameObject.activeSelf)
{
_gridSquares[_gridSquares.Count - 1].GetComponent<BoxCollider2D>().enabled = false;
}
}
Debug.Log("데이터로드");
currentActiveSquareColor_ = squareTextureData.activeSquareTextures[0].squareColor;
SetGridSquaresPosition();
return;
}
Debug.Log("데이터 없음");
_lineIndicator = GetComponent<LineIndicator>();
CreateGrid();
currentActiveSquareColor_ = squareTextureData.activeSquareTextures[0].squareColor;
}
// CreateGrid
public void CreateGrid()
{
_gridSquares.Clear();
foreach (Transform child in transform)
{
Destroy(child.gameObject);
}
SpawnGridSquares();
SetGridSquaresPosition();
Shape.SaveGrid();
}
- 게임중 Grid 리셋
- 게임 종료 후 Grid 리셋
SaveGame.cs / Grid Sprite Save / Load
// Save
// 활성화된 게임 오브젝트를 저장
public static void Save(GameObject obj)
{
// 파일 이름
string fileName = obj.name;
// 경로
string path = Application.dataPath + "/Saves/" + fileName + ".json";
// 객체 생성
SaveObject saveObject = new SaveObject();
// 게임 오브젝트 정보 저장
saveObject.position = obj.transform.position;
saveObject.rotation = obj.transform.rotation;
saveObject.scale = obj.transform.localScale;
saveObject.isActive = obj.activeSelf;
saveObject.name = obj.name;
// 자식 오브젝트 정보 저장
saveObject.childObj.isActive = obj.transform.GetChild(2).gameObject.activeSelf;
saveObject.childObj.ActiveImage = obj.transform.GetChild(2).GetComponent<Image>().sprite;
saveObject.childObj.test = obj.transform.GetChild(2).GetComponent<Image>().sprite.name;
// json 형태로 변환
string jsonData = JsonUtility.ToJson(saveObject);
// 파일 스트림 생성
FileStream fs = new FileStream(path, FileMode.Create);
// 스트림에 json 데이터 쓰기
StreamWriter sw = new StreamWriter(fs);
sw.Write(jsonData);
sw.Close();
fs.Close();
}
// Load
// 게임 오브젝트 불러오기
public static GameObject Load(GameObject obj)
{
// 파일 이름
string fileName = obj.name;
// 경로
string path = Application.dataPath + "/Saves/" + fileName + ".json";
// 파일 스트림 생성
FileStream fs = new FileStream(path, FileMode.Open);
// 스트림에서 json 데이터 읽어오기
StreamReader sr = new StreamReader(fs);
string jsonData = sr.ReadToEnd();
sr.Close();
fs.Close();
// json 데이터를 객체로 변환
SaveObject saveObject = JsonUtility.FromJson<SaveObject>(jsonData);
// 게임 오브젝트 정보 불러오기
obj.transform.SetPositionAndRotation(saveObject.position, saveObject.rotation);
obj.transform.localScale = saveObject.scale;
obj.SetActive(saveObject.isActive);
obj.name = saveObject.name;
// 자식 오브젝트 정보 불러오기
var childObj = obj.transform.GetChild(2);
childObj.gameObject.SetActive(saveObject.childObj.isActive);
childObj.GetComponent<Image>().sprite = saveObject.childObj.ActiveImage;
return obj;
}
728x90
반응형