게임 개발 로그
개발 노트 #7 본문
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
'게임 개발 > 레스토랑 대소동' 카테고리의 다른 글
레스토랑 대소동: 개발 노트 #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 |