Hello, I’ve been following a tutorial on how to move and animate movements and I’m not sure whether it’s a scripting issue or something external to the code. The script should make my character move, but it doesn’t. It animates okay and rotates in the direction I want but no matter what line of code I seem to change, it never seems to want to move in that direction.
Here’s my stuff outside the code just in case it’s anything in there.
And here’s my code:
using UnityEngine;
public class Move : MonoBehaviour
{
public float speed;
[SerializeField]
private float rotationSpeed;
[SerializeField]
private float jumpSpeed;
[SerializeField]
private float jumpButtonGracePeriod;
[SerializeField]
private float jumpHorizontalSpeed;
[SerializeField]
private Transform cameraTransform;
private Animator animator;
private CharacterController characterController;
private float ySpeed;
private float originalStepOffset;
private float? lastGroundedTime;
private float? jumpButtonPressedTime;
private bool isJumping;
private bool isGrounded;
// Start is called before the first frame update
void Start()
{
animator = GetComponent<Animator>();
characterController = GetComponent<CharacterController>();
originalStepOffset = characterController.stepOffset;
}
// Update is called once per frame
void Update()
{
float horizontalInput = Input.GetAxis("Horizontal");
float verticalInput = Input.GetAxis("Vertical");
Vector3 movementDirection = new Vector3(horizontalInput, 0, verticalInput);
float inputMagnitude = Mathf.Clamp01(movementDirection.magnitude);
movementDirection.Normalize();
if (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift))
{
inputMagnitude /= 2;
}
animator.SetFloat("Input Magnitude", inputMagnitude, 0.05f, Time.deltaTime);
movementDirection = Quaternion.AngleAxis(cameraTransform.rotation.eulerAngles.y, Vector3.up) * movementDirection;
movementDirection.Normalize();
ySpeed += Physics.gravity.y * Time.deltaTime;
if (characterController.isGrounded)
{
lastGroundedTime = Time.time;
}
if (Input.GetButtonDown("Jump"))
{
jumpButtonPressedTime = Time.time;
}
if (Time.time - lastGroundedTime <= jumpButtonGracePeriod)
{
characterController.stepOffset = originalStepOffset;
ySpeed = -0.5f;
animator.SetBool("isGrounded", true);
isGrounded = true;
animator.SetBool("isJumping", false);
isJumping = false;
animator.SetBool("isFalling", false);
if (Time.time - jumpButtonPressedTime <= jumpButtonGracePeriod)
{
ySpeed = jumpSpeed;
animator.SetBool("isJumping", true);
isJumping = true;
jumpButtonPressedTime = null;
lastGroundedTime = null;
}
}
else
{
characterController.stepOffset = 0;
animator.SetBool("isGrounded", false);
isGrounded = false;
if ((isJumping && ySpeed < 0) || ySpeed < -2)
{
animator.SetBool("isFalling", true);
}
}
if (movementDirection != Vector3.zero)
{
animator.SetBool("isSkating", true);
Quaternion toRotation = Quaternion.LookRotation(movementDirection, Vector3.up);
transform.rotation = Quaternion.RotateTowards(transform.rotation, toRotation, rotationSpeed * Time.deltaTime);
}
else
{
animator.SetBool("isSkating", false);
}
if (isGrounded == false)
{
Vector3 velocity = movementDirection * inputMagnitude * jumpHorizontalSpeed;
velocity.y = ySpeed;
characterController.Move(velocity * Time.deltaTime);
}
}
private void OnAnimatorMove()
{
if (isGrounded)
{
Vector3 velocity = animator.deltaPosition;
velocity.y = ySpeed * Time.deltaTime;
characterController.Move(velocity);
}
}
private void OnApplicationFocus(bool focus)
{
if (focus)
{
Cursor.lockState = CursorLockMode.Locked;
}
else
{
Cursor.lockState = CursorLockMode.None;
}
}
}