
插件源码可见, 你能学到
- 可视化场景编辑器
- 贝塞尔路径设计
- Unity Editor扩展
- 更多扩展,可地形生成,地图笔刷
使用方法
设置地面

新建路径
寻路编辑器界面位置: Tools/Pathfinding Editor
按住Shift键 鼠标左键点击 新建路点, 按Delete键删除节点
控制点编辑

移动组件

数据以序列化的形式存储

高性能, 无额外的场景节点,不生成空节点
csharp
using UnityEngine;
using System;
[System.Serializable]
public class Waypoint
{
[Header( "基础设置" )]
[SerializeField] public Vector3 position;
[SerializeField] public float radius = 1f;
[SerializeField] public Color color = Color.white;
[SerializeField] public string name;
[Header( "贝塞尔控制点" )]
[SerializeField] public Vector3 forwardControlPoint; // 前向控制点
[SerializeField] public Vector3 backwardControlPoint; // 后向控制点
[SerializeField] public bool showControlPoints = true;
[SerializeField] public bool autoCalculateControlPoints = true;
[SerializeField] public float controlPointDistance = 2f; // 控制点距离
public Waypoint( Vector3 pos, string waypointName = "" )
{
position = pos;
name = string.IsNullOrEmpty( waypointName ) ? "Waypoint" : waypointName;
// 初始化控制点
forwardControlPoint = pos + Vector3.forward * controlPointDistance;
backwardControlPoint = pos + Vector3.back * controlPointDistance;
}
// 获取世界坐标的前向控制点
public Vector3 GetWorldForwardControlPoint( )
{
return position + forwardControlPoint;
}
// 获取世界坐标的后向控制点
public Vector3 GetWorldBackwardControlPoint( )
{
return position + backwardControlPoint;
}
// 设置世界坐标的前向控制点
public void SetWorldForwardControlPoint( Vector3 worldPos )
{
forwardControlPoint = worldPos - position;
}
// 设置世界坐标的后向控制点
public void SetWorldBackwardControlPoint( Vector3 worldPos )
{
backwardControlPoint = worldPos - position;
}
// 自动计算控制点
public void AutoCalculateControlPoints( Waypoint previousWaypoint, Waypoint nextWaypoint )
{
if ( !autoCalculateControlPoints ) return;
Vector3 direction = Vector3.zero;
if ( previousWaypoint != null && nextWaypoint != null )
{
// 中间点:使用前后路点的方向
direction = ( nextWaypoint.position - previousWaypoint.position ).normalized;
}
else if ( nextWaypoint != null )
{
// 起始点:使用到下一个点的方向
direction = ( nextWaypoint.position - position ).normalized;
}
else if ( previousWaypoint != null )
{
// 结束点:使用从上一个点的方向
direction = ( position - previousWaypoint.position ).normalized;
}
forwardControlPoint = direction * controlPointDistance;
backwardControlPoint = -direction * controlPointDistance;
}
}
[System.Serializable]
public class PathData
{
[SerializeField] public string pathName = "New Path";
[SerializeField] public Waypoint[] waypoints = new Waypoint[ 0 ];
[SerializeField] public bool useBezierSmoothing = true;
[SerializeField] public int bezierResolution = 20;
[SerializeField] public Color pathColor = Color.yellow;
[SerializeField] public float pathWidth = 0.1f;
[Header( "控制点设置" )]
[SerializeField] public bool showAllControlPoints = true;
[SerializeField] public Color controlPointColor = Color.cyan;
[SerializeField] public Color controlLineColor = Color.gray;
[SerializeField] public float controlPointSize = 0.3f;
}
工具下载
视频地址
Unity 塔防可视化路点编辑器 - 运行时高性能 无额外渲染节点 纯数据处理