본문 바로가기
게임 프로그래밍/유니티 활용

[유니티 활용] ScriptableObject를 이용한 Data 관리 예제 - 몬스터

by 레오란다 2023. 4. 24.
반응형

ScriptableObject 는 데이터 관리 측면에서 굉장히 유용하게 사용할 수 있습니다. 이 글에서는 ScriptableObject 를 이용해 몬스터를 정의하고 객체를 만드는 방법에 대한 예제를 다뤄보도록 하겠습니다.

 

몬스터 ScriptableObject 작성

몬스터의 기본적인 속성과 관련된 정보는 다음과 같이 만들 수 있습니다.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[CreateAssetMenu]
public class SOMonster : ScriptableObject
{   
   public int str; // strenth / 힘
   public int dex; // dexterity / 민첩
   public int con; // Constitution / 생명력
}

 

 

이 스크립트를 이용해서 슬라임, 고블린, 해골 병사 등등의 몬스터에 대한 기본 스탯을 정의하는 ScriptableObjct 객체를 생성할 수 있습니다.

 

ScriptableObject 를 이용해 생성한 몬스터 스탯 정보

 

 

 몬스터 생성

예제로 Slime 몬스터를 만들어 보겠습니다. 몬스터는 에셋 스토어에 있는 무료 에셋을 이용했습니다. 에셋이름은 RPG Monster Duo 입니다.

 

슬라임 몬스터에 ScriptableObject 를 이용해 스탯 적용

 

우선 다운받은 슬라임 몬스터에 Slime 이라는 스크립트를 만듭니다. 스크립트 내용은 아래와 같습니다.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Slime : MonoBehaviour
{
   public SOMonster soMon;

   public int level;

   [HideInInspector]
   public int hp;

   [HideInInspector]
   public int dmg;

   float attackDelay;

   // Start is called before the first frame update
   void Start()
   {
      hp = level * soMon.con;
      dmg = level * soMon.str;
      attackDelay = 1f / ((soMon.dex + level) * 0.5f);
   }
}

 

위의 코드에서 슬라임의 hp / dmg / attackDelay 는 모두 ScriptableObject 로 정의한 str / dex / con 값과 레벨에 따라 결정됩니다.

 

이와 같은 방법으로 손쉽게 몬스터의 스탯을 관리할 수 있습니다. 

 

다음 글에서는 ScriptableObject 를 이용해 ItemDropTable 을 관리하는 방법에 대해 다뤄보도록 하겠습니다.

 

반응형

댓글