Unity 塔防自用可视化路点寻路编辑器

插件源码可见, 你能学到

  • 可视化场景编辑器
  • 贝塞尔路径设计
  • 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;
}

工具下载

CSDN下载链接

视频地址

Unity 塔防可视化路点编辑器 - 运行时高性能 无额外渲染节点 纯数据处理

相关推荐
软件黑马王子1 小时前
2025GUI项目实践:Unity编辑模式下GUI运行
游戏·unity·gui
王源骏2 小时前
Unity实现网页端 打开本地文件选择图片上传到阿里云的OSS
unity·阿里云·游戏引擎
爱吃小胖橘2 小时前
Unity-角色控制器
3d·unity·c#·游戏引擎
新石器程序员4 小时前
借鉴bevy实现适用于Godot-rust的状态管理
rust·游戏引擎·godot·bevy
qq7422349845 小时前
免费版Markdown 编辑器:Typora
大模型·编辑器·markdown
Run Freely9375 小时前
Linux-01_2(vi / vim 编辑器)
linux·编辑器·vim
MediaTea6 小时前
Python 编辑器:IDLE
开发语言·python·编辑器
php@king7 小时前
安装xdebug调试工具(docker容器+vscode编辑器+xdebug)
vscode·docker·编辑器
景晁7 小时前
(自用)vim的高级命令
linux·编辑器·vim
Kaaras7 小时前
游戏引擎以及游戏开发
游戏引擎