Noticias

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

No me funciona Script de un prefab

Iniciado por ajdb, Septiembre 16, 2015, 11:56:31 AM

Tema anterior - Siguiente tema
Hola, a ver si me podeis decir por que no funciona el script que dejo:    public float speed = -4f;
    private PuntuacionGeneral puntuacionGeneral;
    public int puntos;
    
    void Start()
    {
        rigidbody.velocity = transform.forward *speed;
        puntos = PuntuacionGeneral.puntosJuego;
    }
    
    void Update(){        if(puntos >= 100){
            Debug.Log(" mas de 100 puntos");
            speed = -50f;
        }    }Como podeis ver es muy sencillo, pero no funciona. Se lo tengo añadido a un prefab que se va instanciando durante el juego, y lo que quiero es que aumente de velocidad, según la puntuación.Las variables speed y puntos, cambian, pero aunque la velocidad sea de -50f el prefab sigue con la velocidad inicial del -4f. La variable si que cambia a -50f.Me podeis decir a que es debido?.Gracias.

La velocidad de un rigidbody no debe modificarse directamente. La variable speed se asigna, pero nada le cambia la velocidad al rigidbody. No hay relación entre el cambio del valor en la variable y rigidbody. Para obtener los componentes, aunque estén en el mismo que el script, ya no es posible en muchos casos hacerlo directamente. Hay que utilizar GetComponent(). Creo que tienes un "cacao" de conceptos:- UtilizaRigidbody rb = this.GetComponent<Rigidbody>();para obtenerlo- Asignale una fuerza, aceleración, lo que sea con un addforce o cualquiera de las mútiples funciones: 
 rb.AddForce(transform.forward * speed);
Haz los cambios a un rigidbody siempre en el FixedUpdate, no en el Update

[quote author=iRobb" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="24283" data-ipsquote-contentcommentid="110938">La velocidad de un rigidbody no debe modificarse directamente. La variable speed se asigna, pero nada le cambia la velocidad al rigidbody. No hay relación entre el cambio del valor en la variable y rigidbody. Para obtener los componentes, aunque estén en el mismo que el script, ya no es posible en muchos casos hacerlo directamente. Hay que utilizar GetComponent(). Creo que tienes un "cacao" de conceptos:- UtilizaRigidbody rb = this.GetComponent<Rigidbody>();para obtenerlo- Asignale una fuerza, aceleración, lo que sea con un addforce o cualquiera de las mútiples funciones: 
 rb.AddForce(transform.forward * speed);
Haz los cambios a un rigidbody siempre en el FixedUpdate, no en el Update[/quote]Gracias por la respuesta, si la verdad es que estoy un poco liado, ya que llevo poco tiempo, y estoy aprendiendo. Espero que este foro me ayude. No he comentado de que el rigidbody no tiene gravedad ni es Kinematic.De la forma que me comentas se quedan flotando.


Claro, porqué no tiene gravedad ni masa. Piensa en física. Si le aplicas una fuerza a un objeto sin masa ni hay gravedad?


Di de que se trata lo que quieres instanciar para hacernos una idea

La masa y la gravedad están como parámetros en el rigidbody en el editor. Para la fuerza como te he comentado antes.

[quote author=iRobb" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="24283" data-ipsquote-contentcommentid="111074">Decirte que la parte del script que te dejo abajo funciona correctamente con los parametros del rigdbody que te comenté. Lo que no me funciona es cuando intento de que el valor de speed aumente, dependiendo del valor de los puntos, es lo que no se por que no me funciona.    public float speed = -4f;

    void Start()
    {
        rigidbody.velocity = transform.forward *speed;}Esto me va al "pelo", lo malo es cuando vario el valor de speed.A lo que me preguntaba 0c0de, es un cubo sin gravedad ni kinematico, y con box collider. Se instancia bien, solo lo que me falla es lo que comento, antes.

Etiquetas: