A bounded (i.e., with a minimum and maximum) range attribute for Unity's Vector2
and Vector2Int
fields that draws fields as min/max range sliders, easing the definition of bounded ranges on the inspector.
- Intuitive, compact inspector representation.
- Support for Unity's
Vector2
andVector2Int
types. - Easy to use: just add the attribute to a serialized field of a supported type.
- Custom floating-point decimal places (0 to 3).
- Error prevention. Unlike using separate fields for minimum and maximum, value integrity is guaranteed (e.g., the minimum will never be greater than the maximum) by the inspector.
- Uses built-in Unity's
EditorGUILayout.MinMaxSlider
under the hood.
To use the attribute, simply add it to a serialized field of a supported type (Vector2
or Vector2Int
). Its inspector representation will be a MinMaxSlider
, a slider than can be used to represent a range within minimum and maximum limits. The left handle controls the vector's x
component and the right handle controls the vector's
When using the attribute on a field of type Vector2
, its constructor takes 3 arguments:
minLimit
: the minimum possible value (lower bound).maxLimit
: the maximum possible value (upper bound).decimals
: how many decimal places the inspector should display. Default is 1 and values must be in the [0, 3] range.
For example, the field below has minLimit
equal to 0, maxLimit
equal to 10 and decimals
equal to 3:
[MinMaxRange(0f, 10f, 3)]
[SerializeField] private Vector2 _optimalSpeed = new (3.141f, 5.789f);
And its inspector representation is:
If decimals
is 2 (MinMaxRange(0f, 10f, 2)
):
The default value of decimals
is 1, so we might as well omit the parameter if we would like to display only 1 decimal place:
[MinMaxRange(0f, 10f)]
[SerializeField] private Vector2 _optimalSpeed = new (3.141f, 5.789f);
Keep in mind that the decimals
parameter only controls how the value labels will be displayed on the inspector. It doesn't control the values' precision.
When using the attribute on a field of type Vector2Int
, its constructor takes 2 arguments, similar to RangeAttribute
's parameters:
minLimit
: the minimum possible value (lower bound).maxLimit
: the maximum possible value (upper bound).
For example, the field below has minLimit
equal to 0 and maxLimit
equal to 10:
[MinMaxRange(0, 10)]
[SerializeField] private Vector2Int _rewardRange = new(2, 4);
And its inspector representation is:
The first step is to import the library into your Unity project. There are three ways to do so:
- Via the Asset Store.
- Via the Package Manager:
Click on the image below to visit the package's page on the Unity Asset Store. One there, follow the instructions to import it into your project.
This approach uses Unity's Package Manager to add the attribute to your project using the repo's git URL. To do so, navigate to Window > Package Manager
in Unity. Then click on the +
and select "Add package from git URL":
Next, enter the following in the "URL" input field to install the latest version of the attribute:
https://github.com/lazysquirrellabs/min_max_range_attribute.git?path=Assets/Lazy Squirrel Labs/MinMaxRangeAttribute#latest
Finally, click on the "Add" button. The importing process should start automatically. Once it's done, the attribute can be used in your project.
Min/max Range Attribute is available as a package on OpenUPM. To import it into your project via the command line, run the following command:
openupm add com.lazysquirrellabs.minmaxrangeattribute
Once the importing process is complete, the attribute can be used in your project.
The Min/max Range Attribute requires Unity 2021.3.X or above, its target API compatibility level is .NET Standard 2.1, and it does not depend on any other packages.
If you would like to report a bug, please create an issue. If you would like to contribute with bug fixing or small improvements, please open a Pull Request. If you would like to contribute with a new feature, contact the developer.
Use the issues page if there's a problem with your setup, if something isn't working as expected, or if you would like to ask questions about the tool and its usage.
Min/max Range Attribute is distributed under the terms of the MIT license. For more information, check the LICENSE file in this repository.