728x90
퀵슬롯 구현이 끝났다.
void Awake에 아래 구절 추가
for(int i=0;i<4;i++)//퀵슬롯 아이템 4개 초기화용 추가
{
QuickSlotItem.Add(null);
}
Load();//json 데이터 읽어온후
DrawQuickslot();// 퀵슬롯 그려준다
slotclick 함수에 아래 코드 추가
if(CurItem.ItemType=="Potion")//슬롯클릭시 아이템 타입이 포션이면
{
if(QuickSlotItem!=null)
registQuickSlot();//등록함수 호출
}
public void DrawQuickslot() // 퀵슬롯 아이템갯수, 아이템아이콘 그려주는 역활 및 save
{
for(int i=0;i<QuickSlotItem.Count;i++)
{
if(QuickSlotItem[i]!=null)//퀵슬롯 아이템리스트에 아이템이 존재한다면
{
InvenQuickSlot[i].GetComponentInChildren<Text>().text = QuickSlotItem[i].Number.ToString(); //연결된 인벤토리 퀵슬롯 갯수 text는 quickslotitem number를 받아서 넣어주고
InvenQuickSlot[i].transform.GetChild(1).GetComponent<Image>().sprite = ItemSprite[Alltem.FindIndex(x => x.Name == QuickSlotItem[i].Name)];//이미지도 같다
}
else // 존재하지않는다면 초기화
{
InvenQuickSlot[i].GetComponentInChildren<Text>().text = null;
InvenQuickSlot[i].transform.GetChild(1).GetComponent<Image>().sprite = none;
}
MainQuickSlot[i].GetComponentInChildren<Text>().text = InvenQuickSlot[i].GetComponentInChildren<Text>().text;//메인 과 인벤 퀵슬롯연결 이하동문
MainQuickSlot[i].transform.GetChild(1).GetComponent<Image>().sprite = InvenQuickSlot[i].transform.GetChild(1).GetComponent<Image>().sprite;
}
Save();//json데이터로 저장
}
public void registQuickSlot()//퀵슬롯아이템리스트에 등록함수 포션일때만 호출된다
{
for (int i = 0; i < QuickSlotItem.Count; i++)
{
if (QuickSlotItem[i] == null)//퀵슬롯 아이템이 null 이라면
{
QuickSlotItem[i] = CurItem;//클릭된 아이템 넣고
break;//탈출
}
if (QuickSlotItem[i].Name == CurItem.Name)//클릭한 아이템과 퀵슬롯에 등록된 아이템이 같다면
{
QuickSlotItem[i] = null; // null 로 초기화후
break;//탈출
}
}
}
public void InvenQuickSlotClick(int slotNum)//인벤토리 퀵슬롯 클릭시 null 로 초기화 함수
{
QuickSlotItem[slotNum] = null;
DrawQuickslot();//그려주는 함수 호출
}
public void MainQuickSlotClick(int slotNum)//메인 퀵슬롯 클릭 함수
{
if(QuickSlotItem[slotNum]!=null) // 퀵슬롯아이템리스트 i 가 null이 아니면
{
switch( QuickSlotItem[slotNum].Type)//퀵슬롯 아이템이 hp 인지 mp 인지 구별후
{
case "HP":
if(int.Parse(QuickSlotItem[slotNum].Number)>0)// 갯수가 0 보다 크다면
{
int i =int.Parse(QuickSlotItem[slotNum].Number) - 1;//int i 선언후 갯수를 빼주고
QuickSlotItem[slotNum].Number = i.ToString();// 퀵슬롯아이템리스트에 갯수를 다시 넣어주고
CharacterManger.instance.stat.curHp += int.Parse(QuickSlotItem[slotNum].value);//캐릭터 cupHp에 value만큼 더해주고
if(CharacterManger.instance.stat.curHp>=CharacterManger.instance.stat.maxHp)// 만약 curHp가 maxHp 보다 크거나 같으면
{
CharacterManger.instance.stat.curHp = CharacterManger.instance.stat.maxHp;//curHp는 maxHp로
}
}
break;
case "MP":
if (int.Parse(QuickSlotItem[slotNum].Number) > 0)//위와같다
{
int i = int.Parse(QuickSlotItem[slotNum].Number) - 1;
QuickSlotItem[slotNum].Number = i.ToString();
CharacterManger.instance.stat.curMp += int.Parse(QuickSlotItem[slotNum].value);
if (CharacterManger.instance.stat.curMp >= CharacterManger.instance.stat.maxMp)
{
CharacterManger.instance.stat.curMp = CharacterManger.instance.stat.maxMp;
}
}
break;
}
}
DrawQuickslot();//갯수 업데이트 및 저장
}
void Save()
{
string jdatamyitemlist = JsonConvert.SerializeObject(MyItemList); // string에 내 아이템리스트를 json으로 바꿔줘서 넣어주고
string jdatamyquickslot = JsonConvert.SerializeObject(QuickSlotItem);//퀵슬롯 아이템 json데이터로 바꿔주고
File.WriteAllText(Application.dataPath + "/Resources/MyItemText.txt", jdatamyitemlist);//파일을 아래와같이 저장
File.WriteAllText(Application.dataPath + "/Resources/MyQuickSlot.txt", jdatamyquickslot);// 이파일을 Resources 폴더에 MyItemText jdata로 저장해준다
TabClick(curTab); // 탭클릭호출
}
void Load()
{
string jdatamyitemlist = File.ReadAllText(Application.dataPath + "/Resources/MyItemText.txt");//내 퀵슬롯 데이터 읽어오고
string jdatamyquickslot = File.ReadAllText(Application.dataPath + "/Resources/MyQuickSlot.txt");// 내아이템 리스트 를 읽어오고
MyItemList = JsonConvert.DeserializeObject<List<Item>>(jdatamyitemlist); // Convert하여 Myitemlist에 넣어준다
QuickSlotItem =JsonConvert.DeserializeObject<List<Item>>(jdatamyquickslot);//퀵슬롯 아이템에 넣어준다
TabClick(curTab); // 처음 탭클릭 호출
}
이걸로 퀵슬롯 구현은 끝낫고
내일은 상점을 구현해볼 예정이다.
반응형
'개인프로젝트 3D RPG 개발일지' 카테고리의 다른 글
프로젝트 진행글이 없던이유 (3) | 2022.07.26 |
---|---|
26.(유니티포폴) 상점구현 (0) | 2022.07.20 |
24.(유니티포폴)퀵슬롯 (0) | 2022.07.18 |
23.(유니티포폴) 데미지 텍스트 구현 (0) | 2022.07.15 |
22.(유니티포폴) 몬스터HP 바 및 캐릭터 HP,MP바 구현 (0) | 2022.07.14 |