NewN_UAVPlane/Assets/Temp/Scripts/Lookatthecamera.cs

61 lines
1.8 KiB
C#

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