Jump to content
Sign in to follow this  
J4v1v1g2

Asignar valor rotación a una variable.

Recommended Posts

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

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

Edited by pioj
uso de tags y <> para pegar código.

Share this post


Link to post
Share on other sites

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.

Edited by Harsel

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Sign in to follow this  

UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...