추가적으로 해야 할 것
유니티를 실행하다 꺼서 다시 시작할 필요 없이
버튼을 클릭 시 스킬이 다시 랜덤으로 생성되게
(이 부분을 계속 시도해보는데 초기화가 안됨)
(RemoveAllListener을 사용해봄)
+ 스킬 2개는 중복이 되면 안된다.
using Newtonsoft.Json;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.U2D;
using UnityEngine.UI;
public class SkillManager : MonoBehaviour
{
public static SkillManager instance; //싱글톤
public SpriteAtlas skillsAtlas;
public Button levelUpBtn;
public Button closeBtn;
public GameObject selectSkillPopUp;
public SkillData[] skillDatas;
private int randomSkillIndex;
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()
{
levelUpBtn.onClick.RemoveAllListeners();
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 int GetRandomAtlasImgId()
{
int id = skillDatas[randomSkillIndex].id;
return id;
}
public string GetRandomAtlasName()
{
string name = skillDatas[randomSkillIndex].name;
return name;
}
public string GetRandomAtlasDesc()
{
string desc = skillDatas[randomSkillIndex].desc;
return desc;
}
public Sprite GetRandomAtlasImg()
{
//랜덤으로 얻은 배열인 인덱스의 이미지 이름
Sprite skillSprite = skillsAtlas.GetSprite(skillDatas[randomSkillIndex].name);
return skillSprite;
}
public void GetSkillsRandomNum()
{
randomSkillIndex = Random.Range(0, skillDatas.Length);
//스킬데이터의 인덱스번호로 랜덤하게 출력
//Debug.Log(randomSkillIndex);
}
public void OnClickLevelUpBtn()
{
levelUpBtn.onClick.AddListener(() =>
{
selectSkillPopUp.SetActive(true);
GetSkillsRandomNum();
GetRandomAtlasImg();
GetRandomAtlasName();
GetRandomAtlasDesc();
});
}
public void OnClickCloseBtn()
{
closeBtn.onClick.AddListener(() =>
{
selectSkillPopUp.SetActive(false);
});
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
using UnityEngine.UI;
public class SelectSkillPopUp : MonoBehaviour
{
public Image skillImg1;
public TMP_Text skillId1;
public TMP_Text skillName1;
public TMP_Text skillDesc1;
public Image skillImg2;
public TMP_Text skillId2;
public TMP_Text skillName2;
public TMP_Text skillDesc2;
public Button shuffleSkills;
void Start()
{
shuffleSkills.onClick.AddListener(() =>
{
Debug.Log("클릭");
SkillManager.instance.OnClickLevelUpBtn();
});
////skillId1.text = SkillManager.instance.GetDataById(105).id.ToString();
////skillId2.text = SkillManager.instance.GetDataById(104).id.ToString();
//skillImg1.sprite = SkillManager.instance.GetRandomAtlasImg();
//skillImg2.sprite = SkillManager.instance.GetRandomAtlasImg();
////skillId1.text = SkillManager.instance.GetDataById().id.ToString();
//skillId1.text = SkillManager.instance.GetRandomAtlasImgId().ToString();
//skillId2.text = SkillManager.instance.GetRandomAtlasImgId().ToString();
skillImg1.sprite = SkillManager.instance.GetRandomAtlasImg();
skillId1.text = SkillManager.instance.GetRandomAtlasImgId().ToString();
skillName1.text = SkillManager.instance.GetRandomAtlasName().ToString();
skillDesc1.text = SkillManager.instance.GetRandomAtlasDesc().ToString();
SkillManager.instance.GetSkillsRandomNum();
skillImg2.sprite = SkillManager.instance.GetRandomAtlasImg();
skillId2.text = SkillManager.instance.GetRandomAtlasImgId().ToString();
skillName2.text = SkillManager.instance.GetRandomAtlasName().ToString();
skillDesc2.text = SkillManager.instance.GetRandomAtlasDesc().ToString();
}
}
'Study > Unity' 카테고리의 다른 글
[Unity] 클릭시 색상 변경 및 Select버튼 On/Off (0) | 2024.06.09 |
---|---|
[Unity] Random Skill Button & Select Button (0) | 2024.06.08 |
[Unity] Coroutine의 null 과 break의 차이 (0) | 2024.06.07 |
[Unity] 스킬 레벨업 창 만들기 (0) | 2024.06.05 |
[Unity] Resources 폴더와 역직렬화 (1) | 2024.06.04 |