Noticias

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

Problemas con Script para seguimiento de cámara a personaje

Iniciado por halpe, Octubre 16, 2017, 08:28:55 PM

Tema anterior - Siguiente tema
Hola si necesito ayuda el tema es que yo estoy haciendo un juego y vi un tutorial donde explicaba y hacia un script para el seguimiento. A el creador le funcionaba muy bien pero a mi no si alguien me puede ayudar le agradecería mucho gracias. :)
 
 
 

No sé si estás llamando esa función desde algún otro Update, pero si no, no está haciendo nada. También a lo mejor querías llamarla FixedUpdate, para que se llame cada frame.

Cita de: OldGuy date=1508178765No sé si estás llamando esa función desde algún otro Update, pero si no, no está haciendo nada. También a lo mejor querías llamarla FixedUpdate, para que se llame cada frame.
   


Pero porque no estaría haciendo nada. Ademas corregí lo del update pero es lo mismo.


Cita de: OldGuy date=1508181558¿Desde donde llamas la función FixUpdate?
   


 
 

Cita de: halpe date=1508181271Pero porque no estaría haciendo nada. Ademas corregí lo del update pero es lo mismo.
   


elegiste el target desde el inspector? sabes porque se debe llamar FixedUpdate y no como vos quieras? Y sabes cual es la diferencia entre Update y FixedUpdate?
 
Cita de: halpe date=1508178535A el creador le funcionaba muy bien pero a mi no..
   


Mira Halpe, de onda, no sigas más tutoriales, aprendé que hace cada cosa, busca en el manual de Unity, si no vas a tropezar cada 10 líneas de código y al final terminarás haciendo todo, solo para borrarlo y rehacerlo de nuevo, ya que hay tutoriales bastantes feos, si te pongo un top de los peores que he visto, te diria que los de Unity Oficial ganan por goleada.

Es que en ese código sigo sin ver donde llamas a la función FixUpdate... Y me extraña que no funcione con FixedUpdate porque el resto del código no parece estar mal...
 
 
 

public class CameraFollow : MonoBehaviour {
    public GameObject follow;
    public Vector2 minCamPos, maxCamPos;
   
    void FixedUpdate()
    {
        float posX = follow.transform.position.x;
        float posY = follow.transform.position.y;
        transform.position = new Vector3(Mathf.Clamp(posX, minCamPos.x, maxCamPos.x), Mathf.Clamp(posY, minCamPos.y, maxCamPos.y), transform.position.z);
    }
}

 
 

Cita de: lightbug date=1508181859elegiste el target desde el inspector? sabes porque se debe llamar FixedUpdate y no como vos quieras? Y sabes cual es la diferencia entre Update y FixedUpdate?
   
   
      Mira Halpe, de onda, no sigas más tutoriales, aprendé que hace cada cosa, busca en el manual de Unity, si no vas a tropezar cada 10 líneas de código y al final terminarás haciendo todo, solo para borrarlo y rehacerlo de nuevo, ya que hay tutoriales bastantes feos, si te pongo un top de los peores que he visto, te diria que los de Unity Oficial ganan por goleada.
   


SI quieres decir que que puse a la cámara como hija del personaje si. Ademas en el script de la camara cuando pone a quien seguir puse/arrastre el gameobject del persoanje. La diferencia es faci Update es para cada fotograma del juego/proyecto y fixedupdate es para  ejecuta varias veces por fotograma y se usa más para fisicas

Cita de: halpe date=1508182588SI quieres decir que que puse a la cámara como hija del personaje si.
   


eso no tiene nada que ver, justamente haces el script para no hacer eso, e independizar movimiento de personaje con cámara, si la pones de hija está siempre siguiendo al personaje, sin que vos se lo impongas en un script.
 
 
 
Cita de: halpe date=1508182588Ademas en el script de la camara cuando pone a quien seguir puse/arrastre el gameobject del persoanje
   


bien
 
Cita de: halpe date=1508182588La diferencia es faci Update es para cada fotograma del juego/proyecto y fixedupdate es para  ejecuta varias veces por fotograma y se usa más para fisicas
   


Update se actualiza cuando puede, es decir tenés un deltaTime variable, puede ser que sea muy rapido o muy lento, dependerá de tu "frameRate", fixed update tiene un delta time fijo (= fixed). Es cierto se usa para las físicas ya que este fixed Time coincide con el que el motor de las físicas usa para sus steps y no tiene sentido aplicar fuerzas en update. El juego "se actualiza" en Update, es decir habrá muchas cosas, además de movimientos que cambiarán cuadro a cuadro, tu camara tiene que ser rápida, ya sea para seguir un target o para apagarse porque apretaste "pausa" y algo debe cambiar en esta (que se yo). Si tu camara va a seguir objetos es recomendable que esté en LateUpdate, que cada vez que pueda se actualice + que lo haga una vez que pasen todos los updates.

Cita de: lightbug date=1508184415eso no tiene nada que ver, justamente haces el script para no hacer eso, e independizar movimiento de personaje con cámara, si la pones de hija está siempre siguiendo al personaje, sin que vos se lo impongas en un script.
   
   
       
   
   
      bien
   
   
      Update se actualiza cuando puede, es decir tenés un deltaTime variable, puede ser que sea muy rapido o muy lento, dependerá de tu "frameRate", fixed update tiene un delta time fijo (= fixed). Es cierto se usa para las físicas ya que este fixed Time coincide con el que el motor de las físicas usa para sus steps y no tiene sentido aplicar fuerzas en update. El juego "se actualiza" en Update, es decir habrá muchas cosas, además de movimientos que cambiarán cuadro a cuadro, tu camara tiene que ser rápida, ya sea para seguir un target o para apagarse porque apretaste "pausa" y algo debe cambiar en esta (que se yo). Si tu camara va a seguir objetos es recomendable que esté en LateUpdate, que cada vez que pueda se actualice + que lo haga una vez que pasen todos los updates.
   


Solucionado otra vez te lo agradezco mucho saludos. :)

Cita de: halpe date=1508185612Solucionado otra vez te lo agradezco mucho saludos. :)
   


@lightbug , fuera de tema, dices que colocas la camara en lateUpdate, jeje, yo hago alrreves, a veces suelo hacer que la "camara" sea lo primero que se ejecuta (suelo ponerla en "-100" el script ejecution order (o como se llame) )
 
porque luego si quiero colocar "marcadores" en el HUD o GUI en las posiciones de las tropas o de los enemigos o de lo que sea, y los quiero colocar en la posicion en pantalla de eso objetos, si la camara se mueve al final, salen todos los "marcadores" mal colocados....  
 
pero otras veces si lo pongo al final....
 
porcierto... usais todos el ejecution order o soy el unico que lo usa todo el rato para "ordenar" los scripts... y... cambiar el orden de los script... afecta al rendimiento??? no deveria en absoluto, no? (jeje, estoy obdesionado con el rendimiento)

Cita de: Igor date=1508189923porque luego si quiero colocar "marcadores" en el HUD o GUI en las posiciones de las tropas o de los enemigos o de lo que sea, y los quiero colocar en la posicion en pantalla de eso objetos, si la camara se mueve al final, salen todos los "marcadores" mal colocados....  
   


Una cosa es el orden de ejecución de los scripts y otra cosa es el orden de renderizado. Se usa el Late porque los objetos se mueven y la camara actúa luego, si fuera alrevés la cámara siempre se queda un cuadro atras en todo momento y no se está donde debe estar (además de que puede funcionar bien el script para algunos targets y no para otros). Por ej para un lerp influenciado con un deltaTime puede no "sentirse", pero estarías siguiendo mal a un target.
 
 
 
Cita de: Igor date=1508189923porcierto... usais todos el ejecution order o soy el unico que lo usa todo el rato para "ordenar" los scripts... y... cambiar el orden de los script... afecta al rendimiento??? no deveria en absoluto, no? (jeje, estoy obdesionado con el rendimiento)
   


nunca lo toco, creo que alguna vez necesité que algo este si o si antes, no recuerdo bien, algun manager de algo, pero en general casi nunca.
 
Con respecto al rendimiento, si pones en tercer lugar a un script que contenga una "T" en su nombre, tendras un mega boost de performance del 750%!!! muy recomendado.

Cita de: lightbug date=1508191272Con respecto al rendimiento, si pones en tercer lugar a un script que contenga una "T" en su nombre, tendras un mega boost de performance del 750%!!! muy recomendado.
   


jejeje, muy bueno saberlo.... empezare a llamar a todos los scripts "T_noseque" y "T_loOtro" y asi siempre habra una "T" en tercer lugar jejeje 
 
 
 
nose... yo lo uso porejemplo: el script de los proyectiles, tiene que ir despues del movimiento de los personajes, 
 
ejemplo 1:(proyectil despues de player)
 
frame 1 
 
-script player, se mueve y dispara(creo una instancia de proyectil)
 
-script proyectil, se mueve y comprueba fisicas
 
al final del frame todo acaba correcto
 
 
 
ejemplo 2:(proyectil antes de player)
 
frame 1:
 
(no hay proyectil aun)
 
-script player, se mueve y dispara
 
se acaba el frame.
 
frame 2:
 
-proyectil se mueve y fisicas
 
-player tambien se mueve
 
al final del frame el disparo parece haber salido de donde estaba el player y no de donde está
 
 
 
era solo un ejemplo ...hay otros casos que ahora mismo no recuerdo, ...nose como ...pero al final siempre algun script acabo cambiando de orden con eso del "ejecution order"

Cita de: Igor date=1508193479ejemplo 1:(proyectil despues de player)
   
   
      frame 1 
   
   
      -script player, se mueve y dispara(creo una instancia de proyectil)
   
   
      -script proyectil, se mueve y comprueba fisicas
   
   
      al final del frame todo acaba correcto
   
   
       
   
   
      ejemplo 2:(proyectil antes de player)
   
   
      frame 1:
   
   
      (no hay proyectil aun)
   
   
      -script player, se mueve y dispara
   
   
      se acaba el frame.
   
   
      frame 2:
   
   
      -proyectil se mueve y fisicas
   
   
      -player tambien se mueve
   
   
      al final del frame el disparo parece haber salido de donde estaba el player y no de donde está
   


Si, ese me parece buen ejemplo, nunca lo pensé asi pero creo que el orden en este caso influye, aunque la velocidad de un proyectil ni se compara con la del Player y muchas veces esto no te debería pasar, salvo que sea un "Worms", quizas(¿?).

Etiquetas: