Jump to content
nomoregames

Clamp y movimiento

Recommended Posts

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

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);
  • Like 1

Share this post


Link to post
Share on other sites

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
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

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
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

×
×
  • Create New...