8년차 모션그래픽디자이너의 고군분투

[Unity Engine] 인벤토리 시스템 구현하기 -1- | 아이템 수집해서 인벤토리 창에 넣기 | C#, Inventory System, SriptableObject 스크립터블오브젝트 본문

코자이너/Unity

[Unity Engine] 인벤토리 시스템 구현하기 -1- | 아이템 수집해서 인벤토리 창에 넣기 | C#, Inventory System, SriptableObject 스크립터블오브젝트

쓰리디사람3Dperson 2024. 3. 20. 12:00
반응형
반응형

안녕하세요 오늘은 유니티에서 3D RPG 게임을 만들 때 꼭 필요한 인벤토리 시스템을 구축하는 방법에 대해 포스팅을 해보겠습니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public enum ItemType
{
    Sword,
    Shield,
    Potion
    MagicWand
}
public class ItemData : ScriptableObject
{
    public GameObject Prefab;
    public Vector3 Position;
    public int ID;
    public ItemType Type;
    public string Name;
    public string Description;
    public int Value;
    public Sprite Icon;
    public Sprite BigImage;
}

스크립터블 오브젝트를 활용해서 아이템 데이터를 작성해줍니다. Enum으로 아이템 타입을 지정해두었고, 해당 쓰리디 오브젝트를 지정하기 위한 프리펩, 같은 아이템인걸 구분해줄수 있는 아이디, 같은 아이디면 수량을 증가 시킬 밸류, UI에 뜨게 할 이름과 설명, 이미지들의 변수명을 넣어놨습니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(fileName = "Sword Object", menuName = "Items / Sword")]
public class SwordObject : ItemData
{
    public void Awake()
    {
        Type = ItemType.Sword;
    }
}

그걸 이제 아이템 타입마다 스크립트를 작성해줍니다. 위 두개의 스크립트는 꼭 모노비헤비어가 아니라 스크립터블 오브젝트와 아이템데이터를 각각 받도록 해야합니다. 스크립트를 각각 다 만들었다면

오른쪽 클릭했을 때 이런식으로 새로운 파일을 추가할 수 있도록 뜹니다.

오른쪽 클릭해서 새로 만들었고 다양성을 주기 위해 A부터 E까지 만들어 주었습니다.

그럼 아까 아이템 데이터에 할당한 변수명들이 이런식으로 뜨는걸 확인할 수 있습니다. 각각의 아이템에 들어갈 특징들을 따로 저장해줄수 있습니다.

 

인벤토리는 꽤 글이 길어질거 같아 여기서 끊고 다음 글에 UI 작성하겠습니다.

반응형
Comments