공부일지

스크립터블 오브젝트 본문

코딩/Unity

스크립터블 오브젝트

이하택 2023. 10. 30. 12:45

📌스크립터블 오브젝트란📍

📌 스크립터블 오브젝트란...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]

↪결과물

🌊사용하기까지의 의식의 흐름🏊‍♀️

  1. 몬스터 오브젝트를 생성하고자 한다. <br>
  1. 몬스터가 가지게 될 변수에는 무엇이 있을까?
    1. hp
    1. speed
    1. damage
    1. dropitem ..... <br>
  1. 이러한 몬스터들이 초당 100~500마리가 스폰되었으면한다.
    1. 일일히 오브젝트 생성 및 컴포넌트 설정
      • 각 오브젝트들에 대하여 변수를 선언하고 할당하는 과정에서 메모리의 선언과 가비지 컬렉션의 활동이 일어난다.
      • 따라서 메모리 소모량이 폭등한다.
  1. 추가로 몬스터를 무찌렀을 경우 새로이 몬스터를 생성하고자 한다.
    1. Destroy & Instantiate
      • 위와 같다.

이러한 흐름에 따라 스크립트 오브젝트를 사용.


Reference

스파르타 부트캠프-UnityUnityDocumentation'

베르의 프로그래밍 노트'님의 tistory블로그

'나의 개발 노트'님의 tistroy블로그


Uploaded by N2T

'코딩 > Unity' 카테고리의 다른 글

Delegate(대리자) - 작성중  (1) 2023.10.26
코드 컨벤션  (0) 2023.10.20
유한 상태 머신 (finite-state machine) - 작성중  (3) 2023.10.07
싱글톤의 변형과 제네릭 개념  (1) 2023.09.27
MonoBehaviour 추가 강의[09.21] (1)  (1) 2023.09.21