using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lookatthecamera : MonoBehaviour
{
    //主相机
    public Camera mainCamera;
    //翻转背面
    public bool invertBack;
    //是否启用垂直方向上的朝向
    //设为false时 仅在水平方向上面向相机
    public bool isEnableVertical = true;
    //是否启用插值运算
    public bool isEnableLerp;
    //插值到目标值所需的时间 isEnableLerp为true时起作用
    [Range(0.01f, 1f), SerializeField] private float lerpTime = 1f;

    public float _distance;//最大距离

    Vector3 initScale;

    private void Start()
    {
        if (mainCamera == null)
        {
            mainCamera = Camera.main ?? FindObjectOfType<Camera>();
        }

        initScale = transform.localScale;
    }

    private void Update()
    {
        if (mainCamera == null)
            return;

        Vector3 forward = (isEnableVertical
            ? -mainCamera.transform.forward
            : Vector3.ProjectOnPlane((mainCamera.transform.position - transform.position).normalized, Vector3.up))
            * (invertBack ? 1 : -1);

        transform.forward = !isEnableLerp ? forward
            : Vector3.Lerp(transform.forward, forward, 1f - Mathf.Exp(Mathf.Log(1f - .99f) / lerpTime * Time.deltaTime));

        float distance = Vector3.Distance(Camera.main.transform.position, transform.position);//不断变化的距离
        float scale = distance / _distance;
        if (scale > 3f)
            scale = 3f;
        transform.localScale = initScale * scale;
    }

    //public Face2Camera Set(Camera mainCamera, bool invertBack, bool isEnableVertical)
    //{
    //    this.mainCamera = mainCamera;
    //    this.invertBack = invertBack;
    //    this.isEnableVertical = isEnableVertical;
    //    return this;
    //}
}