using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BaseCameraLookAtTarget : MonoBehaviour
{
public Transform mainCameraTr; //主摄像机
public Transform lookAtTarget; //摄像机看向的目标
public float cameraDistance = 6.0F; //摄像机与看向目标的距离
public float cameraHeight = 3.0F; //摄像机高度
public float cmaeraOffset = 1.0F; //摄像机的偏移
public float mainCameraMoveSpeed = 2F; //主摄像机移动的速度
public float waitTime = 0F; //等待摄像机移动到设备附近的时间
private Vector3 lookAtTargetPosition; //看向目标时的位置
private Quaternion lookAtTargetRotation; //看向目标,且旋转
public bool isLookAtAppointTarget = false; //是否看向指定的物体
public bool isBack = false;
private Vector3 mainCameraOriginalPosition; //主摄像机的原始位置
public IEnumerator Start()
{
yield return new WaitForSeconds(0.1f);
//记录主摄像机的原始位置
if (mainCameraTr != null)
{
mainCameraOriginalPosition = mainCameraTr.localPosition;
}
}
private void FixedUpdate()
{
if (isLookAtAppointTarget == true)
{
mainCameraTr.position = Vector3.Lerp(mainCameraTr.position, lookAtTargetPosition, Time.deltaTime * mainCameraMoveSpeed);
mainCameraTr.LookAt(lookAtTarget);
// StartCoroutine(Stop(waitTime));
}
if (isBack == true)
{
mainCameraTr.position = Vector3.Lerp(mainCameraTr.position, lookAtTargetPosition, Time.deltaTime * mainCameraMoveSpeed);
//StartCoroutine(Stop(waitTime));
}
}
/// <summary>
/// 摄像机看向指定物体的方法
/// </summary>
public void LookAtAppointTarget()
{
if (lookAtTarget != null)
{
lookAtTargetPosition = new Vector3(lookAtTarget.transform.position.x + cmaeraOffset, lookAtTarget.transform.position.y + cameraHeight, lookAtTarget.transform.position.z + cameraDistance);
isLookAtAppointTarget = true;
}
else
{
Debug.LogError(GetType() + "/LookAtAppointTarget()/看向的物体不存在,请检查!!!");
}
}
//摄像机返回原始位置
public void ReturnOriginalPosition()
{
lookAtTargetPosition = new Vector3(mainCameraOriginalPosition.x, mainCameraOriginalPosition.y, mainCameraOriginalPosition.z);
isBack = true;
}
IEnumerator Stop(float waitTime)
{
yield return new WaitForSeconds(waitTime);
if (isLookAtAppointTarget == true)
{
isLookAtAppointTarget = false;
}
if (isBack == true)
{
isBack = false;
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraLookAtControl : BaseCameraLookAtTarget
{
private void Start()
{
mainCameraTr = Camera.main.transform;
StartCoroutine(base.Start());
}
public void SetCameraLookAtObj(Transform cameraTr, Transform target)
{
mainCameraTr = cameraTr;
lookAtTarget = target;
LookAtAppointTarget();
}
}