Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: J4v1v1g2 en Mayo 05, 2017, 04:31:43 PM

Título: Asignar valor rotación a una variable.
Publicado por: J4v1v1g2 en Mayo 05, 2017, 04:31:43 PM
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");
            }  
    }

 
 
Título: Asignar valor rotación a una variable.
Publicado por: lightbug en Mayo 05, 2017, 10:03:20 PM
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...
Título: Asignar valor rotación a una variable.
Publicado por: J4v1v1g2 en Mayo 06, 2017, 03:35:49 PM
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");
        }     
    }
}

 
 
Título: Asignar valor rotación a una variable.
Publicado por: Harsel en Mayo 08, 2017, 09:42:34 PM
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.
Título: Asignar valor rotación a una variable.
Publicado por: J4v1v1g2 en Mayo 09, 2017, 02:20:04 PM
Gracias  por la aclaración, a ver si saco un ratico de tiempo y miro a ver si dejo los jostick terminados :D