[TIL] 34 개인과제 인벤,장착 ⭐⭐

업데이트:

카테고리:

태그: , ,




유니티 숙련주차 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;
            }
        }
    }
}
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 부분을 다음을 생각하면서 해야겠다고 생각했다.





참고 : 유니티 TOP


📔

댓글남기기