📌스크립터블 오브젝트란📍
📌 스크립터블 오브젝트란...Unity에서 관리하는 유연한 데이터 컨테이너...스크립팅 가능한 오브젝트이며, 스크립트로 정의하고 에셋 메뉴를 통해 생성. 유니티에 에셋을 저장하는 재사용 가능한 데이터 구조.
- 클래스 인스턴스와 별도로 대량의 데이터나 설정 저장 가능.
- 코드와 데이터를 분리하여 코드를 더 깔끔하고 관리하기 쉽게 함.
- 인스펙터 창에서 직접 수정, 관리.
- 값의 사본이 생성되는 것을 막아 메모리 사용을 줄일 수 있다.
- 착탈식(pluggable) 데이터 집합을 미리 정의함.
🔨🔧S.O. 선언과 사용 예시🧾📝
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(fileName = "DefaultAttackData", menuName ="TopDownController/Attacks/Default", order = 0)]
public class AttackSO : ScriptableObject
{
[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;
}
↪공격가능한 캐릭터들의 스크립터블 오브젝트
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(fileName = "RangedAttackData", menuName = "TopDownController/Attacks/Ranged", order = 1)]
public class RangedAttackData : AttackSO
{
[Header("Ranged Attack Data")]
public string bulletNameTag;
public float duration;
//탄퍼짐
public float spread;
public int numerOfProjectilesPerShot;
public float multipleProjectileAngle;
public Color projectileColor;
}
↪원거리 공격 캐릭터 스크립터블 오브젝트.
↪위의 스크립트를 저장하면 Create에 스크립터블 오브젝트가 추가됨. ↪[Project]-[Create]-[TopDownController]-[Ranged]
↪결과물
🌊사용하기까지의 의식의 흐름🏊♀️
- 몬스터 오브젝트를 생성하고자 한다. <br>
- 몬스터가 가지게 될 변수에는 무엇이 있을까?
- hp
- speed
- damage
- dropitem ..... <br>
- 이러한 몬스터들이 초당 100~500마리가 스폰되었으면한다.
- 일일히 오브젝트 생성 및 컴포넌트 설정
- 각 오브젝트들에 대하여 변수를 선언하고 할당하는 과정에서 메모리의 선언과 가비지 컬렉션의 활동이 일어난다.
- 따라서 메모리 소모량이 폭등한다.
- 일일히 오브젝트 생성 및 컴포넌트 설정
- 추가로 몬스터를 무찌렀을 경우 새로이 몬스터를 생성하고자 한다.
- Destroy & Instantiate
- 위와 같다.
- Destroy & Instantiate
이러한 흐름에 따라 스크립트 오브젝트를 사용.
Reference
스파르타 부트캠프-UnityUnityDocumentation'
Uploaded by N2T