유니티/기능
유니티 OnValidate()
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