Использование атрибута RangeAttribute в Unity с C#: методы и примеры кода

Атрибут RangeAttribute в Unity используется для определения диапазона допустимых значений для поля в редакторе Unity. Он ограничивает ввод указанным минимальным и максимальным значением. Вот несколько методов и примеров кода, связанных с использованием RangeAttribute в Unity с C#:

Метод 1: использование атрибута RangeAttribute в сериализованном поле

using UnityEngine;
public class MyScript : MonoBehaviour
{
    [Range(0f, 100f)]
    public float myFloat;
}

В этом примере поле «myFloat» ограничено диапазоном значений от 0 до 100 в редакторе Unity.

Метод 2: использование атрибута RangeAttribute с ползунком

using UnityEngine;
using UnityEditor;
public class MyScript : MonoBehaviour
{
    [Range(0f, 10f)]
    public float myFloat;
}
[CustomEditor(typeof(MyScript))]
public class MyScriptEditor : Editor
{
    public override void OnInspectorGUI()
    {
        MyScript myScript = (MyScript)target;
        myScript.myFloat = EditorGUILayout.Slider("My Float", myScript.myFloat, 0f, 10f);
    }
}

В этом примере RangeAttribute используется для создания ползунка в редакторе Unity для поля «myFloat», позволяющего пользователю выбирать значение в пределах определенного диапазона.

Метод 3. Использование атрибута RangeAttribute для проверки параметров метода

using UnityEngine;
public class MyScript : MonoBehaviour
{
    public void DoSomething([Range(0, 5)] int value)
    {
        // Method implementation
    }
}

В этом примере RangeAttribute используется для проверки значения параметра метода DoSomething. Значение должно быть от 0 до 5 включительно.

Метод 4: использование атрибута RangeAttribute с ящиком свойств

using UnityEngine;
public class MyScript : MonoBehaviour
{
    [Range(0, 10)]
    public int myInt;
}
#if UNITY_EDITOR
[UnityEditor.CustomPropertyDrawer(typeof(RangeAttribute))]
public class RangeDrawer : UnityEditor.PropertyDrawer
{
    public override void OnGUI(Rect position, UnityEditor.SerializedProperty property, GUIContent label)
    {
        RangeAttribute range = attribute as RangeAttribute;
        if (property.propertyType == UnityEditor.SerializedPropertyType.Float)
        {
            EditorGUI.Slider(position, property, range.min, range.max, label);
        }
        else if (property.propertyType == UnityEditor.SerializedPropertyType.Integer)
        {
            EditorGUI.IntSlider(position, property, (int)range.min, (int)range.max, label);
        }
        else
        {
            EditorGUI.LabelField(position, label.text, "Use Range with float or int.");
        }
    }
}
#endif

В этом примере RangeAttribute используется с настраиваемым ящиком свойств для создания ползунка в редакторе Unity для поля «myInt».