예제 #1
0
 static void SetAnimation(Viewer4 v, Vector4 t)
 {
     _fromP   = v.transform4.position;
     _time    = EditorApplication.timeSinceStartup;
     _targetP = t;
     _viewer  = v;
     EditorApplication.update += TransformViewerP;
 }
예제 #2
0
 static void SetAnimation(Viewer4 v, Euler4 t)
 {
     _fromR   = v.transform4.rotation.ToEuler();
     _time    = EditorApplication.timeSinceStartup;
     _targetR = t;
     _viewer  = v;
     EditorApplication.update += TransformViewerR;
 }
예제 #3
0
        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);
            }
        }
예제 #4
0
        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);
            }
        }
예제 #5
0
        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;
            }
        }