void FixedUpdate()
{
var horizontalMovement = Input.GetAxisRaw("Horizontal");
var verticalMovement = Input.GetAxisRaw("Vertical");
var moveVector = new Vector3(horizontalMovement, 0, verticalMovement);
var magnitude = moveVector.magnitude > 1 ? 1 : moveVector.magnitude;
var speed = magnitude * MoveSpeed;
_currentMoveSpeed = _currentMoveSpeed.MoveTowards(speed, Acceleration);
if (speed > 0)
{
_lastDirection = moveVector;
}
var movement = (speed > 0 ? moveVector : _lastDirection) * _currentMoveSpeed * Time.deltaTime;
var rayDistance = .4f;
var offset = new Vector3(0, -.2f, 0);
if (movement.z > 0 && Physics.Raycast(transform.position + offset, transform.forward, rayDistance, 1 << 8))
{
movement = new Vector3(movement.x, movement.y, 0);
}
else if (movement.z < 0 && Physics.Raycast(transform.position + offset, -transform.forward, rayDistance, 1 << 8))
{
movement = new Vector3(movement.x, movement.y, 0);
}
if (movement.x > 0 && Physics.Raycast(transform.position + offset, transform.right, rayDistance, 1 << 8))
{
movement = new Vector3(0, movement.y, movement.z);
}
else if (movement.x < 0 && Physics.Raycast(transform.position + offset, -transform.right, rayDistance, 1 << 8))
{
movement = new Vector3(0, movement.y, movement.z);
}
transform.Translate(movement);
}