Skip to content

Unity editor position handle utility for the fields like Vector3, not GameObject.

License

MIT, Unknown licenses found

Licenses found

MIT
LICENSE
Unknown
LICENSE.meta
Notifications You must be signed in to change notification settings

DevSlem/unity-move-tool

Repository files navigation

Move-Tool for Unity

Move-Tool is a tool that makes you use position handles for vector in unity editor scene view.
You can use move-tool so easily by just defining some attributes.

Note that it require C# 7 or higher.
If you want to use it in a lower version, you need to modify pattern matching(only can use in C# 7 or higher) part in MoveToolEditor class to if statement and simple type checking, but it'll make you tired.

Releases

It is recommended to use a latest, stable version. main version is unstable because it's under active development.

Version Release Date Source C# .Net Compatibility
main(unstable) -- main 7.0 or higher .Net Standard 2.0 or higher
Release 3.1.0 2022-09-16 release-3.1.0 7.0 or higher .Net standard 2.0 or higher

Latest Update

  • You can use Move-Tool for the float field.
  • Arrow of z direction of Move-Tool for the Vector2 field has been removed. To be more intuitive!

Installation

You can select 2 installation methods.

  • Clone the repository and add package.json file to your project through Unity Package Manager.
  • You can add directly the package from git URL to your project through Unity Package Manager. See the Installing from a Git URL.

Basic usage

You just define MoveTool attribute for a field for which you want to use position handle.
The field is okay whether it's vector or vector collection.
It works only if the type of the field is one of the Vector3, Vector2, float type.

If you want to use attributes about move-tool, you must declare the following using directive.

using DevSlem;

Note that the any type that you want to use Move-Tool, it must be serializable.

Vector3

public class MoveToolSample : MonoBehaviour
{
    [MoveTool] public Vector3 vector;
}

Vector2

[MoveTool] public Vector2 vector2;

Note that Vector2 type field only moves along the x and y axes.

Float

[MoveTool] public float floatField;

Note that float type field only moves along the x axis.

Collection

You can use move-tool to Array or List<T> collection where each element is vector value.
While you click the shift key, you can control all elements of the list at once.

[MoveTool] public List<Vector3> vectorCollection = new List<Vector3>(); // Vector3[] array is also okay.

Non-Public field

You can only use move-tool for a serializable vector. So, if you want to use move-tool for a non-public field like private or protected, you have to define UnityEngine.SerializeField attribute for the field.
See the following code.

[SerializeField, MoveTool] private Vector3 privateVector;
[SerializeField, MoveTool] private List<Vector3> privateCollection = new List<Vector3>();

MoveToolAttribute Properties

MoveToolAttribute has the following properties.

  • PositionMode sets the coordinate space of the vector. If you set it to MoveToolPosition.Local enum value, the vector works in local coordinate. Default is world coordinate.
  • LabelMode is a enum flag property. You can display the move-tool label on unity editor through it. By default, the label is displayed on both scene and inspector view.
  • Label is a custom label that you want to display your own label instead of the default label. Default label is the field name for display.

Sample Code

[MoveTool(PositionMode = MoveToolPosition.Local, LabelMode = MoveToolLabel.SceneView, Label = "My Custom Label")]
public Vector3 customPropertyVector;

Move-Tool available custom type

If you want to use move-tool for a custom type field which declare vector fields, you must define System.Serializable and MoveToolAvailable attributes for the type.
The custom type is okay whether class or struct.

public class MoveToolSample : MonoBehaviour
{
    [MoveTool] public List<CustomClass> customClasses = new List<CustomClass>();
}

[Serializable, MoveToolAvailable]
public class CustomClass
{
    public List<Vector3> vectors = new List<Vector3>();
}

Serialize

A custom type for which you define MoveToolAvailable attribute must be serializable. So, if you don't want to use move-tools for the fields which is declared in the custom type, you should set the fields to be non-serializable.

Note that you can only use move-tool for a serialized field.

See the following example.

[Serializable, MoveToolAvailable]
public class CustomClass
{
    public Vector3 publicVector; // Can use move-tool.
    [SerializeField] private Vector3 serializedPrivateVector; // Can use move-tool.
    [NonSerialized] public Vector3 nonSerializedPublicVector; // Can't use move-tool.
    private Vector3 privateVector; // Can't use move-tool.
}

Public vector is always serialized. If you don't want to use move-tool for a public field, you need to define System.NonSerialized attribute for it.
Non-public vector isn't always serialized. If you want to use move-tool for a non-public field, you need to define UnityEngine.SerializeField attribute for it.

Editor

Now, you don't have to worry about editor conflict problem. It is solved.
You don't need to create MoveToolEditor instance for using concurrently AnotherEditor with it.
You just use normally MoveTool attribute.

About

Unity editor position handle utility for the fields like Vector3, not GameObject.

Topics

Resources

License

MIT, Unknown licenses found

Licenses found

MIT
LICENSE
Unknown
LICENSE.meta

Stars

Watchers

Forks

Languages