코드 및 공부/데이터 관리

OnValidate()을 이용한 SO 데이터 관리

ekrxjvpvj0110 2024. 12. 11. 23:35

유니티 버전 - 2022.3.17f1

 

 

 

 

 

목차


  • OnValidate()
  • ValidateCheckItemCode
  • 결과

 

 

 

 

 

OnValidate()


유니티에서 제공하는 이벤트 함수이고, 인스펙터 창에서 스크립트 컴포넌트의 속성을 변경할 때 호출됩니다

관리하는 ScriptableObjectAssets이 많아질수록(이하 SO), 값을 빼먹거나 관리되지 못하는 SO 내의 데이터가 발생할 수 도 있습니다, 에디터 환경에서 OnValidate()를 이용하여 관리해보도록 하겠습니다

 

 

 

데이터의 일부만 가져왔습니다, 대표격으로 itemCode가 제대로 입력되어있는지 확인하기 위하여 아래와 같이 코드를 작성합니다

public int itemCode;


#if UNITY_EDITOR
    private void OnValidate()
    {
        ValidateHelper.ValidateCheckItemCode(this, nameof(itemCode), itemCode);
        ValidateHelper.ValidateCheckItemCode(A, B, C);
    }
#endif

A : 현재 스크립트를 의미합니다

B : 변수 이름을 문자열로 반환한 값 입니다

C : 검증 대상이 되는 변수 입니다

 

 

 

 

 

ValidateCheckItemCode


itemCode의 데이터 형식이 int이고 기본 값은 0 이기에 만약 SO의 itemCode가 0 이라면 디버그를 출력하도록 해주었습니다

public static class ValidateHelper
{
    /// <summary>
    /// 아이템 SO의 데이터 무결성 검증
    /// </summary>
    public static bool ValidateCheckItemCode(Object p_Object, string p_FieldName, int p_codeToCheck)
    {
        if (p_codeToCheck == 0)
        {
            Debug.Log($"{p_FieldName} 변수가 비어있고 반드시 작성되어야 합니다. Assets 이름은 {p_Object.name.ToString()}입니다");
            return true;
        }
        
        return false;
    }

 

 

 

 

 

결과


temCode가 작성되어있지 않은 경우

 

 

 

아래와 같이 디버그가 출력됩니다