Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

261
Vistas
Unity Viewbob usando lerp snaps back para 1 cuadro al azar

Tengo un problema con mi ViewBobScript, vuelve a la posición de inicio de lerps durante 1 cuadro.

Aquí hay una recreación / video de mi problema: (Debido a que la velocidad de fotogramas del video no coincide con el juego, puede parecer que el lerp no es fluido, mientras que el problema es el chasquido al principio y al final de el video y parece ocurrir a intervalos irregulares)

https://youtu.be/UOz2pQcMFjY

Y aquí está mi código:

 private float aTimer; private int viewBobPath = 1; private float startViewBob; private float viewBobPathTimer; private void ViewBob() { startViewBob = viewBobSpeed / 2; aTimer += Time.deltaTime; viewBobPathTimer += Time.deltaTime; if (aTimer > startViewBob * viewBobPath) { viewBobPath++; } if (viewBobPathTimer > startViewBob) { viewBobPathTimer = 0; } if (aTimer < (viewBobSpeed * 2)) { switch (viewBobPath) { case 1: playerCam.transform.localPosition = Vector3.Lerp(new Vector3(-viewBobHorizontal / 2, 0, 0), new Vector3(0, -viewBobVertical, 0), viewBobPathTimer); break; case 2: playerCam.transform.localPosition = Vector3.Lerp(new Vector3(0, -viewBobVertical, 0), new Vector3(viewBobHorizontal / 2, 0, 0), viewBobPathTimer); break; case 3: playerCam.transform.localPosition = Vector3.Lerp(new Vector3(viewBobHorizontal / 2, 0, 0), new Vector3(0, -viewBobVertical, 0), viewBobPathTimer); break; case 4: playerCam.transform.localPosition = Vector3.Lerp(new Vector3(0, -viewBobVertical, 0), new Vector3(-viewBobHorizontal / 2, 0, 0), viewBobPathTimer); break; } } else { aTimer = 0; viewBobPathTimer = 0; viewBobPath = 1; } }

Además, sé que el controlador de personajes de Unity tiene ViewBobbing. pero esta no es una opción para mi aplicación.

¡Muchas gracias por ayudar!

Editar: esto se llama desde la función de actualización, aunque he intentado la actualización fija y tardía, ambas no cambian, resuelven o reducen el problema.

Aunque mi secuencia de comandos funciona y sigo con mi proyecto, si sabe por qué mi código anterior no funcionó/hizo el Snap, le agradecería saberlo para aprender de él.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Adoptaría un enfoque diferente, agregando Time.deltaTime a un campo, luego calculando qué ruta y qué t param corresponde a ese campo. Mathf.Repeat es útil para esto.

 [SerializeField] int pathIndex; [SerializeField] float pathT; [SerializeField] float aTimer; [SerializeField] float pathDuration = 1f; // how long each path takes in seconds private void ViewBob() { // update aTimer but wrap around at pathDuration x 4 ( [0, 4pD) ) aTimer = Mathf.Repeat(aTimer + Time.deltaTime, pathDuration * 4f); // How many path durations is aTimer along? ( {0, 1, 2, 3} ) pathIndex = Mathf.FloorToInt(aTimer/pathDuration); // How far into the current path duration is aTimer? ( [0,1) ) pathT = Mathf.Repeat(aTimer, pathDuration) / pathDuration; Vector3 fromVector; Vector3 toVector; // assign to/from vectors based on pathIndex switch (pathIndex) { default: case 0: fromVector = new Vector3(-viewBobHorizontal / 2, 0, 0); toVector = new Vector3(0, -viewBobVertical, 0); break; case 1: fromVector = new Vector3(0, -viewBobVertical, 0); toVector = new Vector3(viewBobHorizontal / 2, 0, 0); break; case 2: fromVector = new Vector3(viewBobHorizontal / 2, 0, 0); toVector = new Vector3(0, -viewBobVertical, 0); break; case 3: fromVector = new Vector3(0, -viewBobVertical, 0); toVector = new Vector3(-viewBobHorizontal / 2, 0, 0); break; } // lerp position based on pathT and the to/from vectors playerCam.transform.localPosition = Vector3.Lerp(fromVector, toVector, pathT); }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda