Im using Input Actions which I’m not too familiar with. How would I make it where the character moves where he is looking?
PlayerInput playerInput;
CharacterController characterController;
Animator animator;
Vector2 currentMovementInput;
Vector3 currentMovement;
bool isMovementPressed;
public float rotationFactoredPerFrame = 1f;
public Transform camera;
float turnSmoothVelocity;
void Awake()
{
playerInput = new PlayerInput();
characterController = GetComponent<CharacterController>();
animator = GetComponent<Animator>();
playerInput.CharacterControls.Move.started += OnInputMovement;
playerInput.CharacterControls.Move.canceled += OnInputMovement;
playerInput.CharacterControls.Move.performed += OnInputMovement;
}
void HandleRotation()
{
/* Vector3 postionToLookAt;
postionToLookAt.x = currentMovement.x;
postionToLookAt.y = 0;
postionToLookAt.z = currentMovement.z;
Quaternion currentRotation = transform.rotation;
if(isMovementPressed)
{
Quaternion targerRotation = Quaternion.LookRotation(postionToLookAt);
transform.rotation = Quaternion.Slerp(currentRotation, targerRotation, rotationFactoredPerFrame * Time.deltaTime);
} */
if(isMovementPressed)
{
float targetAngle = Mathf.Atan2(currentMovement.x, currentMovement.z) * Mathf.Rad2Deg + camera.eulerAngles.y;
float angle = Mathf.SmoothDampAngle(transform.eulerAngles.y, targetAngle, ref turnSmoothVelocity, rotationFactoredPerFrame);
transform.rotation = Quaternion.Euler(0f, targetAngle, 0f);
}
}
void OnInputMovement(InputAction.CallbackContext context)
{
currentMovementInput = context.ReadValue<Vector2>();
currentMovement.x = currentMovementInput.x;
currentMovement.z = currentMovementInput.y;
isMovementPressed = currentMovementInput.x != 0 || currentMovementInput.y != 0;
}
void HandleAnimation()
{
bool isWalking = animator.GetBool("isWalking");
bool isRunning = animator.GetBool("isRunning");
if(isMovementPressed && !isWalking)
{
animator.SetBool("isWalking", true);
}
else if(!isMovementPressed && isWalking)
{
animator.SetBool("isWalking", false);
}
}
void Update()
{
HandleAnimation();
HandleRotation();
characterController.Move(currentMovement * Time.deltaTime);
}
void OnEnable()
{
playerInput.CharacterControls.Enable();
}
void OnDisable()
{
playerInput.CharacterControls.Disable();
}
}