Estos son algunos errores frecuentes al programar movimiento.
Incorrecto:
transform.position += direccion * velocidad;
Correcto:
transform.position +=
direccion * velocidad * Time.deltaTime;
Si sumás X y Z, la diagonal puede tener magnitud mayor a 1.
Solución:
direccion.Normalize();
o:
direccion = Vector3.ClampMagnitude(
direccion,
1f
);
Si un objeto usa Rigidbody físico, evitar moverlo constantemente con:
transform.position = ...
porque puede pelearse con el motor de física.