Атрибут 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».