플레이어가 아이템을 획득하면 인벤토리로 넣을거다.
일단 아이템을 구현하려면 아이템의 특성을 설계를 해둬야하는데 나는 다음과 같이 설계했다.
아이템의 정보 - 이름, 아이템 코드, 어떤 종류인지, 가격, 설명
아이템의 이미지
이렇게 두가지를 생각해두고 아이템 구현을 해보자.
일단, 아이템의 이미지를 넣어줄, 2D Object 를 만들어줬다.
이걸 다 만든 후, Prefab으로 만들어 줘서 아이템으로 사용할 예정이다.
이 오브젝트에 넣어 줄 스크립트를 하나 짜보자.
스크립트는 아이템의 클래스를 정의한 클래스 하나, 아이템을 만들어줄 오브젝트에 붙일 수 있는 오브젝트 하나 이렇게 만들었다.
코드가 좀 긴거같아서 접는 글에 올리겠다.
Item.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public enum ItemType{
crops,
etc
}
[System.Serializable]
public class Item
{
[SerializeField] string item_name;
[SerializeField] int item_code;
[SerializeField] ItemType item_type;
[SerializeField] int item_price;
[SerializeField] string item_info;
public Item(string _name, int _code, ItemType _type, int _price, string _info){
item_name = _name;
item_code = _code;
item_type = _type;
item_price = _price;
item_info = _info;
}
#region Getter
public string GetItemName(){
return item_name;
}
public int GetItemCode(){
return item_code;
}
public ItemType GetItemType(){
return item_type;
}
public int GetItemPrice(){
return item_price;
}
public string GetItemInfo(){
return item_info;
}
#endregion
#region Setter
public void SetItemName(string _name){
item_name = _name;
}
public void SetItemCode(int _code){
item_code = _code;
}
public void SetItemType(ItemType _type){
item_type = _type;
}
public void SetItemPrice(int _price){
item_price = _price;
}
public void SetItemInfo(string _info){
item_info = _info;
}
#endregion
}
ItemManager.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ItemManager : MonoBehaviour
{
[SerializeField] Item item;
[SerializeField] Sprite item_img;
private void Start() {
item_img = null; //나중에 이미지는 아이템 코드를 이름으로 하여 직접 불러올 수 있도록 할 계획
}
}
이런식으로 구성했다.
변수의 자료형 앞에 [SerializeField]를 붙여주면, 변수 자체가 private가 되면서, 인스팩터창에서도 확인할 수 있기 때문에 저걸 붙여서 인스팩터창에서 쉽게 알아볼 수 있도록 해주었다. (그냥 코딩할때 편해서 이렇게 했다.)
그리고 ItemManager를 아까 만들어준 오브젝트에 붙여주자.
이렇게 스크립트 두개를 만들어준 이유는, Item.cs를 보면 알겠지만 Monobehavior 라이브러리가 상속되어있지 않을것이다.
딱히 상속시킬 필요가 없기 때문에 상속시키지 않았는데 이렇게 하면 유니티 내부의 오브젝트에 스크립트를 컴포넌트로 추가시키지 못한다.
따라서 ItemManager를 따로 만들어 ItemManager를 오브젝트에 붙여주고, 아이템에 대한 상호작용과 필요한 메소드들을 ItemManager에서 구현할 수 있도록 만드는 작업이였다.
'Develop > 마음대로 만드는 게임' 카테고리의 다른 글
[NProject] 마음대로 만드는 게임 - 9. 아이템을 만들어 보자! 3 (0) | 2024.05.20 |
---|---|
[NProject] 마음대로 만드는 게임 - 8. 아이템을 만들어 보자! 2 (0) | 2024.05.16 |
[NProject] 마음대로 만드는 게임 - 6. 인벤토리 구현(디자인 만들기 추가) (0) | 2024.05.15 |
[NProject] 마음대로 만드는 게임 - 5. 인벤토리 구현(디자인 만들기) (0) | 2024.05.10 |
[NProject] 마음대로 만드는 게임 - 4. 플레이어 이동 제한 (0) | 2024.05.10 |