Noticias

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

Asignar valor rotación a una variable.

Iniciado por J4v1v1g2, Mayo 05, 2017, 04:31:43 PM

Tema anterior - Siguiente tema
Mayo 05, 2017, 04:31:43 PM Ultima modificación: Mayo 08, 2017, 03:45:15 AM por pioj
Hi de nuevo gente
 
Pongo aquí un problemilla que estoy teniendo con una chorraíca.
 
 
 
La idea es asignar a una variable el valor de rotación de un objeto, esto es lo que tengo, pero claro esta no funciona ^^'
 

 public int Rotate;
    void Start () {
       Rotate = GetComponent<Transform>().Rotation.X;
    }
    
    void Update () {      
            if (Rotate > 50) {
                Debug.Log ("Rotacion");
            }  
    }

 
 

No es necesario usar getcomponent ya que si o si o si o si tenes un transform en un gameObject, podes llamarlo directamente con "transform"
 
De tu codigo el valor Rotate se define solo en el cuadro inicial, es lo que queres? si es asi cada valor de un vector esta compuesto por un float, es decir que Rotate debe ser un float.
 
Un error abismal que tenes es que estas haciendo public a Rotate cuando en start lo estas seteando, start siempre gana, le importa tres pepinos lo que el usuario ponga en el inspector. SI queres que sea accesible usa propiedades (get o set) o coloca [Hideintheinspector] antes de declarar la variable asi el usuario no puede modificarla (no la serializa el editor).
 
Te falta decir a que te referis con el "no funciona". Porque muchas veces dicen "esto no me funciona", cuando en realidad si lo hace, pero no se comporta finalmente como uno quiere. De que naturaleza es el error que tenes, compila? tira null references? no pasa nada pero nunca imprime? etc...

Mayo 06, 2017, 03:35:49 PM #2 Ultima modificación: Mayo 08, 2017, 10:47:44 PM por pioj
Sorry si parece una tontería pero llevo la cabeza a tope, y la programación no es mi fuerte ^^, el tema es que he creado un jostick y necesito crear un tope que en el eje x de la camara,(50 y -50 ) pongo el código que tengo añadido a la maincamera a ver si alguien me puede echar una mano.
 

    public Jmove S2;   //Jostick
    void Update () {
        if (S2.Vertical > 0f) {
            if (_______????_____)   <--// condición para que cuando la rotación de la camara en el eje x llegue a 50 pare la rotacion..
           {
                transform.Rotate (Vector3.left / 2);
                Debug.Log ("Rotacion_vista_arriba");
            }
        }
        if (S2.Vertical <)
        {
            transform.Rotate (Vector3.right / 2);
            Debug.Log ("Rotacion_vista_abajo");
        }     
    }
}

 
 

Mayo 08, 2017, 09:42:34 PM #3 Ultima modificación: Mayo 08, 2017, 09:44:33 PM por Harsel
El problema principal es la forma en que lo estas planteando, me explico, las rotaciones normalmente están acotadas, ya sea por euler (0-360) ó por la Quaternion de rotación de unity que creo que era de -1, 1.
 
Entonces, se te complica cuando intentas limitar estos valores por lo que ves en el Transform del editor. Por ello te recomiendo antes de nada capar los valores de tu float al rango que quieras con el método Clamp de Mathf.
 
Te dejo aquí un ejemplo.
 

   public Jmove S2;   //Jostick
    private float rotacionX = 0f;
    void Update()
    {
        float valor = S2.Vertical;
        rotacionX += valor / 2;
        rotacionX = Mathf.Clamp(rotacionX, -50f, 50f);
        transform.localEulerAngles = new Vector3(-rotacionX, transform.localEulerAngles.y, transform.localEulerAngles.z)  
    }

 
En el caso de que los valores del input no sean inversos simplemente quita el "-" de la x del Vector3.
 
Un saludo.

Gracias  por la aclaración, a ver si saco un ratico de tiempo y miro a ver si dejo los jostick terminados :D

Etiquetas: