void StateTransition(ScreenJoystick.StateEnum lastState, ScreenJoystick.StateEnum curState)
    {
        switch (curState)
        {
        case ScreenJoystick.StateEnum.Idle:
            Hide();
            break;

        case ScreenJoystick.StateEnum.InvalidDragging:
        case ScreenJoystick.StateEnum.ValidDragging:
            MinCircle.SetActive(true);
            FallSpot.SetActive(true);
            DragSpot.SetActive(true);
            break;

        default:
            throw new ArgumentOutOfRangeException();
        }
    }
 void Update()
 {
     if (!CenterObject || !Joystick)
     {
         return;
     }
     transform.position = CenterObject.position.SetV3Y(0.01f);
     if (Joystick.State != _lastState)
     {
         StateTransition(_lastState, Joystick.State);
         _lastState = Joystick.State;
     }
     if (Joystick.State != ScreenJoystick.StateEnum.Idle)
     {
         FallSpot.SetActive(Joystick.IsValidDrag);
         FallSpot.transform.position = transform.position + Joystick.WorldActualDisplacement;
         DragSpot.transform.position = transform.position + Joystick.WorldAimingDisplacement;
     }
 }