SalasJuan / CodeHunter

Repositorio para el Juego Code Hunter
1 stars 0 forks source link

Efecto Parallex #11

Closed SalasJuan closed 10 months ago

SalasJuan commented 11 months ago

Investigar e Implementar el EFECTO PARALLEX. //Guardar Informacion sobre el Funcionamiento

SalasJuan commented 11 months ago

LateUpdate es un método en Unity que se utiliza para realizar actualizaciones de comportamiento después de que Unity haya actualizado la posición y la rotación de todos los objetos en la escena. Se llama después de que se hayan realizado las actualizaciones de Update y antes de que se dibuje la escena en el fotograma actual. Esto es útil en situaciones donde deseas asegurarte de que tu comportamiento se ejecute después de que todos los objetos hayan realizado sus movimientos y actualizaciones de transformación.

Algunas de las situaciones en las que LateUpdate puede ser útil incluyen:

  1. Seguimiento de cámaras: Cuando necesitas que la cámara siga a un objeto en movimiento, es común hacerlo en LateUpdate para asegurarte de que la cámara siga la posición final del objeto después de todas las actualizaciones de movimiento.

  2. Interacciones entre objetos: Si tienes objetos que interactúan entre sí, es posible que desees realizar cálculos o comprobaciones en LateUpdate después de que los objetos hayan realizado sus actualizaciones en Update.

  3. Animaciones: En el caso de animaciones complejas, es posible que desees sincronizar ciertos eventos de animación o transiciones en LateUpdate para garantizar que se ejecuten en el momento adecuado después de que se hayan realizado las actualizaciones de transformación.

En resumen, LateUpdate es útil para controlar el comportamiento que debe ocurrir después de que se hayan realizado todas las actualizaciones de transformación en la escena, lo que puede ser esencial para lograr un comportamiento suave y predecible en tu juego o aplicación en Unity.

SalasJuan commented 11 months ago

using UnityEngine;

public class Parallex : MonoBehaviour { private Transform cameraTransform; private Vector3 previousCameraPosition; private float spriteWidth, startPosition; //Almacena el Tamaño del Sprite y su Posicion Inicial. [Serializefield] private float ParallaxMultiplier;

void start()
{
    cameraTransform = Camera.main.Transform;
    previousCameraPosition = cameraTransform.Position;
    spriteWidth = GetComponent<SpriteRenderer>().bounds.size.x;
    startPosition = cameraTransform.position.x;
}

void LateUpdate()
{//LateUpdate sirve para realizar actualizaciones luego de haber realizado todos los cambios de Posiciones de los Objetos.

    float DeltaX = (cameraTransform.position.x - previousCameraPosition.x)* ParallaxMultiplier; //Se resta la posicion de la camara actual menos la anterior
    float MoveAmount(camera.Transform.position.x * (1 - ParallaxMultiplier))//Movimiento de la Camara con respecto a la Capa.
    transform.Translate(new Vector3(DeltaX,0,0));
    previousCameraPosition = cameraTransform.position;//Asignar la nueva posicion de la camara

    if(MoveAmount > startPosition + spriteWidth)
    {//Si la posicion de la camara supera el borde del sprite se reposicionara
        transform.Translate(new Vector3(spriteWidth,0,0));
        startPosition += spriteWidth;
    }
    else if(MoveAmount < startPosition - spriteWidth)
    {
        transform.Translate(new Vector3(-spriteWidth,0,0));
        startPosition -= spriteWidth;
    }
}

}