unity摄像机定位物体功能

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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值