_Han_
나의 개발 노트
_Han_
  • 분류 전체보기 (273)
    • 데이터 엔지니어링 (30)
    • 인프라 (3)
    • 추천시스템 (11)
    • 코딩테스트 (146)
    • 부트캠프 회고 (15)
    • 회고 (4)
    • 자격증 (1)
    • 파이썬 프로그래밍 (6)
    • 통계 (2)
    • Git (21)
    • 유니티2D (33)

최근 글

반응형
hELLO · Designed By 정상우.
_Han_

나의 개발 노트

#13-2 유니티 아이템 Scriptable Object(스크립터블 오브젝트)
유니티2D

#13-2 유니티 아이템 Scriptable Object(스크립터블 오브젝트)

2020. 12. 11. 17:06
반응형

이번 포스팅은 #13-1 유니티 아이템 줍기(써클 콜라이더)에 이어 진행하도록 하겠습니다.

 

포스팅은 유니티 2D 게임 개발(게임 개발 프로그래밍)에 나온 예제로 진행합니다.

 

#1 유니티2D 개발 시작하기

안녕하세요 첫 포스팅입니다. 유니티2D 관련 포스팅을 진행하겠습니다. 게임개발에 필요한 지식을 전달하고 함께 학습하겠습니다. 먼저 유니티2D 개발 블로그 포스팅에 앞서 참고한 책을 소개합

my-develop-note.tistory.com

 #13-1 유니티 아이템 줍기(써클 콜라이더)링크는 아래에 첨부하겠습니다.

 

#13-1 유니티 아이템 줍기(써클 콜라이더)

이번 포스팅은 아이템 획득에 관하여 포스팅을 진행해 보겠습니다. 포스팅은 유니티 2D 게임 개발(게임 개발 프로그래밍)에 나온 예제로 진행합니다. 유니티 2D 게임 개발 COUPANG www.coupang.com 아이

my-develop-note.tistory.com


Scriptable Object(스크립터블 오브젝트)

Scirptable Object는 스크립팅 가능한 오브젝트로 C# 스크립트로 정의하고 에셋 메뉴를 통해 생성합니다.

유니티에 에셋으로 저장하는 재사용 가능한 데이터 구조라고 생각할 수 있습니다.

 

1. 스크립터블 오브젝트는 에셋의 인스턴스를 가리키는 참조를 저장해놓고 사용하면 메모리 사용량을 줄일 수 있습니다.

매번 사용할 때 오브젝트의 모든 값을 복사 하지 않으므로 메모리 사용량이 늘지 않습니다.

2. pluggable (착탈식) 데이터 집합을 미리 정의합니다.

 

"Item" 이라는 Scriptable Object를 만들겠습니다.

 

