[모각코][Unity/유니티]0825 TIL_인벤토리 기능 구현하기
이번회차에서는 주로 인벤토리창 기능을 구현해보았다.
1.인벤토리창
저번회차에서 만들었던 서브메뉴창과 비슷한 방식으로 인벤토리 약자인 I 키를 누르면 나타나고, 사라지는식으로 구현하려한다. 또한 아이템을 플레이어가 줍고, 인벤토리창의 칸에 담기는 기능까지 구현하려고한다. 따라서 gamemanager 스크립트의 update 함수에 아래와 같이 추가해주엇다.
void Update(){
//Sub Menu 설정
if(Input.GetButtonDown("Cancel")){
if(MenuSet.activeSelf)
MenuSet.SetActive(false);
else
MenuSet.SetActive(true);
}
//Inventory 설정
else if(Input.GetKeyDown(KeyCode.I)){
if(Inventory.activeSelf)
Inventory.SetActive(false);
else
Inventory.SetActive(true);
}
}
여기서 Inventory는 public gameobject로 받아줄것이다.
1-1) ui설정
위의 그림과 같이 오브젝트들을 만들어주었다. 오브젝트 생성은 앞서 만든 서브메뉴와 비슷한 과정으로 만들었는데, 그중 슬롯창, 즉 아이템목록 밑에 있 일정한 규격의 네모 ui를 여러개 만들어주기위해 grid layout group 컴포넌트를 사용해주었다. (+shadow 라는 컴포넌트도 추가해주었는데 이는 ui적 부분이라 설명은 따로 기재하지않겠다)
크게 설정할수있는 부분은
-cell size: 한칸당의 크기
-spacing: 칸끼리의 거리
-child alignment: 칸들의 전체적인 정렬
-constraint: 제한점; 열의 개수 혹은 행의 개수에 제한을 두어서 그이상 넘어가지못하도록 하는것
이 있었다.
1-2) 인벤토리창 기능구현_아이템 줍기
먼저 item 정보를 가지고있는 스크립트를 만들어주고,
그 스크립트를 받아서 리스트로(여러개의 item을 관리할것이므로) 만들수있는 오브젝트를 만들었다.
그 다음, itemDatabase 스크립트에서 for문을 통해 public으로 받은 위치로 스프라이트들을 여러개 생성해주었다
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Inventory : MonoBehaviour
{
public List<Item> items = new List<Item>();
//public delegate void OnChangeItem();
//public OnchangeItem OnchangeItem();
public bool AddItem(Item _item)
{
items.Add(_item);
//OnchangeItem.Invoke();
return true;
}
private void OnTriggerEnter2D(Collider2D collision){
if(collision.CompareTag("FieldItem"))
{
Debug.Log("d");
FieldItem fielditems = collision.GetComponent<FieldItem>();
if(AddItem(fielditems.GetItem()))
fielditems.DestroyItem();
}
}
}
위의 코드를 player에 적용시켜서 아이템을 접촉하면 리스트에 추가하게끔하였다.
1-3) 아이템 인벤토리창에 띄우기
inventoryUI라는 스크립트를 추가로 만들어 인벤토리 오브젝트에 적용시켜주었다.
<결과화면>
이렇게해서 인벤토리창까지 구현을 완료하며 마지막회차를 마쳤다.
+참고영상
https://www.youtube.com/watch?v=74vxsqQsFHE&t=245s