这款在商店上卖35美元的插件,实用性非常强。
有需要的可以直接在我的CSDN库里下载:
Unity3DRuntimeTransformGizmos运行时移动、旋转、缩放模型的插件工程文件-Swift文档类资源-CSDN下载
将插件导入,直接打开案例的scene
选中物体,按W、E、R分别切换移动、缩放、旋转操作
所有快捷键的配置如下:
所有的操作入口代码:
public TransformSpace space = TransformSpace.Global;
public TransformType transformType = TransformType.Move;
public TransformPivot pivot = TransformPivot.Pivot;
public CenterType centerType = CenterType.All;
public ScaleType scaleType = ScaleType.FromPoint;
//These are the same as the unity editor hotkeys
public KeyCode SetMoveType = KeyCode.W;
public KeyCode SetRotateType = KeyCode.E;
public KeyCode SetScaleType = KeyCode.R;
//public KeyCode SetRectToolType = KeyCode.T;
public KeyCode SetAllTransformType = KeyCode.Y;
public KeyCode SetSpaceToggle = KeyCode.X;
public KeyCode SetPivotModeToggle = KeyCode.Z;
public KeyCode SetCenterTypeToggle = KeyCode.C;
public KeyCode SetScaleTypeToggle = KeyCode.S;
public KeyCode translationSnapping = KeyCode.LeftControl;
public KeyCode AddSelection = KeyCode.LeftShift;
public KeyCode RemoveSelection = KeyCode.LeftControl;
public KeyCode ActionKey = KeyCode.LeftShift; //Its set to shift instead of control so that while in the editor we dont accidentally undo editor changes =/
public KeyCode UndoAction = KeyCode.Z;
public KeyCode RedoAction = KeyCode.Y;
public Color xColor = new Color(1, 0, 0, 0.8f);
public Color yColor = new Color(0, 1, 0, 0.8f);
public Color zColor = new Color(0, 0, 1, 0.8f);
public Color allColor = new Color(.7f, .7f, .7f, 0.8f);
public Color selectedColor = new Color(1, 1, 0, 0.8f);
public Color hoverColor = new Color(1, .75f, 0, 0.8f);
public float planesOpacity = .5f;
//public Color rectPivotColor = new Color(0, 0, 1, 0.8f);
//public Color rectCornerColor = new Color(0, 0, 1, 0.8f);
//public Color rectAnchorColor = new Color(.7f, .7f, .7f, 0.8f);
//public Color rectLineColor = new Color(.7f, .7f, .7f, 0.8f);
public float movementSnap = .25f;
public float rotationSnap = 15f;
public float scaleSnap = 1f;
public float handleLength = .25f;
public float handleWidth = .003f;
public float planeSize = .035f;
public float triangleSize = .03f;
public float boxSize = .03f;
public int circleDetail = 40;
public float allMoveHandleLengthMultiplier = 1f;
public float allRotateHandleLengthMultiplier = 1.4f;
public float allScaleHandleLengthMultiplier = 1.6f;
public float minSelectedDistanceCheck = .01f;
public float moveSpeedMultiplier = 1f;
public float scaleSpeedMultiplier = 1f;
public float rotateSpeedMultiplier = 1f;
public float allRotateSpeedMultiplier = 20f;
public bool useFirstSelectedAsMain = true;
//If circularRotationMethod is true, when rotating you will need to move your mouse around the object as if turning a wheel.
//If circularRotationMethod is false, when rotating you can just click and drag in a line to rotate.
public bool circularRotationMethod;
//Mainly for if you want the pivot point to update correctly if selected objects are moving outside the transformgizmo.
//Might be poor on performance if lots of objects are selected...
public bool forceUpdatePivotPointOnChange = true;
public int maxUndoStored = 100;
public bool manuallyHandleGizmo;
public LayerMask selectionMask = Physics.DefaultRaycastLayers;
public Action onCheckForSelectedAxis;
public Action onDrawCustomGizmo;
public Camera myCamera {get; private set;}
public bool isTransforming {get; private set;}
public float totalScaleAmount {get; private set;}
public Quaternion totalRotationAmount {get; private set;}
public Axis translatingAxis {get {return nearAxis;}}
public Axis translatingAxisPlane {get {return planeAxis;}}
public bool hasTranslatingAxisPlane {get {return translatingAxisPlane != Axis.None && translatingAxisPlane != Axis.Any;}}
public TransformType transformingType {get {return translatingType;}}
public Vector3 pivotPoint {get; private set;}
Vector3 totalCenterPivotPoint;
public Transform mainTargetRoot {get {return (targetRootsOrdered.Count > 0) ? (useFirstSelectedAsMain) ? targetRootsOrdered[0] : targetRootsOrdered[targetRootsOrdered.Count - 1] : null;}}
AxisInfo axisInfo;
Axis nearAxis = Axis.None;
Axis planeAxis = Axis.None;
TransformType translatingType;
AxisVectors handleLines = new AxisVectors();
AxisVectors handlePlanes = new AxisVectors();
AxisVectors handleTriangles = new AxisVectors();
AxisVectors handleSquares = new AxisVectors();
AxisVectors circlesLines = new AxisVectors();
//We use a HashSet and a List for targetRoots so that we get fast lookup with the hashset while also keeping track of the order with the list.
List<Transform> targetRootsOrdered = new List<Transform>();
Dictionary<Transform, TargetInfo> targetRoots = new Dictionary<Transform, TargetInfo>();
HashSet<Renderer> highlightedRenderers = new HashSet<Renderer>();
HashSet<Transform> children = new HashSet<Transform>();
List<Transform> childrenBuffer = new List<Transform>();
List<Renderer> renderersBuffer = new List<Renderer>();
List<Material> materialsBuffer = new List<Material>();
WaitForEndOfFrame waitForEndOFFrame = new WaitForEndOfFrame();
Coroutine forceUpdatePivotCoroutine;
static Material lineMaterial;
static Material outlineMaterial;
就连基本的UndoRedo功能都已经做好了。
有了这些基础,去扩展自己的功能那就非常轻松了。
整个工程的地址也上传给有需要的朋友学习。
Unity3DRuntimeTransformGizmos运行时移动、旋转、缩放模型的插件工程文件-Swift文档类资源-CSDN下载