// 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); } }