Question by
Blaize_J · Aug 11, 2021 at 09:44 PM ·
cameracharacter controller
My player and camera are being set to crazy values like "-infnity"
I've been on and off trying to figure this out for months
// Update is called once per frame
void Update() {
isGrounded = Physics.CheckSphere(groundCheck.position, groundDistance, groundMask);
if(isGrounded && velocity.y < 0) {
controller.slopeLimit = 45.0f;
velocity.y = -2f;
}
if ((controller.collisionFlags & CollisionFlags.Above) != 0) {
velocity.y = -2f;
}
float horizontal = Input.GetAxisRaw("Horizontal");
float vertical = Input.GetAxisRaw("Vertical");
Vector3 direction = new Vector3(horizontal, 0f, vertical).normalized;
// Player gravity
velocity.y += gravity * Time.deltaTime;
controller.Move(velocity * Time.deltaTime);
if(direction.magnitude >= 0.1f) {
// Get angle from 0 to the direction of the player to make the player turn, as well as adding rotation from the camera
float targetAngle = Mathf.Atan2(direction.x, direction.z) * Mathf.Rad2Deg + cam.eulerAngles.y;
// Smooth the rotation
float angle = Mathf.SmoothDampAngle(transform.eulerAngles.y, targetAngle, ref turnSmoothVelocity, turnSmoothTime);
// If not facing 0,0,0 (this should solve a crash)
if (direction != Vector3.zero) {
// Apply rotation
transform.rotation = Quaternion.Euler(0f, angle, 0f);
}
// Move taking account of camera rotation
Vector3 moveDir = Quaternion.Euler(0f, targetAngle, 0f) * Vector3.forward;
// Move normally or Run
if (!Input.GetKey(KeyCode.LeftShift)) {
controller.Move(moveDir.normalized * speed * Time.deltaTime);
squirrelAnimator.speed = 1.0f;
// Stop running particles
runParticles.Stop();
} else if (currentStamina > 0) {
controller.Move(moveDir.normalized * speed * Time.deltaTime * runMultiplier);
squirrelAnimator.speed = 1.5f;
if (showSprintEffect) {
// Play running particles
runParticles.Play();
}
// If not set to infinite stamina in the editor
if (!infiniteStamina) {
// Show and spend stamina
staminaBarUI.SetActive(true);
UseStamina();
} else {
Debug.Log("INFINITE STAMINA MODE.");
}
} else if (currentStamina <= 0) {
controller.Move(moveDir.normalized * speed * Time.deltaTime);
squirrelAnimator.speed = 1.0f;
// Stop running particles
runParticles.Stop();
}
// Play walk animation
squirrelAnimator.SetBool("IsWalking", true);
// Reset bored time
timeSinceLastBored = 0;
} else {
// Play idle animation
squirrelAnimator.SetBool("IsWalking", false);
// Play bored animation if bored
timeSinceLastBored += Time.deltaTime;
if (timeSinceLastBored >= timeToGetBored) {
squirrelAnimator.SetTrigger("Bored");
timeSinceLastBored = 0;
}
}
}
Some of the lines in question for the errors shown in the first screenshot are:
controller.Move(velocity * Time.deltaTime);
controller.Move(moveDir.normalized * speed * Time.deltaTime);
controller.Move(moveDir.normalized * speed * Time.deltaTime * runMultiplier);
The second screenshot is complaining about the cinimachine camera on the player being nan because the values are too high or something.
unknown-2.png
(110.4 kB)
unknown.png
(263.7 kB)
Comment