void OnSceneGUI()
    {
        _senses = target as MovementSenses;

        Transform t = _senses.transform;

        MovementSenses.SenseOffsets offsets = _senses.offsets;

        offsets.footOffset = Handles.PositionHandle( t.position + offsets.footOffset, Quaternion.identity ) - t.position;
        Handles.Label(t.position + offsets.footOffset, "Foot Check");

        offsets.handOffsetP1 = Handles.PositionHandle( t.position + offsets.handOffsetP1, Quaternion.identity ) - t.position;
        offsets.handOffsetP2 = Handles.PositionHandle( t.position + offsets.handOffsetP2, Quaternion.identity ) - t.position;
        Handles.Label(t.position + offsets.handOffsetP1, "Hand Wall Check");

        offsets.handOffsetP2.y = offsets.handOffsetP1.y;

        offsets.aboveHandOffset = Handles.PositionHandle( t.position + offsets.aboveHandOffset, Quaternion.identity ) - t.position;
        Handles.Label(t.position + offsets.aboveHandOffset, "Above Hand Wall Check");

        offsets.crotchOffset = Handles.PositionHandle( t.position + offsets.crotchOffset, Quaternion.identity ) - t.position;
        Handles.Label(t.position + offsets.crotchOffset, "Crotch Wall Check");

        offsets.groundCheckOffset = Handles.PositionHandle( t.position + offsets.groundCheckOffset, Quaternion.identity ) - t.position;
        Handles.Label(t.position + offsets.groundCheckOffset, "Ground Check");

        _senses.RecalcValues();

        Handles.DrawLine(t.position, t.position + offsets.leftFootOffset);
        Handles.DrawLine(t.position, t.position + offsets.rightFootOffset);

        Handles.DrawLine(t.position + offsets.handOffsetP1, t.position + offsets.handOffsetP2);

        Handles.color = Color.red;
        Handles.DrawLine(t.position + offsets.aboveHandOffset, t.position + offsets.aboveHandOffsetP2);

        Handles.color = Color.blue;
        Handles.DrawLine(t.position + offsets.crotchOffset, t.position + offsets.crotchOffsetP2);

        Handles.DrawLine(t.position + offsets.leftFootOffset, t.position + offsets.leftFootGroundCheck);
        Handles.DrawLine(t.position + offsets.rightFootOffset, t.position + offsets.rightFootGroundCheck);
    }
    public virtual void Awake()
    {
        _groundLayer = LayerMask.NameToLayer("Ground");
        _groundLayerMask = 1 << _groundLayer;
        _transform = transform;
        _rigidbody = rigidbody;
        _collider = collider;
        _bounds = _collider.bounds;

        _senses = GetComponent<MovementSenses>();

        _lastPosition = _transform.position;

        _movementState.AddState( "Nothing" , NothingUpdate );
        _movementState.AddState( "OnGround", OnGroundUpdate );
        _movementState.AddState( "InAir", InAirUpdate );
        _movementState.SetState( "OnGround" );
    }