해당 글은 유튜버 골드메탈님의 강의를 바탕으로 작성되었습니다.
이번 강의에서는 이전 시간에 만들었던 Plant Panel에 UI를 추가하여 업그레이드 기능을 구현해보았습니다.
먼저 영상을 따라하여 아래와 같이 Plant Panel을 구현해줍니다.
이제 실제 기능을 구현하기 위해 GameManager 스크립트에 다음의 코드를 추가해줍니다.
public Text num_sub_text;
public Text num_btn_text;
public Button num_btn;
public Text click_sub_text;
public Text click_btn_text;
public Button click_btn;
public void NumUpgrade()
{
if (gold < num_gold_list[num_level]) return;
gold -= num_gold_list[num_level++];
num_sub_text.text = "젤리 수용량 " + num_level * 2;
if (num_level >= 5) num_btn.gameObject.SetActive(false);
else num_btn_text.text = string.Format("{0:n0}", num_gold_list[num_level]);
}
public void ClickUpgrade()
{
if (gold < click_gold_list[click_level]) return;
gold -= click_gold_list[click_level++];
click_sub_text.text = "클릭 생산량 X " + click_level;
if (click_level >= 5) click_btn.gameObject.SetActive(false);
else click_btn_text.text = string.Format("{0:n0}", click_gold_list[click_level]);
}
두 함수는 각각의 버튼이 눌렸을 경우 호출될 것입니다.
이후 일부 함수의 내용을 변경해줍니다.
public void GetJelatin(int id, int level)
{
jelatin += (id + 1) * level * click_level;
if (jelatin > max_jelatin)
jelatin = max_jelatin;
}
public void BuyJelly()
{
if (gold < jelly_goldlist[page] || jelly_list.Count >= num_level * 2) return;
gold -= jelly_goldlist[page];
GameObject obj = Instantiate(prefab, new Vector3(0, 0, 0), Quaternion.identity);
Jelly jelly = obj.GetComponent<Jelly>();
obj.name = "Jelly " + page;
jelly.id = page;
jelly.sprite_renderer.sprite = jelly_spritelist[page];
jelly_list.Add(jelly);
}
이제 최대 젤리 수의 제한이 생겼으며 click_level에 따라 클릭으로 얻는 jelatin의 양 또한 달라질 것입니다.
유니티 프로그램으로 돌아가 변수에 오브젝트를 지정해주고 버튼 오브젝트의 OnClick 함수 또한 설정해줍니다.
마지막으로 업그레이드 현황을 저장하기 위해 DataManager 스크립트를 다음과 같이 수정해줍니다.
public class SaveData
{
public int jelatin;
public int gold;
public bool[] jelly_unlock_list = new bool[12];
public List<Data> jelly_list = new List<Data>();
public int num_level;
public int click_level;
}
...
public void JsonLoad()
{
SaveData save_data = new SaveData();
if (!File.Exists(path)) {
GameManager.instance.jelatin = 0;
GameManager.instance.gold = 0;
GameManager.instance.num_level = 1;
GameManager.instance.click_level = 1;
JsonSave();
}
else {
string load_json = File.ReadAllText(path);
save_data = JsonUtility.FromJson<SaveData>(load_json);
if(save_data != null) {
for (int i = 0; i < save_data.jelly_list.Count; ++i)
GameManager.instance.jelly_data_list.Add(save_data.jelly_list[i]);
for (int i = 0; i < save_data.jelly_unlock_list.Length; ++i)
GameManager.instance.jelly_unlock_list[i] = save_data.jelly_unlock_list[i];
GameManager.instance.jelatin = save_data.jelatin;
GameManager.instance.gold = save_data.gold;
GameManager.instance.num_level = save_data.num_level;
GameManager.instance.click_level = save_data.click_level;
}
}
}
public void JsonSave()
{
SaveData save_data = new SaveData();
for (int i = 0; i < GameManager.instance.jelly_list.Count; ++i) {
Jelly jelly = GameManager.instance.jelly_list[i];
save_data.jelly_list.Add(new Data(jelly.gameObject.transform.position, jelly.id, jelly.level, jelly.exp));
}
for(int i = 0; i < GameManager.instance.jelly_unlock_list.Length; ++i)
save_data.jelly_unlock_list[i] = GameManager.instance.jelly_unlock_list[i];
save_data.jelatin = GameManager.instance.jelatin;
save_data.gold = GameManager.instance.gold;
save_data.num_level = GameManager.instance.num_level;
save_data.click_level = GameManager.instance.click_level;
string json = JsonUtility.ToJson(save_data, true);
File.WriteAllText(path, json);
}
이후 GameManager 스크립트로 돌아와 LoadData() 함수에 다음의 코드를 추가합니다.
void LoadData()
{
...
num_sub_text.text = "젤리 수용량 " + num_level * 2;
if (num_level >= 5) num_btn.gameObject.SetActive(false);
else num_btn_text.text = string.Format("{0:n0}", num_gold_list[num_level]);
click_sub_text.text = "클릭 생산량 X " + click_level;
if (click_level >= 5) click_btn.gameObject.SetActive(false);
else click_btn_text.text = string.Format("{0:n0}", click_gold_list[click_level]);
...
}
게임을 실행하여 모든 기능이 잘 동작하는지 확인합니다.
'📌 etc > Unity 2D Raising Jelly Game' 카테고리의 다른 글
[Unity / C#] 2D 젤리 키우기 게임 - 9. 사운드와 옵션 시스템 (1) | 2022.03.28 |
---|---|
[Unity / C#] 2D 젤리 키우기 게임 - 7. 구매 시스템 만들기 (3) | 2022.03.27 |
[Unity / C#] 2D 젤리 키우기 게임 - 6. 해금 시스템 만들기 (0) | 2022.03.26 |
[Unity / C#] 2D 젤리 키우기 게임 - 5. UI 창 구축하기 (0) | 2022.03.23 |
[Unity / C#] 2D 젤리 키우기 게임 - 4. 젤리 판매 기능 구현 (0) | 2022.03.22 |