먼저 Item 스크립트(C#)을 만들겠습니다.

1. Assets > Scripts 폴더에 스크립트(C#)와 스크립터블 오브젝트를 저장할 폴더를 생성하였습니다.

2. Assets > Scriptes > Scriptable Objects 폴더에 Item 스크립트를 생성하였습니다.

 

Item 스크립트(C#)의 전체코드입니다.

using UnityEngine;

[CreateAssetMenu(menuName = "Item")]

public class Item : ScriptableObject
{
    public string objectName;
    public Sprite sprite;
    public int quantity;
    public bool stackable;
    public enum ItemType
    {
        COIN,
        HEALTH
    }
    public ItemType itemType;
}

코드를 살펴 보도록 하겠습니다.

[CreateAssetMenu(menuName = "Item")]

아래의 사진처럼 이 코드는 생성 메뉴안에 하위 메뉴를 만들어 줍니다.

Project창에서 마우스 오른쪽 클릭하여 스크립터블 오브젝트인 Item의 인스턴스를 만들 수 있습니다.

 

public class Item : ScriptableObject
{
    }

Item 클래스는 그동안 보았던 MonoBehaviour이 아닌 ScriptableObject를 상속 받고 있습니다.

 

MonoBehaviour 클래스를 상속 받지 않고 있기 때문에 Start(), Update() 메서드를 사용할 수 없습니다.

사실 스크립터블 오브젝트는 데이터를 저장하는 역할이기 때문에 Start(), Update() 메서드를 사용할 필요가 없습니다.

같은 이유로 게임 오브젝트에 추가할 수 없습니다.

따라서 MonoBehaviour 클래스를 상속한 스크립트 안에 스크립터블 오브젝트의 참조를 만들어 사용할 것입니다.

 

 

Item 클래스 안에 코드를 보겠습니다.

public string objectName;

이름이나 내용등 다양한 목적으로 사용할 수 있습니다.

public Sprite sprite;

게임에 표시할 수 있는 아이템의 스프라이트를 가리키는 참조를 저장합니다.

public int quantity;

아이템의 수량을 기록합니다.

public bool stackable;

예제에서는 아이템이 stackable 상태인지 나타냅니다.

동시에 동일한 위치에 겹치게 쌓아둘 수 있고 플레이와 동시에 상호작용할 수 있는 동일한 아이템들의 사본을 표현하는 용어로 stackable을 사용하였습니다.

public enum ItemType
    {
        COIN,
        HEALTH
    }

아이템의 종류를 나타내는 열거형 상수 정의입니다.

게임에 다양한 종류의 동전이 있을 수 있지만 모두  COIN이라는 ItemType으로 분류합니다.

public ItemType itemType;

위에서 만든 ItemType 열거 형식을 사용합니다. itemType이라는 속성을 만듭니다.

 

스크립트(C#)를 저장합니다.

 

지금까지 Scriptable Obejct(스크립터블 오브젝트)의 속성에 대하여 만들었습니다.

이제 Scriptable Obejct(스크립터블 오브젝트)를 만들어 보도록 하겠습니다.

Project 창 > Assets > Scripts > Scriptable Objects 폴더에서 마우스 오른쪽 클릭 > Create > Item 을 선택하여 스크립터블 오브젝트를 생성합니다.

1. 방금 생성한 스크립터블 오브젝트의 이름을 "Coin"으로 변경해줍니다.

2. Coin 오브젝트(Scriptable Object)의 속성을 사진과 같이 설정합니다.

 

Object Name : coin

Sprite : 해당 오브젝트를 표현할 수 있는 스프라이트

Quantity : 0

Stackable : 체크

ItemType : COIN

 

현재 스크립터블 오브젝트는 MonoBaviour 클래스를 상속 받고 있지 않으므로 게임 오브젝트에 추가할 수 없습니다.

게임오브젝트에 추가할 수 있게 하기 위하여  MonoBeaviour 클래스를 상속 받는 Consumable 스크립트를 생성하겠습니다.

 

Assets > Scripts > MonoBehaviour 폴더에 Consumable 스크립트를 저장하였습니다.

 

Consumable 스크립트의 전체코드입니다.

using UnityEngine;

public class Consumable : MonoBehaviour
{

    public Item item;    
    
}

 

스크립트를 저장하겠습니다.

 

스크립트의 코드를 살펴보면

 

Consumable 클래스는 MonoBehaviour 클래스를 상속 받고 있습니다.

public 으로 선언하여 다른 스크립트에서도 사용할 수 있습니다.

 

item속성에 Item을 대입합니다.

 

CoinObject에 추가하겠습니다.

1. CoinObject에 방금 만든 Consumable(스크립트)컴포넌트를 추가합니다.

2. Consumable(스크립트) 컴포넌트의 Item 속성에 Coin(스크립터블 오브젝트)를 추가합니다.

 

Assets > Prefabs 폴더에 CoinObject를 드래그 앤 드롭하여 프리팹으로 만들겠습니다.

 

다음 포스팅에는 다음 아이템을 만들고 Player 클래스의 OnTriggerEnter2D 메서드를 수정하겠습니다.

 

마지막으로 Ctrl + S를 눌러 Scene을 저장합니다!


감사합니다! :)

 

 

반응형

'유니티2D' 카테고리의 다른 글

#14-1 유니티 체력바 만들기(캔버스, UI, 텍스트)  (0) 2020.12.14
#13-3 유니티 아이템 (OnTriggerEnter2D)  (0) 2020.12.12
#13-1 유니티 아이템 줍기(써클 콜라이더)  (0) 2020.12.10
#12 유니티 기초 종합, 클래스 구현  (0) 2020.12.08
#11-3 유니티 시네머신 안정화, 마무리 작업  (0) 2020.12.06
    '유니티2D' 카테고리의 다른 글
    • #14-1 유니티 체력바 만들기(캔버스, UI, 텍스트)
    • #13-3 유니티 아이템 (OnTriggerEnter2D)
    • #13-1 유니티 아이템 줍기(써클 콜라이더)
    • #12 유니티 기초 종합, 클래스 구현
    _Han_
    _Han_
    학습한 것을 기록합니다.

    티스토리툴바