Jump to content
Sign in to follow this  
JuanchiBM

ANSWERED SmoothDamp mas "nitido", ¿Como hacerlo?

Recommended Posts

Hola, basicamente hice que la camara siguiera a mi personaje con un mini retraso de 0.15 segundos para hacerlo mas comodo y no tan estatico, el problema? Que cuando el personaje se mueve pareciera como que va fotograma por fotograma y no de manera fluida, si le saco el SmoothDamp se ve bien, pero yo lo quiero para hacerlo mas comodo, alguien sabe como hacer que el SmoothDamp sea mas nitido/fluido?? Pense en algun Time * deltaTime, pero no me funciono del todo asi que ya no se como podria hacerlo mas nitido

 

public class Camara : MonoBehaviour
{

    public GameObject Follow;
    public Vector2 minCamPos, maxCamPos;
    public float smoothTime;
    private Vector2 velocity;

    float size = 34.748234f;
    bool MaxSize = true;
    bool MinSize = true;

    // Start is called before the first frame update
    void Start()
    {
        gameObject.GetComponent<Camera>().orthographicSize = size;
    }

    // Update is called once per frame
    void Update()
    {
        if (gameObject.GetComponent<Camera>().orthographicSize > 8.1)
        {
            smoothTime = 1.4f;
            size = gameObject.GetComponent<Camera>().orthographicSize = size + -0.15f;
        }
        if (gameObject.GetComponent<Camera>().orthographicSize < 8.09)
        {
            smoothTime = 0.2f;
        }

        float posX = Mathf.SmoothDamp(transform.position.x, Follow.transform.position.x, ref velocity.x, smoothTime);
        float posY = Mathf.SmoothDamp(transform.position.y, Follow.transform.position.y, ref velocity.y, smoothTime);

        transform.position = new Vector3(
            Mathf.Clamp(posX, minCamPos.x, maxCamPos.x),
            Mathf.Clamp(posY, minCamPos.y, maxCamPos.y), 
            transform.position.z);

        if (Input.GetKey("p") && MaxSize)
        {
            size = gameObject.GetComponent<Camera>().orthographicSize = size + 0.1f; 
        }
        if (Input.GetKey("o") && MinSize && size < 8.1)
        {
            size = gameObject.GetComponent<Camera>().orthographicSize = size + -0.1f;
        }
        if (size < 8)
        {
            MaxSize = true;
        }
        else if(size > 8)
        {
            MaxSize = false;
        }
        if (size < 2.351392)
        {
            MinSize = false;
        }
        else if (size > 2.351392)
        {
            MinSize = true;
        }
    }
}


 

No me deja editar el codigo para aclarar que hace cada cosa, lo edito y no se guarda o yo no lo veo guardado, los primeros 2 ifs hacen un acercamiento de camara inicial, luego es el codigo de seguimiento y el resto de Ifs es para alejar y acercar la camara con dos botones

Edited by JuanchiBM
Aclarar mas que hace cada cosa

Share this post


Link to post
Share on other sites

De entrada ese "GetComponent<Camera>" deberías guardarlo en un objeto Camera desde el Start. Te va a estar agregando una sobrecarga cada vez que lo haces desde el Update.

  • Like 1

Share this post


Link to post
Share on other sites
1 hour ago, iRobb said:

De entrada ese "GetComponent<Camera>" deberías guardarlo en un objeto Camera desde el Start. Te va a estar agregando una sobrecarga cada vez que lo haces desde el Update.

No se como hacer eso ahre, pero voy a investigar, gracias por el consejo 😄

32 minutes ago, nomoregames said:

prueba a multiplicar ese smoothTime por Time.FixedDeltaTime

 

Se arreglo un poco, pero sigue pasando, igual gracias, ahora se ve mas limpio, seguire intentando

Share this post


Link to post
Share on other sites

Bueno gente, les dejo la forma que utilize para solucionar el problema, en el codigo, reemplaze el 

"void Update" por "void FixedUpdate" y utilize Time.deltaTime para la variable smoothTime:

 void FixedUpdate()
    {

        // Acercamiento de camara al iniciar la partida
        if (camara.orthographicSize > 8.1)
        {
            smoothTime = 60f * Time.deltaTime;
            size = camara.orthographicSize = size + -0.1f;
        }
        if (camara.orthographicSize < 8.09)
        {
            smoothTime = 4f * Time.deltaTime;
        }

 

Share this post


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

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