最近公司有个项目需要做个Demo,功能是在3D场景中实时更新物体的GPS位置让物体在3d场景中移动,然后可以回访轨迹。GPS坐标转换为Unity坐标网上有比较多的博客,这里就不说了,主要分享一下物体运动和轨迹绘制以及回放的实现方法。
效果看视频:
Unity轨迹回放功能录屏
逻辑是,通过NavMeshAgent组件和Unity自带的路网烘培让小球动起来,然后鼠标按下的时候记录一下小球所在的位置,用于之后的轨迹的绘制,然后通过LineRenderer在场景中画出轨迹,UI的Slider来控制物体是在哪个点,代码如下:
PlayerMove挂载在NavMeshAgent的物体上,鼠标点击路网让他移动,按下空格键回放轨迹
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.UI;
/// <summary>
/// 物体移动
/// </summary>
public class PlayerMove : MonoBehaviour
{
/// <summary>
/// ID
/// </summary>
public string ID
{
get;
set;
}
/// <summary>
/// 回放时得到下个点的速度
/// </summary>
public float getPointSpeed;
/// <summary>
/// 回放时移动速度
/// </summary>
public float replayMoveSpeed;
/// <summary>
/// 存放所有行走的路径点
/// </summary>
private List<Vector3> roadPoints = new List<Vector3>();
/// <summary>
/// 寻路组件
/// </summary>
private NavMeshAgent meshAgent;
/// <summary>
/// 轨迹回放控制器
/// </summary>
ReplayController replayController;
// Start is called before the first frame update
void Start()
{
meshAgent = GetComponen