61 lines
1.8 KiB
C#
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;
|
|
//}
|
|
}
|