상세 컨텐츠

본문 제목

유니티 OnValidate()

유니티/기능

by MJ_119 2024. 12. 21. 00:23

본문

1. OnValidate의 호출 시점

  • Inspector에서 변경: Inspector 창에서 스크립트의 속성이 수정될 때마다 OnValidate가 호출됩니다
  • ScriptableObject: ScriptableObject가 로드되거나 인스펙터에서 값이 변경될 때 OnValidate가 호출됩니다

 

2. OnValidate의 사용 사례

  • 유효성 검사: 속성이 유효한 범위 내에 있는지 확인하는 데 사용할 수 있습니다. 예를 들어, health가 maxHealth보다 크지 않도록 하기 위해 OnValidate를 사용할 수 있습니다
  • 자동 업데이트: 속성이 변경될 때 다른 속성을 자동으로 업데이트하는 데 사용할 수 있습니다. 예를 들어, healthGage가 변경될 때 TargetObject의 anchorMax를 업데이트하는 코드를 OnValidate에 추가할 수 있습니다

 

예시

using UnityEngine;

public class Health : MonoBehaviour
{
    [SerializeField] private int health;
    [SerializeField] private int maxHealth;

    private void OnValidate()
    {
        if (health > maxHealth)
        {
            health = maxHealth;
        }
    }
}

 

이 코드는 health maxHealth보다 크지 않도록 하기 위해 OnValidate를 사용합니다

 

 

 

 

ScriptableObject는 Inspector에서 값이 변경될 때마다 OnValidate를 호출합니다. 이를 사용하여 ScriptableObject의 데이터를 유효성 검사하거나 자동으로 업데이트할 수 있습니다.

using UnityEngine;

[CreateAssetMenu(fileName = "ItemDatabase", menuName = "Inventory/ItemDatabase")]
public class ItemDatabase : ScriptableObject
{
    public List<Item> items;

    private void OnValidate()
    {
        // 유효성 검사 또는 자동 업데이트 코드를 여기에 추가합니다.
        // 예를 들어, items가 null이 아닌지 확인하고, items가 비어있지 않은지 확인할 수 있습니다.
        if (items == null)
        {
            items = new List<Item>();
        }
        if (items.Count == 0)
        {
            Debug.LogError("Item list is empty.");
        }
    }
}

 

이 코드는 ItemDatabase items가 null이 아닌지 확인하고, 비어있지 않은지 확인하는 예시입니다

 

 

참고 영상 : 

https://www.youtube.com/watch?v=G4jVTBA49Rc

 

 

 

 

 

관련글 더보기