static void SetAnimation(Viewer4 v, Vector4 t) { _fromP = v.transform4.position; _time = EditorApplication.timeSinceStartup; _targetP = t; _viewer = v; EditorApplication.update += TransformViewerP; }
static void SetAnimation(Viewer4 v, Euler4 t) { _fromR = v.transform4.rotation.ToEuler(); _time = EditorApplication.timeSinceStartup; _targetR = t; _viewer = v; EditorApplication.update += TransformViewerR; }
static void HandleRotation(Transform4 t, Viewer4 v, Vector3 p, Quaternion orient) { var v_ = Handles.RotationHandle(orient, p); if (orient != v_) { Undo.RecordObject(t, "Transform4 Rotation"); t.Rotate(v_ * Quaternion.Inverse(orient), Space4.View); } }
static void HandlePosition(Transform4 t, Viewer4 v, Vector3 p, Quaternion orient) { var v_ = Handles.PositionHandle(p, Tools.pivotRotation == PivotRotation.Global ? Quaternion.identity : orient); if (p != v_) { Undo.RecordObject(t, "Transform4 Position"); t.Translate((UnityEngine.Vector4)(v_ - p), Space4.View); } }
static void HandleScale(Transform4 t, Viewer4 v, Vector3 p, Quaternion orient) { var r = v.worldToViewerMatrix.rotation * t.localScale; var r_ = Handles.ScaleHandle(r, p, orient, HandleUtility.GetHandleSize(p)); if (r != r_) { if (IsScaledUniformly(r, r_)) { r = new Vector4(r_.x, r_.y, r_.z, r.w * r_.x / r.x); } else { r = new Vector4(r_.x, r_.y, r_.z, r.w); } Undo.RecordObject(t, "Transform4 Scale"); t.localScale = v.viewerToWorldMatrix * r; } }