[TIL] 34 개인과제 인벤,장착 ⭐⭐
카테고리: Til
유니티 숙련주차 5일차 + 개인과제
[o] 알고리즘 문제 - 43
[o] 강의 듣기 - 15강~
[X] 다른반 발표 보기
1. 아이템들 ScriptableObject
Item, weapon, armor
1). Item
public enum ItemType
{
None,
Weapon,
Armor
}
[CreateAssetMenu(fileName = "Item", menuName = "Items/Default", order = 0)]
public class Item : ScriptableObject
{
public ItemType type = 0;
public string Name;
public string info;
public int ItemGold;
public bool IsEquip = false;
public Sprite sprite;
}
2). weapon
[CreateAssetMenu(fileName = "Weapon", menuName = "Items/Weapon", order = 1)]
public class Weapon : Item
{
public int ItemAttack;
}
3). armor
[CreateAssetMenu(fileName = "Armor", menuName = "Items/Armor", order = 2)]
public class Armor : Item
{
public int ItemDef;
}
2. 장착
장비 클릭시 팝업창 뜨기.
팝업창에서 장착/해제 누르면 장착OR해제
equip, popup
Equip
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class Equip : MonoBehaviour
{
public UiManager Uimanager;
Weapon weapon;
Armor armor;
// 장비를 장착하는 함수
public void Equipa(Item item, Image image)
{
if (item.IsEquip == true)
{
image.color = new Color(238 / 255f, 216 / 255f, 191 / 255f);
Unequip(item);
statUpdate(item);
Uimanager.StatView();
}
else if (item.IsEquip == false)
{
image.color = Color.gray;
item.IsEquip = true;
statUpdate(item);
Uimanager.StatView();
}
}
public void Unequip(Item item)
{
item.IsEquip = false;
}
public void statUpdate(Item item)
{
weapon = item as Weapon;
armor = item as Armor;
if (item.IsEquip == true)
{
if (item.type == ItemType.Weapon)
{
Uimanager.playerstats.Attack += weapon.ItemAttack;
}
else if(item.type == ItemType.Armor)
{
Uimanager.playerstats.Def += armor.ItemDef;
}
}
else if(item.IsEquip == false)
{
if (item.type == ItemType.Weapon)
{
Uimanager.playerstats.Attack -= weapon.ItemAttack;
}
else if (item.type == ItemType.Armor)
{
Uimanager.playerstats.Def -= armor.ItemDef;
}
}
}
}
Popup
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class Popup : MonoBehaviour
{
GameObject Clickobject;
Image image;
Sprite selectimage;
Item selectItem;
Weapon weapon;
Armor armor;
Equip equip;
public InvenAddItem Inven;
public GameObject popup;
public Image PopupImage;
public TMP_Text Name;
public TMP_Text Info;
public TMP_Text ATKorDef;
public TMP_Text Itemstat;
private void Awake()
{
equip= GetComponent<Equip>();
}
public void popupView()
{
Clickobject = EventSystem.current.currentSelectedGameObject;
image = Clickobject.GetComponent<Image>(); // 장착 시 색변경을 위한 image
selectimage = image.transform.GetChild(0).GetComponent<Image>().sprite; // 인벤 장비 클릭시 sprite 값
//selectimage = image.GetComponentsInChildren<Image>()[0];
/*selectimage = image.GetComponentsInChildren<Image>()[1];
selectimage = image.GetComponentsInChildren<Image>()[2];*/
foreach (var item in Inven.playerInven.items)
{
if (Clickobject.name == item.name)
{
selectItem = item;
}
}
popup.SetActive(true);
PopUpreset(selectItem);
}
public void PopUpreset(Item selectItem)
{
PopupImage.sprite = selectimage;
Name.text = selectItem.name;
Info.text = selectItem.info;
if (selectItem.type == ItemType.Weapon)
{
weapon = selectItem as Weapon;
ATKorDef.text = "공격력";
Itemstat.text = weapon.ItemAttack.ToString();
}
else if (selectItem.type == ItemType.Armor)
{
armor = selectItem as Armor;
ATKorDef.text = "방어력";
Itemstat.text = armor.ItemDef.ToString();
}
}
public void popupConfirm()
{
equip.Equipa(selectItem, image);
popup.SetActive(false);
}
}
잡답
오늘은 코드 리펙토링?? 을 하였다 PLAYER코드에 있던 UI부분의 코드를 UIMANAGER을 만들어서 따로 분리했고 EQUIP에 있던 popup에 분리해서 넣었다.
컴퓨터⭐⭐ 그리고 오늘은 조립식 컴퓨터 시킨게 왔고, ssd만 부착하면 될 줄 알았는데 메인보드가 달라서 윈도우를 다시 깔고 해서 3시간 정도 걸렸다. 공부를 많이 못했지만 기분이 좋다.
느낀점 지금 한 유니티 inven 의 UI 가 코드로 생성하는 게 아니다. 유니티UI로 아이템을 만들었고 LIST의 ITEM 을 이용하여 생성하지 못하였다. 아쉽고 상점을 만들 때 생각이 났다. 상점에서 구매 후 인벤에 넣을 때? 다음부터 처음에 계획을 잘 새우고 코드, UI 부분을 다음을 생각하면서 해야겠다고 생각했다.
댓글남기기