nomoregames 35 Report post Posted February 21, 2020 Hola de nuevo y buenas tardes Me encuentro ante un problema concreto pero sencillo float y; float P; void Update() { y = transform.position.y; P += (Input.GetAxis("Mouse Y") / 4); y = Mathf.Clamp(y, -10, 10); transform.position = new Vector3(0, y); // con esto hago que al mover el raton en y se mueva el obj transform.position = new Vector3(0, P); // con esto intento clampear la pos y para que no se pase de un limite } Pero no se clampea sino que simplemente no se mueve Hay algún modo sencillo de hace esto sin llenarlo todo con if? Gracias por vuestra atencion Share this post Link to post Share on other sites
Alex 44 Report post Posted February 21, 2020 Quieres impedir que tu objeto no salga de una posición específica? Me refiero a una posición global que no se cambia en ningún momento. Puedes usar: //Agrega ésto a Update. gameObject.transform.position = new Vector3 Mathf.Clamp(gameObject.transform.position.y, -10, 10); Share this post Link to post Share on other sites
Igor 337 Report post Posted February 21, 2020 a ver... Vector3 deve tener 3 valores como su nombre indica, ambos os estais liando... //porejemplo: transform.position = new Vector3(x, y, z); ademas estas poniendo transform.position = new Vector3(0, y); //y justo despues pones: transform.position = new Vector3(0, P); //osea, primero dices que la posicion es una y justo despues le dices que es otra //eso esta mal.... porque lo segundo hace que lo primero no valga para nada para hacer lo que quieres hacer en Update valdria solo con dos lineas P += (Input.GetAxis("Mouse Y") / 4); transform.position = new Vector3(0, Mathf.Clamp(P,-10, 10), 0); //primer valor(x) es cero, el segundo(y) es "clamp" de "P", y en tercero(z) es cero luego ademas estas poniendo la variable "P" en mayuscula, cuando deveria ser en minuscula... las variables van en minusculas.... y las "classes" y las funciones van en Mayuscula.... //.... y el movimiento que vas a lograr con esta linea P += (Input.GetAxis("Mouse Y") / 4); //me parece que no va a ser el que buscas... Share this post Link to post Share on other sites
lightbug 837 Report post Posted February 22, 2020 10 hours ago, nomoregames said: Pero no se clampea sino que simplemente no se mueve Se debería mover, ese P se está cambiando frame a frame, aunque muy poquito (GetAxis / 4 es muy chiquito). No deberías asignar algo y en la línea que sigue reasignarlo (transform.position ), ya que estás pisando lo anterior. No se si es una de esas líneas de prueba, igual si está de prueba comentala, si no estaría mal. Al final tenés algo así (idéntico pero comentado): float y; // ---------- De más float P; void Update() { y = transform.position.y; // ---------- De más P += (Input.GetAxis("Mouse Y") / 4); y = Mathf.Clamp(y, -10, 10); // ---------- De más transform.position = new Vector3(0, y); // ---------- De más transform.position = new Vector3(0, P); } En tu caso solamente funciona esta línea: P += (Input.GetAxis("Mouse Y") / 4); transform.position = new Vector3(0, P); Share this post Link to post Share on other sites
nomoregames 35 Report post Posted February 22, 2020 Antes de nada, muchas gracias a todos por vuestras respuestas, me ayudan a no rendirme 19 hours ago, Alex said: //Agrega ésto a Update. gameObject.transform.position = new Vector3 Mathf.Clamp(gameObject.transform.position.y, -10, 10); ¡Ha funcionado! pero no entiendo por qué... estuve haciendo pruebas y en una de ellas hice lo siguiente y = transform.position.y; P += (Input.GetAxis("Mouse Y") / 4); P = Mathf.Clamp(P, -10, 10); y = Mathf.Clamp(transform.position.y, -10, 10); transform.position = new Vector3(0, P); // con esto hago que al mover el raton en y se mueva el obj transform.position = new Vector3(0, y); Por lo que veo es prácticamente es lo mismo solo que en el segundo a el clamp le asigno una variable.... a que se debe que uno funcione y el otro no?? Y lo de las mayusculas a que se debe?? es mejor para la maquina o es solo una buena costumbre Igor 18 hours ago, Igor said: P += (Input.GetAxis("Mouse Y") / 4); transform.position = new Vector3(0, Mathf.Clamp(P,-10, 10), 0); //primer valor(x) es cero, el segundo(y) es "clamp" de "P", y en tercero(z) es cero en un principio pense en hacerlo como tu, clampeando directamente la var P, pero como el objeto en ocasiones se "teletransporta" , quiero decir que se movera sin tener en quenta la var P, d modo que se desconfiguraria todo.... Y lightbug No se mueva nada... lo divido entre 4 por que sino moviendo muy poco el mouse el objeto se iba a la pu**, todo funciona hasta que le pongo el clamp Share this post Link to post Share on other sites
Alex 44 Report post Posted February 23, 2020 On 2/21/2020 at 3:05 PM, Igor said: Vector3 deve tener 3 valores como su nombre indica, ambos os estais liando... Bueno, gracias por la observación, realmente dispuse de pocos minutos para escribir la respuesta y no me di cuenta de eso, la próxima revisaré bien. 11 hours ago, nomoregames said: lo de las mayusculas a que se debe?? Aquí te dejo una página que lo explica: http://codigolinea.com/estilo-de-programacion-y-convencion-de-nombres-ii/ Share this post Link to post Share on other sites