Пример #1
0
        private void DrawTrackRegions(TrackSnapData trackSnapData, DragTrack_Hinge hingeTrack)
        {
            float minPositionAlong = Mathf.Clamp01(trackSnapData.PositionAlong - trackSnapData.Width);
            float maxPositionAlong = Mathf.Clamp01(trackSnapData.PositionAlong + trackSnapData.Width);

            Quaternion rot   = Quaternion.AngleAxis(hingeTrack.MaxAngle * trackSnapData.PositionAlong, hingeTrack.transform.forward);
            Vector3    endUp = RotatePointAroundPivot(hingeTrack.transform.up, Vector3.zero, rot);

            Handles.color = trackSnapData.GizmoColor;
            Vector3 positionAlongWorld = hingeTrack.GetGizmoPosition(trackSnapData.PositionAlong);

            Handles.DrawSolidDisc(positionAlongWorld, endUp, hingeTrack.discSize / 2f);

            rot   = Quaternion.AngleAxis(hingeTrack.MaxAngle * minPositionAlong, hingeTrack.transform.forward);
            endUp = RotatePointAroundPivot(hingeTrack.transform.right, Vector3.zero, rot);

            Handles.DrawWireArc(hingeTrack.transform.position, hingeTrack.transform.forward, endUp, hingeTrack.MaxAngle * (maxPositionAlong - minPositionAlong), hingeTrack.radius);

            Quaternion minRot = Quaternion.AngleAxis(hingeTrack.MaxAngle * minPositionAlong, hingeTrack.transform.forward);

            endUp = RotatePointAroundPivot(hingeTrack.transform.up, Vector3.zero, minRot);
            Vector3 minPositionAlongWorld = hingeTrack.GetGizmoPosition(minPositionAlong);

            Handles.DrawSolidDisc(minPositionAlongWorld, endUp, hingeTrack.discSize / 4f);

            Quaternion maxRot = Quaternion.AngleAxis(hingeTrack.MaxAngle * maxPositionAlong, hingeTrack.transform.forward);

            endUp = RotatePointAroundPivot(hingeTrack.transform.up, Vector3.zero, maxRot);
            Vector3 maxPositionAlongWorld = hingeTrack.GetGizmoPosition(maxPositionAlong);

            Handles.DrawSolidDisc(maxPositionAlongWorld, endUp, hingeTrack.discSize / 4f);
        }
Пример #2
0
        public void OnSceneGUI()
        {
            DragTrack_Hinge _target = (DragTrack_Hinge)target;

            Handles.color = new Color(_target.handleColour.r / 2f, _target.handleColour.g / 2f, _target.handleColour.b / 2f, _target.handleColour.a);
            Handles.DrawSolidDisc(_target.GetGizmoPosition(0f), _target.transform.up, _target.discSize);
            Handles.color = _target.handleColour;

            if (!_target.Loops)
            {
                Quaternion rot   = Quaternion.AngleAxis(_target.MaxAngle, _target.transform.forward);
                Vector3    endUp = RotatePointAroundPivot(_target.transform.up, Vector3.zero, rot);
                Handles.DrawSolidDisc(_target.GetGizmoPosition(1f), endUp, _target.discSize);
            }

            Handles.DrawWireArc(_target.transform.position, _target.transform.forward, _target.transform.right, _target.MaxAngle, _target.radius);

            if (_target.doSnapping)
            {
                foreach (TrackSnapData trackSnapData in _target.allTrackSnapData)
                {
                    DrawSnapHandles(trackSnapData, _target);
                }
            }
        }