示例#1
0
    // Update is called once per frame
    void Update()
    {
        // check for movement input
        if (!lockMovement && playerControllerBase)
        {
            Vector2 input = playerControllerBase.GetInput();
            if (input.magnitude > 1)
            {
                input = input.normalized;
            }
            float inputX = input.x;
            float inputY = input.y;

            Vector3 convertedX = Camera.main.transform.right * inputX;
            convertedX.y = 0;
            float oldXMagnitude = Mathf.Abs(inputX);
            float newXMagnitude = convertedX.magnitude;
            if (newXMagnitude == 0)
            {
                convertedX = Vector3.zero;
            }
            else
            {
                convertedX *= oldXMagnitude / newXMagnitude;
            }


            Vector3 convertedY = Camera.main.transform.up * inputY;
            convertedY.y = 0;
            float oldYMagnitude = Mathf.Abs(inputY);
            float newYMagnitude = convertedY.magnitude;
            if (newYMagnitude == 0)
            {
                convertedY = Vector3.zero;
            }
            else
            {
                convertedY *= oldYMagnitude / newYMagnitude;
            }

            this.Move(convertedX + convertedY);
        }

        if (!playerControllerBase)
        {
            gameObject.SetActive(false);
        }
    }