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(); } 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; //} }