using Newtonsoft.Json;
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.UI;
public class SkillManager : MonoBehaviour
{
public static SkillManager instance; //싱글톤
public Button levelUpBtn;
public Button closeBtn;
public GameObject selectSkillPopUp;
public SkillData[] skillDatas;
private void Awake() //싱글톤
{
if(instance == null)
{
instance = this;
DontDestroyOnLoad(gameObject);
}else if(instance != null)
{
Destroy(this.gameObject);
}
}
//public static SkillManager Instance
//{
// get
// {
// if (null == instance)
// {
// return null;
// }
// return instance;
// }
//}
public void Start()
{
OnClickLevelUpBtn();
OnClickCloseBtn();
TextAsset asset = Resources.Load<TextAsset>("data/skills_data");
string json = asset.text;
Debug.Log(json);
skillDatas = JsonConvert.DeserializeObject<SkillData[]>(json);
foreach (SkillData data in skillDatas)
{
Debug.Log(data.id);
//문자열 => 객체 (역직렬화) 각 객체를 돌며 id를 잘 찾는지 확인
}
}
public SkillData GetDataById(int id)
{
SkillData foundSkillData = null;
for(int i = 0; i < skillDatas.Length; i++)
{
SkillData skillData = this.skillDatas[i];
if(skillData.id == id)
{
foundSkillData = skillData;
break;
}
}
return foundSkillData;
}
public void OnClickLevelUpBtn()
{
levelUpBtn.onClick.AddListener(() =>
{
selectSkillPopUp.SetActive(true);
});
}
public void OnClickCloseBtn()
{
closeBtn.onClick.AddListener(() =>
{
selectSkillPopUp.SetActive(false);
});
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SkillData
{
public int id;
public string name;
public string sprite_name;
public string desc;
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
public class SelectSkillPopUp : MonoBehaviour
{
public TMP_Text skillId;
void Start()
{
skillId.text = SkillManager.instance.GetDataById(103).id.ToString();
}
}
그것을 하기 전에 제일 기초이자 중요한 GameObject.onClick.AddListener()를 다루려 한다.
Button1을 클릭하면 콘솔에 찍힌다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Main : MonoBehaviour
{
[SerializeField] private Button btn;
void Start()
{
btn.onClick.AddListener(() =>
{
Debug.Log("button clicked!");
});
}
};
Button1을 클릭하면 2, 3번이 사라진다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Main : MonoBehaviour
{
[SerializeField] private Button btn1;
[SerializeField] private Button btn2;
[SerializeField] private Button btn3;
void Start()
{
btn1.onClick.AddListener(() => {
this.btn2.gameObject.SetActive(false);
this.btn3.gameObject.SetActive(false);
});
}
}
Button1을 클릭하면 2, 3이 사라지는데
Button2, Butto3을 배열(btns)로 만들어서 할당하였다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Main : MonoBehaviour
{
[SerializeField] private Button btn1;
[SerializeField] private Button[] btns;
void Start()
{
btn1.onClick.AddListener(() => {
for (int i = 0; i < this.btns.Length; i++)
{
Button btn = btns[i];
btn.gameObject.SetActive(false);
}
});
}
}
Button1, Button2를 btns(배열)에 할당하였고
Button3을 누를시 배열이 사라지고 Button4를 누를시 배열이 다시 생기게 작성
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Main : MonoBehaviour
{
[SerializeField] private Button btn3;
[SerializeField] private Button btn4;
[SerializeField] private Button[] btns; //btn1, btn2
void Start()
{
btn3.onClick.AddListener(() =>
{
Debug.Log("버튼3 눌렸습니다.");
for (int i = 0; i < this.btns.Length; i++)
{
Button btn = btns[i];
btn.gameObject.SetActive(false);
}
});
btn4.onClick.AddListener(() =>
{
Debug.Log("버튼4 눌렸습니다.");
for (int i = 0; i < this.btns.Length; i++)
{
Button btn = btns[i];
btn.gameObject.SetActive(true);
}
});
}
}