본문 바로가기
제출용/TIL

내일배움캠프 27일차 TIL + 열거형, SO

by 유린테 2024. 5. 23.

2D 게임을 만들면서 다른것보다 은근 중요한 것이

열거형과  SO 라는 느낌을 받았다.

정말 많은 곳에 사용되고, 어떻게 사용하느냐에 따라 코드 짤 때 난이도가 달라지는 부분인듯 하다.

 


 

 

Enum (열거형)

 

상수형 값에 의미를 부여하기 위해 사용

기본 타임은 int 기반, 제일 앞의 값을 0으로 하고 이후에 1,2,3... 과 같이 번호를 붙임

중간에 번호체계를 변경할 수 있음

중간에 데이터가 추가될 염려가 있는 경우에 이렇게 활용 (번호가 흐트러지면 데이터들이 다 망가질 수 있음)

그때는 Weapon=100 과 같이 값을 직접 넣어주게 된다

이후에 101, 102와 같이 그 다음 숫자가 배정됨

 

if (ItemType == 0) 일 때보다 if (ItemType == ItemType.Weapon) 일때 훨신 이해가 잘됨

public enum ItemType
{
    Weapon,     // weapon 값은 0
    Armor,      // Armor 값은 1 (이전 값에서 자동으로 1 증가)
    Consumable, // Consumable 값은 2
    QuestItem   // QuestItem 값은 3
}
public enum ItemType
{
     Weapon = 100,    // weapon 값은 100
     Armor,           // Armor 값은 101 (이전 값에서 1 증가)
     Consumable,      // Consumable 값은 102
     QuestItem        // QuestItem 값은 103
}

 

이런식으로 열거형을 사용하면 좀더 깔끔하고 쉽게 코드나 기능을 정리할 수 있다!

 

 

 

 

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

 

유니티에서 데이터를 저장하고 관리하는 유연한 데이터 컨테이너

게임에서 재사용 가능한 데이터 또는 설정을 저장하는데 사용

코드와 데이터를 분리하여 코드를 더 깔끔하고 관리하기 쉽게 만듬

하나의 스크립터블오브젝트를 여러 게임 오브젝트에서 참조하거나 재사용 가능

유니티 에디터와 통합되어 인스펙터 창에서 직접 수정하고 관리할 수 있음

 

프로젝트의 세팅값을 정리해놓고 읽어서 바로바로 처리할 수 있게 하는 것

같은 몬스터 100마리 있을 때, 스크립터블에 몬스터 기본정보를 저장해놓으면 

몬스터 100개 안만들고 그냥 스크립터블에서 가져오기를 하면 되서 메모리도 아낄 수 있다

 

무슨무슨 SO~ 이렇게 된 것들!!

 

Attack SO 만들기

using UnityEngine;

[CreateAssetMenu(fileName = "DefaultAttackSO", menuName = "TopDownController/Attacks/Default", order = 0)]
public class AttackSO : ScriptableObject
{
		// 공격에 대한 기준 데이터를 유니티 에디터 상에서 편하게 관리할 수 있어요.
		// SO로 들고 있으면 모두가 이 SO를 바라보게 되어 중복된 데이터가 여기저기 흘러다니지 않는 장점이 있어요!
    [Header("Attack Info")]
    public float size;
    public float delay;
    public float power;
    public float speed;
    public LayerMask target;

    [Header("Knock Back Info")]
    public bool isOnKnockback;
    public float knockbackPower;
    public float knockbackTime;
}
Attack SO 는 ScriptableObject 의 상속을 받는다

파일명, 메뉴네임, 오더 정하고

이런 데이터를 들고있다~ 하는 작업이 필요,

이런 느낌으로 

SO에는 기본값들?이나 설정들을 넣어줘서 사용하는 것 같다.

 

약간 매번 공격 할 때 마다 공격에 관련된 모든 코드를 불러오는 것 보다

이 공격에는 이런거, 저런걸 포함한다!! 란 스크립트를 써주고 그 스크립트 자체를 불러와서

사용하면 편리한 것 같음.

말 그대로 정보 컨테이너!

 

앞으로 게임 만들 때 열거형과 SO가 상당히 중요할 것 같다!!

 

 


 

 

그래도 아직.. 많이 어렵다