Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Temas recientes

Clamp y movimiento

Iniciado por nomoregames, Febrero 21, 2020, 06:09:09 PM

Tema anterior - Siguiente tema
Febrero 21, 2020, 06:09:09 PM Ultima modificación: Febrero 21, 2020, 06:12:37 PM por nomoregames
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

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

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

 
 

Cita de: nomoregames date=1582304949Pero 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);

 
 
 
 

Antes de nada, muchas gracias a todos por vuestras respuestas, me ayudan a no rendirme
 
Cita de: Alex date=1582310752//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 
 
Cita de: Igor date=1582315501P += (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

Cita de: Igor date=1582315501Vector3 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.
 
Cita de: nomoregames date=1582381898lo 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/

Etiquetas: