Unity相机自动巡航第二篇

222 阅读2分钟

1.功能背景

要求:对黄山园区的精细化建模建筑按照指定路径巡航。

2.解决方案

拟采用精准取点,确定巡航路径,存储机位点信息; 使用Dotween插件,按照巡航路径巡航。

3.方案实施

3.1 巡航路径规划

根据给定的路径,在路径上确定相机位点,并在该相机位点存储相机的坐标信息和欧拉角信息;
在相机巡航过程中,相机按照存储的位点坐标信息和欧拉角信息进行巡航。

3.2 插件-DoTween

3.3 功能实现

3.3.1 确定位点

首先,创建空物体,命名为CameraPoints,并分别创建YGZX_Points、GWHPoints、XLDZPoints三栋建筑的巡航机位点,如位点图所示;

image.png

3.3.2 绑定位点

其次,创建CameraXunYou脚本,具体代码如下:
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
using UnityEngine.InputSystem;

//获取所有规划的路径点
//相机按照路径点进行巡游,相机到达下一路径点后,再执行下一段路径巡游
public class CameraXunYou : MonoBehaviour
{
    //定义巡航相机位置
    private Transform cameraTransform;
    
    //定义巡航路径点集合
    public List<Transform> pathPoints = new List<Transform>();

    private void Awake()
    {
        //获取场景中巡航相机
        cameraTransform = GameObject.Find("Main Camera").transform;
    }
    void Start()
    {
        StartCameraCross(cameraTransform);
    }
    /// <summary>
    /// 定义巡航方法,开启巡航协程
    /// </summary>
    /// <param name="objtransform">传入的是巡航对象</param>
    public void StartCameraCross(Transform objtransform)
    { 
        StartCoroutine("CameraCross", objtransform);
    }
    
    //关闭巡航协程
    public void StopCameraCross()
    {
        StopCoroutine("CameraCross");
        DOTween.KillAll(true);
    }

    //定义巡航协程
    IEnumerator CameraCross(Transform objTransform)
    {
        if (objTransform != null)
        {
            for (int i = 1; i < pathPoints.Count; i++)
            {
                objTransform.DORotateQuaternion(Quaternion.Euler(pathPoints[i].rotation.eulerAngles), 5);
                objTransform.DOMove(pathPoints[i].position, 5);
                yield return new WaitForSeconds(7);
            }
        } //end cross
        else
        {
            yield return null;
        }
    }
}

3.3.2 绑定位点

如上,位点绑定图所示,需要将位点图中位点的Transform信息和脚本CameraXunYou的位点集合进行按序绑定。
至此,相机的自动巡航功能开发完毕

4 功能展示视频

哔哩哔哩视频:Unity自动巡航_哔哩哔哩_bilibili

5 联系博主

vx:bg5541923353
qq:1030762097@qq.com
email:1030762097@qq.com