본문 바로가기
유니티/코드

ScriptableObject 배열 길이 제한하기

by fore4022 2025. 3. 18.

 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