슬롯 선택 및 삭제
Coddy Unity 여정의 Unity 게임 아키텍처 섹션에 포함된 레슨. 64개 중 34번째.
이 장에서는 저장 데이터를 JSON으로 기록했습니다. 즉, [System.Serializable] 저장 클래스, Application.persistentDataPath에 저장하는 파일, 그리고 이전 저장 데이터에 없는 항목을 채우는 필드 초기화자를 다뤘습니다. 이제 슬롯 메뉴에 마지막 두 개의 컨트롤을 추가합니다.
챌린지
중급플레이어가 슬롯을 선택하고 삭제할 수 있게 하세요.
Update()에서 아래쪽 화살표를 누르면selected에 1을 더하고, 위쪽 화살표를 누르면 1을 뺍니다.Mathf.Min과Mathf.Max를 사용해 값을 0부터 2까지로 유지합니다. 그런 다음Show()를 호출합니다.DeleteSelected()는File.Delete로 선택한 슬롯의 파일을 삭제하고, 슬롯을null로 설정한 다음Show()를 호출합니다.
‘플레이’를 누르고 슬롯 3을 채운 다음 삭제를 클릭하세요. 슬롯이 비어 있는 것으로 표시됩니다. 그런 다음 ‘확인’을 누르세요.
직접 해보기
using System.IO;
using UnityEngine;
using UnityEngine.InputSystem;
using TMPro;
public class SlotMenu : MonoBehaviour
{
public TMP_Text[] slotTexts;
private SlotSave[] slots = new SlotSave[3];
private int selected;
void Start()
{
for (int i = 0; i < slots.Length; i++)
{
if (File.Exists(PathFor(i)))
{
slots[i] = JsonUtility.FromJson<SlotSave>(File.ReadAllText(PathFor(i)));
}
}
Show();
}
void Update()
{
// 화살표로 슬롯을 선택합니다
if (Keyboard.current.spaceKey.wasPressedThisFrame)
{
if (slots[selected] == null)
{
slots[selected] = new SlotSave();
}
else
{
slots[selected].day++;
slots[selected].gold += 15;
}
File.WriteAllText(PathFor(selected), JsonUtility.ToJson(slots[selected]));
Show();
}
}
// Delete 버튼을 누르면 이 함수가 호출됩니다
public void DeleteSelected()
{
}
string PathFor(int index)
{
return Path.Combine(Application.persistentDataPath, "slot" + (index + 1) + ".json");
}
void Show()
{
for (int i = 0; i < slots.Length; i++)
{
string line = "Slot " + (i + 1) + ": ";
if (slots[i] == null)
{
line += "empty";
}
else
{
line += "Day " + slots[i].day + ", " + slots[i].gold + " gold";
}
if (i == selected)
{
line = "> " + line;
}
slotTexts[i].text = line;
}
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
Unity 게임 아키텍처의 모든 레슨
직접 연습해 보세요: Unity 플레이그라운드