Unity中实现相机的跟随

第一种方式(Vector3.SmoothDamp())。

这种跟随方式在平滑时的效果感觉好一些。

将FollowTarget.cs挂载在相机上,再指定一个相机想要跟随的物体,将其赋给共有属性targetTrans。

public class FollowTarget : MonoBehaviour
{
    public Transform targetTrans;
    private float lerpTime = 0.5f;
    Vector3 velocity = Vector3.zero;
    private void Update()
    {
        if(targetTrans !=null)
        {
            Vector3 pos = Camera.main.WorldToViewportPoint(targetTrans.position);
            Vector3 offset = targetTrans.position - Camera.main.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, pos.z));
            Vector3 destination = transform.position + offset;

            destination.x = 0;
            if (destination.y > transform.position.y)
            {
                transform.position = Vector3.SmoothDamp(transform.position, destination, ref velocity, lerpTime);
            }

            //Vector3 cameraPos = transform.position;

            //if (destination.y > transform.position.y)
            //{
            //    cameraPos.y = Mathf.Lerp(transform.position.y, destination.y, lerpTime);
            //}
            //transform.position = cameraPos;
        }
    }
}

第二种方式(Mathf.Lerp())

这种方式的平滑效果感觉要生硬一些

public class FollowTarget : MonoBehaviour
{
    public Transform targetTrans;
    private float lerpTime = 0.5f;
    Vector3 velocity = Vector3.zero;
    private void Update()
    {
        if(targetTrans !=null)
        {
            Vector3 pos = Camera.main.WorldToViewportPoint(targetTrans.position);
            Vector3 offset = targetTrans.position - Camera.main.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, pos.z));
            Vector3 destination = transform.position + offset;

            //destination.x = 0;
            //if (destination.y > transform.position.y)
            //{
            //    transform.position = Vector3.SmoothDamp(transform.position, destination, ref velocity, lerpTime);
            //}

            Vector3 cameraPos = transform.position;

            if (destination.y > transform.position.y)
            {
                cameraPos.y = Mathf.Lerp(transform.position.y, destination.y, lerpTime);
            }
            transform.position = cameraPos;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_40323256/article/details/88647355