ScriptableObject를 이용해서 다양한 정보를 관리하기 위해서 배열을 사용하는 경우가 있다.
using UnityEngine;
[CreateAssetMenu(fileName = "Data", menuName = "Crate New Data_SO")]
public class Data : ScriptableObject
{
public int[] values = new int[4];
}//values 배열의 길이보다 값이 더 들어가는 것을 확인할 수 있다.
이 때마다, ScriptableObject의 스크립트에서 배열의 길이를 정해주더라도 에디터의 인스펙터에서는 제한한 길이보다 값을 더 저장할 수 있다.
배열 크기 제한하는 방법
using UnityEngine;
using System;
[CreateAssetMenu(fileName = "Data", menuName = "Crate New Data_SO")]
public class Data : ScriptableObject
{
public const int maxSize = 4;
public int[] values = new int[maxSize];
private void OnValidate()
{
ResizeArray(ref values);
}
private void ResizeArray<T>(ref T[] array)
{
if(array.Length > maxSize)
{
Array.Resize(ref array, maxSize);
}
}
}
코드 설명
- OnValidate는 유니티 생명주기 함수로 인스펙터에서 변수에 변경 사항이 생길 때 호출된다.
- ResizeArray 함수는 배열의 길이가 maxSize보다 큰 경우에 Array.Resize를 통해서 배열의 길이를 다시 maxSize로 조절해 준다.
나는 ScriptableObject에서 배열에 필요 이상의 값이 담기는 경우와 그로 인해서 발생할 수 있는 오류들을 예방하고 싶었다.
'유니티 > 코드' 카테고리의 다른 글
| Tweening 구현(2) (0) | 2025.05.12 |
|---|---|
| Tweening 구현(1) (0) | 2025.04.29 |
| Non-MonoBehaviour Class에서 Coroutine 실행 (0) | 2024.12.31 |
| GetComponentsInChildren 구현 (0) | 2024.10.12 |
| 어드레서블 에셋 씬 로드 구현 (0) | 2024.09.11 |