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

1) Unity에서 데이터를 저장하고 관리하는 유연한 데이터 컨테이너

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

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

4) 하나의 스크립터블 오브젝트를 여러 게임 오브젝트에서 참조 또는 재사용 할 수 있다.

 

스크립터블 오브젝트를 사용하려면 스크립터블 오브젝트를 상속받아야 한다.

실제로 만드는 작업 필요하므로 CreateAssetMenu 필요

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;
}

 

CharacterStat

Stats이 혼자서 행동하는 게 아니므로 [System.Serializable] 추가

// 데이터 폴더처럼 사용할 수 있게 만들어주는 Attribute임

추가하게 되면 Inspector 창에서도 class지만 볼 수 있다

[Serializable]
public class CharacterStat
{
	public StatsChangeType statsChangeType;
	[Range(1, 100)] public int maxHealth;
	[Range(1f, 20f)] public float speed;
	public AttackSO attackSO;
}

 

 

'Unity' 카테고리의 다른 글

[모듈러 연산, Event]  (0) 2024.10.24
241023(수) [Skybox, Raycast]  (1) 2024.10.23
[AddForce 함수]  (0) 2024.10.16
[쿼터니언(Quaternion), 삼각함수와 역삼각함수]  (0) 2024.10.08
[Input Manager, 무엇이 문제일까?]  (3) 2024.10.07

+ Recent posts