[UNITY] Mathf.Clamp y RigidBody.MovePosition

marod

Buenas noches.

Iré al grano, quiero hacer mover un cubo en 3D (Con las teclas de dirección) a izquierda y derecha con el movimiento limitado a ambos lados. El problema viene cuando un limite está a -1.47 y el cubo llega ahí, se para, pero si sigo dando a la tecla de avanzar, pasa más del límite.

Quiero evitar eso. En un tutorial vi que directamente esto se podría arreglar de forma sencilla trastocando lo que es la posición del rigidbody pero me aconsejaron que no hiciera eso y que en vez de trastocar la posición, usara el metodo de MovePosition, y creo que es el principal problema de todo porque cuando llega a la posición delimitante y sigo manteniendo la tecla de avanzar, se sigue activando MovePosition y calcula una posición más allá del limite.

Os pongo un gif con el problema:

Y aquí el código del movimiento:

void FixedUpdate () {

	Vector3 movement = transform.right * Input.GetAxis("Horizontal") * speed * Time.deltaTime;

	rb.position = new Vector3(

		Mathf.Clamp(rb.position.x, -1.47f, 2f),
		rb.position.y,
		rb.position.z
	);


	rb.MovePosition(rb.position + movement);
		

}

Sé que es una gilipollez y que no se va a notar al final en el juego, pero quiero aprender a hacerlo bien.

Un saludo y muchas gracias.

Keldon

Lo mismo es una tonteria y no se hace así pero por si te ayuda podrías comprobar si el movimiento es valido siempre que intentes hacerlo, por lo tanto si el movimiento no es valido por que se pasa de los limites o por cualquier motivo no lo va a realizar y no va a dar el pequeño saltito ese que se ve en el ejemplo.

Anonimus

el problema creo que lo tienes en la última linea, que lo mueve desde el limite y luego lo vuelve a colocar en el límite

Usuarios habituales

  • Anonimus
  • Keldon
  • marod