게임 개발 로그

개발 노트 #7 본문

게임 개발/레스토랑 대소동

개발 노트 #7

03:00am 2024. 11. 19. 19:30

 

 

설거지 UI 성공 이펙트

 

0. 구현

0-1. 설거지 성공 이펙트 추가

  • 원이 울렁거리는 모양의 파티클 이펙트를 이용하여 성공 이펙트를 추가함.

 

 

 

0-2. UI 위치 변경에 따른 3D 애셋 대응

  • 기존 배치: 16:9 해상도로 변경하면 UI와 3D 애셋 출력 위치가 틀어짐.

  • UI Canvas 하위에 위치시키는 방법으로 수정함.

결과 화면: UI 위치와 동일한 위치를 갖는 Create Point를 갖게 됨

 

 

 

0-3. Json 데이터 관리 Manager/Director 추가

 

1. DataManager

  • static 함수를 사용하고 있어 런타임 시 계속 살아있다. 지정된 경로에 데이터를 저장/불러오기 하는 역할을 한다.
public class DataManager
{
	public static void SaveJsonData(string jsonData, string filepath)
	{
		FileStream fileStream = new FileStream(filepath, FileMode.Create);
		byte[] data = Encoding.UTF8.GetBytes(jsonData);
		fileStream.Write(data, 0, data.Length);
		Debug.Log(fileStream.ToString());
		fileStream.Close();
	}

	public static string LoadJsonData(string filepath)
	{
		FileStream fileStream = new FileStream(filepath, FileMode.Open);
		byte[] data = new byte[fileStream.Length];
		fileStream.Read(data, 0, data.Length);
		fileStream.Close();
		return Encoding.UTF8.GetString(data);
	}
}

 

 

2. UserGameDirector

  • 유저의 랭킹 데이터를 관리하는 역할을 한다.
  • 유저의 랭킹 데이터에 대한 클래스: UserData
	[Serializable]
	public class UserData
	{
		public List<cPlayer> rankData = new List<cPlayer>();
	}
  • GameScene에만 배치되어 있으며 이를 통해서 Save/Load를 더욱 편리하게 사용할 수 있도록 했다.
public class UserDataDirector : MonoBehaviour
{
	public UserData userData;

	public void Init()
	{
		FileInfo fi = new FileInfo(Application.dataPath + "/Resources/Json/UserData.json");
		userData = new UserData();
		if (fi.Exists)
		{
			//Load
			string loadJson = DataManager.LoadJsonData(Application.dataPath + "/Resources/Json/UserData.json");
			JsonUtility.FromJsonOverwrite(loadJson, userData);
		}
		else
		{
			//Save
			string tempJson = JsonUtility.ToJson(userData);
			DataManager.SaveJsonData(tempJson, Application.dataPath + "/Resources/Json/UserData.json");
		}
	}

	public void Save(cPlayer data)
	{
		FileInfo fi = new FileInfo(Application.dataPath + "/Resources/Json/UserData.json");
		userData.rankData.Add(data);

		userData.rankData.Sort(Compare);
		if (userData.rankData.Count > 5)
			userData.rankData.RemoveAt(0);

		string tempJson = JsonUtility.ToJson(userData);
		Debug.Log(tempJson);
		DataManager.SaveJsonData(tempJson, Application.dataPath + "/Resources/Json/UserData.json");
	}

	int Compare(cPlayer a, cPlayer b)
	{
		if (a.score < b.score)
		{
			return -1;
		}
		else if (a.score > b.score)
		{
			return 1;
		}
		else
		{
			return 0;
		}
	}
}

 

 

3. 사용

// 1. GameDirector에 dataDircter 추가하기   
public UserDataDirector dataDirector;


// 2. Reset()이나 Start()에서 dataDirector 가져오는 코드 작성
 GameObject[] directors = GameObject.FindGameObjectsWithTag("Director");
 foreach (GameObject director in directors)
 {
    UserDataDirector temp = director.GetComponent<UserDataDirector>();
    if (temp != null)
    {
       dataDirector = temp;
       break;
    }
 }

// 3. 저장할 때 코드
dataDirector.Save(new cPlayer(130, EPlayerType.A));

 

 

99. 참고 링크

Ripple VFX Unity Particle System || How to make a Ripple in unity Particle System VFX

[Unity3D] 게임 저장은 Json을 쓰기로...

'게임 개발 > 레스토랑 대소동' 카테고리의 다른 글

레스토랑 대소동: 개발 노트 #9  (0) 2024.11.24
레스토랑 대소동: 개발 노트 #8  (1) 2024.11.20
개발 노트 #6  (2) 2024.11.19
개발 노트 #5  (2) 2024.11.11
개발 노트 #4  (2) 2024.11.11