스크립터블 오브젝트 (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 |