public void MovementUpdate() { movementVector = new Vector3(); if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow)) { movementVector += new Vector3(0, 0, 1); } if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow)) { movementVector += new Vector3(0, 0, -1); } if (Input.GetKey(KeyCode.A)) { movementVector += new Vector3(-1, 0, 0); } if (Input.GetKey(KeyCode.D)) { movementVector += new Vector3(1, 0, 0); } if (Input.GetKey(KeyCode.Space)) { Jump = true; } movementVector = -movementVector.normalized; movementVector.Scale(v3FromFloat(WalkSpeed)); RootCamera mainCamera = GameObject.FindObjectOfType <RootCamera>(); Quaternion camRotation = mainCamera.cameraBase.transform.rotation; movementVector = camRotation * movementVector; currentMovement = Vector3.Lerp(movementVector, currentMovement, 0.1f); Rigidbody mover = character.GetComponent <Rigidbody>(); if (currentMovement.magnitude > 0.1f) { if (shouldClimbStairs()) { isClimbing = true; mover.velocity = new Vector3(currentMovement.x, WalkSpeed, currentMovement.z); } else { isClimbing = false; mover.velocity = new Vector3(currentMovement.x, mover.velocity.y, currentMovement.z); } } else { mover.velocity = new Vector3(0, mover.velocity.y, 0); } if (RotationMode == RotationType.CameraRelative) { currentDesiredRot = Quaternion.Euler(0, camRotation.eulerAngles.y, 0); } else if (mover.velocity.magnitude > 1) { if (currentMovement.magnitude > 0.1f) { Quaternion currentRotation = character.transform.rotation; Quaternion movementRotation = Quaternion.LookRotation(-cancelY(currentMovement)); float angleBetween = Quaternion.Angle(currentRotation, movementRotation); currentDesiredRot = Quaternion.RotateTowards(currentRotation, movementRotation, angleBetween / 10); } } character.transform.rotation = currentDesiredRot; }
public void Start() { myCamera = gameObject.GetComponent <Camera>(); myRootCamera = gameObject.GetComponent <RootCamera>(); }