void OnRelayCorrectly()
    {
        //old player
        PlayerViewObjectTransform.parent = manager.instance.allBeadArray[2].transform;
        manager.instance.hitRightBead();

        PlayerViewObjectTransform        = manager.instance.NextCharTrans;
        manager.instance.NextCharTrans   = null;
        PlayerViewObjectTransform.parent = null;
        CharStatus = CharStatusEnum.Normal;
    }
    void SPCounting()
    {
        float CurvedVal = Curve.Evaluate(FPSS.instance.FinshPerSpecifySec);

        float val = CurvedVal <= 0 ? -5 : CurvedVal;

        val *= multiple;
        SP  += (SPRecoverPerSec - val) * Time.deltaTime;
        SP   = MyClamp(SP, 0, MaxSP);

        if (SP <= 0)
        {
            CharStatus = CharStatusEnum.FallenDown;
            //SP = 50;
        }
    }
    void StatusAdmin()
    {
        FirstTimeEntry = CharStatusCopy != CharStatus;
        CharStatusCopy = CharStatus;
        switch (CharStatus)
        {
        case CharStatusEnum.Normal:
            if (FirstTimeEntry)
            {
            }

            SPCounting();

            break;

        case CharStatusEnum.FallenDown:
            if (FirstTimeEntry)
            {
                PlayerViewObjectTransform.eulerAngles = new Vector3(0, 0, -35);
                FallenDownTimer = 0;
            }

            FallenDownTimer += Time.deltaTime;
            if (FallenDownTimer >= 1)
            {
                PlayerViewObjectTransform.eulerAngles = new Vector3(0, 0, 0);
                CharStatus = CharStatusEnum.Normal;
            }
            break;

        case CharStatusEnum.Embrace:
            if (FirstTimeEntry)
            {
                EmbraceDecideUIView.instance.SetOpen();
            }

            if (Input.GetKeyDown(KeyCode.Space))
            {
                switch (EmbraceDecide.instance.GetIsHitDecideArea())     //懶
                {
                case "PREFECT":
                    SP = MaxSP;
                    OnRelayCorrectly();
                    break;

                case "Good":
                    SP += MaxSP * 0.35f;

                    OnRelayCorrectly();

                    break;

                case "MISS":
                    OnRelayCorrectly();
                    manager.instance.failhit();
                    break;

                default:
                    break;
                }


                EmbraceDecideUIView.instance.SetClose();
            }
            break;

        default:
            break;
        }
    }
 // Start is called before the first frame update
 void Start()
 {
     SP             = MaxSP;
     CharStatusCopy = CharStatus;
     globalUpdateManager.instance.registerUpdateDg(ToUpdate);
 }